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