update peg for [let change
parent
935c0797c3
commit
f1d9201cb2
|
@ -445,16 +445,16 @@ M: ebnf-sequence build-locals ( code ast -- code )
|
|||
drop
|
||||
] [
|
||||
[
|
||||
"FROM: locals => [let* ; FROM: sequences => nth ; [let* | " %
|
||||
dup length swap [
|
||||
dup ebnf-var? [
|
||||
"FROM: locals => [let ; FROM: sequences => nth ; [let " %
|
||||
dup length [
|
||||
over ebnf-var? [
|
||||
" " % # " over nth :> " %
|
||||
name>> %
|
||||
" [ " % # " over nth ] " %
|
||||
] [
|
||||
2drop
|
||||
] if
|
||||
] 2each
|
||||
" | " %
|
||||
" " %
|
||||
%
|
||||
" nip ]" %
|
||||
] "" make
|
||||
|
@ -463,9 +463,9 @@ M: ebnf-sequence build-locals ( code ast -- code )
|
|||
|
||||
M: ebnf-var build-locals ( code ast -- )
|
||||
[
|
||||
"FROM: locals => [let* ; FROM: kernel => dup nip ; [let* | " %
|
||||
name>> % " [ dup ] " %
|
||||
" | " %
|
||||
"FROM: locals => [let ; FROM: kernel => dup nip ; [let " %
|
||||
" dup :> " % name>> %
|
||||
" " %
|
||||
%
|
||||
" nip ]" %
|
||||
] "" make ;
|
||||
|
|
|
@ -172,9 +172,7 @@ TUPLE: peg-head rule-id involved-set eval-set ;
|
|||
l lrstack get (setup-lr) ;
|
||||
|
||||
:: lr-answer ( r p m -- ast )
|
||||
[let* |
|
||||
h [ m ans>> head>> ]
|
||||
|
|
||||
m ans>> head>> :> h
|
||||
h rule-id>> r rule-id eq? [
|
||||
m ans>> seed>> m (>>ans)
|
||||
m ans>> failed? [
|
||||
|
@ -184,14 +182,11 @@ TUPLE: peg-head rule-id involved-set eval-set ;
|
|||
] if
|
||||
] [
|
||||
m ans>> seed>>
|
||||
] if
|
||||
] ; inline
|
||||
] if ; inline
|
||||
|
||||
:: recall ( r p -- memo-entry )
|
||||
[let* |
|
||||
m [ p r rule-id memo ]
|
||||
h [ p heads at ]
|
||||
|
|
||||
p r rule-id memo :> m
|
||||
p heads at :> h
|
||||
h [
|
||||
m r rule-id h involved-set>> h rule-id>> suffix member? not and [
|
||||
fail p memo-entry boa
|
||||
|
@ -207,15 +202,12 @@ TUPLE: peg-head rule-id involved-set eval-set ;
|
|||
] if
|
||||
] [
|
||||
m
|
||||
] if
|
||||
] ; inline
|
||||
] if ; inline
|
||||
|
||||
:: apply-non-memo-rule ( r p -- ast )
|
||||
[let* |
|
||||
lr [ fail r rule-id f lrstack get left-recursion boa ]
|
||||
m [ lr lrstack set lr p memo-entry boa dup p r rule-id set-memo ]
|
||||
ans [ r eval-rule ]
|
||||
|
|
||||
fail r rule-id f lrstack get left-recursion boa :> lr
|
||||
lr lrstack set lr p memo-entry boa dup p r rule-id set-memo :> m
|
||||
r eval-rule :> ans
|
||||
lrstack get next>> lrstack set
|
||||
pos get m (>>pos)
|
||||
lr head>> [
|
||||
|
@ -226,8 +218,7 @@ TUPLE: peg-head rule-id involved-set eval-set ;
|
|||
] [
|
||||
ans m (>>ans)
|
||||
ans
|
||||
] if
|
||||
] ; inline
|
||||
] if ; inline
|
||||
|
||||
: apply-memo-rule ( r m -- ast )
|
||||
[ ans>> ] [ pos>> ] bi pos set
|
||||
|
@ -622,20 +613,17 @@ PRIVATE>
|
|||
ERROR: parse-failed input word ;
|
||||
|
||||
SYNTAX: PEG:
|
||||
(:)
|
||||
[let | effect [ ] def [ ] word [ ] |
|
||||
(:) :> effect :> def :> word
|
||||
[
|
||||
[
|
||||
[let | compiled-def [ def call compile ] |
|
||||
[
|
||||
dup compiled-def compiled-parse
|
||||
[ ast>> ] [ word parse-failed ] ?if
|
||||
]
|
||||
word swap effect define-declared
|
||||
def call compile :> compiled-def
|
||||
[
|
||||
dup compiled-def compiled-parse
|
||||
[ ast>> ] [ word parse-failed ] ?if
|
||||
]
|
||||
word swap effect define-declared
|
||||
] with-compilation-unit
|
||||
] over push-all
|
||||
] ;
|
||||
] over push-all ;
|
||||
|
||||
USING: vocabs vocabs.loader ;
|
||||
|
||||
|
|
Loading…
Reference in New Issue