Support for repeat0 in ebnf
parent
16a0cc9eb1
commit
7a414869de
|
@ -7,6 +7,7 @@ TUPLE: ebnf-non-terminal symbol ;
|
||||||
TUPLE: ebnf-terminal symbol ;
|
TUPLE: ebnf-terminal symbol ;
|
||||||
TUPLE: ebnf-choice options ;
|
TUPLE: ebnf-choice options ;
|
||||||
TUPLE: ebnf-sequence elements ;
|
TUPLE: ebnf-sequence elements ;
|
||||||
|
TUPLE: ebnf-repeat0 group ;
|
||||||
TUPLE: ebnf-rule symbol elements ;
|
TUPLE: ebnf-rule symbol elements ;
|
||||||
TUPLE: ebnf rules ;
|
TUPLE: ebnf rules ;
|
||||||
|
|
||||||
|
@ -14,6 +15,7 @@ C: <ebnf-non-terminal> ebnf-non-terminal
|
||||||
C: <ebnf-terminal> ebnf-terminal
|
C: <ebnf-terminal> ebnf-terminal
|
||||||
C: <ebnf-choice> ebnf-choice
|
C: <ebnf-choice> ebnf-choice
|
||||||
C: <ebnf-sequence> ebnf-sequence
|
C: <ebnf-sequence> ebnf-sequence
|
||||||
|
C: <ebnf-repeat0> ebnf-repeat0
|
||||||
C: <ebnf-rule> ebnf-rule
|
C: <ebnf-rule> ebnf-rule
|
||||||
C: <ebnf> ebnf
|
C: <ebnf> ebnf
|
||||||
|
|
||||||
|
@ -49,6 +51,11 @@ M: ebnf-sequence ebnf-compile ( ast -- quot )
|
||||||
[ call ] , \ map , \ seq ,
|
[ call ] , \ map , \ seq ,
|
||||||
] [ ] make ;
|
] [ ] make ;
|
||||||
|
|
||||||
|
M: ebnf-repeat0 ebnf-compile ( ast -- quot )
|
||||||
|
[
|
||||||
|
ebnf-repeat0-group ebnf-compile % \ repeat0 ,
|
||||||
|
] [ ] make ;
|
||||||
|
|
||||||
M: ebnf-rule ebnf-compile ( ast -- quot )
|
M: ebnf-rule ebnf-compile ( ast -- quot )
|
||||||
[
|
[
|
||||||
dup ebnf-rule-symbol , \ in , \ get , \ create ,
|
dup ebnf-rule-symbol , \ in , \ get , \ create ,
|
||||||
|
@ -85,7 +92,7 @@ DEFER: 'rhs'
|
||||||
"{" token sp hide
|
"{" token sp hide
|
||||||
[ 'rhs' sp ] delay
|
[ 'rhs' sp ] delay
|
||||||
"}" token sp hide
|
"}" token sp hide
|
||||||
3array seq ;
|
3array seq [ first <ebnf-repeat0> ] action ;
|
||||||
|
|
||||||
: 'rhs' ( -- parser )
|
: 'rhs' ( -- parser )
|
||||||
'repeat0'
|
'repeat0'
|
||||||
|
|
Loading…
Reference in New Issue