Don't use 'delay' parser in ebnf
parent
0db0d9cd44
commit
86653e7a46
|
@ -262,8 +262,8 @@ M: ebnf-terminal (transform) ( ast -- parser )
|
||||||
|
|
||||||
M: ebnf-non-terminal (transform) ( ast -- parser )
|
M: ebnf-non-terminal (transform) ( ast -- parser )
|
||||||
symbol>> [
|
symbol>> [
|
||||||
, parser get , \ at ,
|
, parser get , \ at , \ sp ,
|
||||||
] [ ] make delay sp ;
|
] [ ] make box ;
|
||||||
|
|
||||||
: transform-ebnf ( string -- object )
|
: transform-ebnf ( string -- object )
|
||||||
'ebnf' parse parse-result-ast transform ;
|
'ebnf' parse parse-result-ast transform ;
|
||||||
|
@ -282,7 +282,8 @@ M: ebnf-non-terminal (transform) ( ast -- parser )
|
||||||
|
|
||||||
: ebnf>quot ( string -- hashtable quot )
|
: ebnf>quot ( string -- hashtable quot )
|
||||||
'ebnf' parse check-parse-result
|
'ebnf' parse check-parse-result
|
||||||
parse-result-ast transform dup main swap at compile [ compiled-parse ] curry ;
|
parse-result-ast transform dup dup parser [ main swap at compile ] with-variable
|
||||||
|
[ compiled-parse ] curry ;
|
||||||
|
|
||||||
: [EBNF "EBNF]" parse-multiline-string ebnf>quot nip parsed ; parsing
|
: [EBNF "EBNF]" parse-multiline-string ebnf>quot nip parsed ; parsing
|
||||||
|
|
||||||
|
|
|
@ -489,6 +489,15 @@ M: delay-parser (compile) ( parser -- quot )
|
||||||
{ } { "word" } <effect> memoize-quot
|
{ } { "word" } <effect> memoize-quot
|
||||||
[ % \ execute , ] [ ] make ;
|
[ % \ execute , ] [ ] make ;
|
||||||
|
|
||||||
|
TUPLE: box-parser quot ;
|
||||||
|
|
||||||
|
M: box-parser (compile) ( parser -- quot )
|
||||||
|
#! Calls the quotation at compile time
|
||||||
|
#! to produce the parser to be compiled.
|
||||||
|
#! This differs from 'delay' which calls
|
||||||
|
#! it at run time.
|
||||||
|
quot>> call compiled-parser 1quotation ;
|
||||||
|
|
||||||
PRIVATE>
|
PRIVATE>
|
||||||
|
|
||||||
: token ( string -- parser )
|
: token ( string -- parser )
|
||||||
|
@ -557,6 +566,9 @@ PRIVATE>
|
||||||
: delay ( quot -- parser )
|
: delay ( quot -- parser )
|
||||||
delay-parser construct-boa init-parser ;
|
delay-parser construct-boa init-parser ;
|
||||||
|
|
||||||
|
: box ( quot -- parser )
|
||||||
|
box-parser construct-boa init-parser ;
|
||||||
|
|
||||||
: PEG:
|
: PEG:
|
||||||
(:) [
|
(:) [
|
||||||
[
|
[
|
||||||
|
|
Loading…
Reference in New Issue