From 7a414869de3fad9315930ddcc6706632add45436 Mon Sep 17 00:00:00 2001 From: Chris Double Date: Wed, 28 Nov 2007 11:33:21 +1300 Subject: [PATCH] Support for repeat0 in ebnf --- extra/peg/ebnf/ebnf.factor | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/extra/peg/ebnf/ebnf.factor b/extra/peg/ebnf/ebnf.factor index a402a0fd73..2f71ff961b 100644 --- a/extra/peg/ebnf/ebnf.factor +++ b/extra/peg/ebnf/ebnf.factor @@ -7,6 +7,7 @@ TUPLE: ebnf-non-terminal symbol ; TUPLE: ebnf-terminal symbol ; TUPLE: ebnf-choice options ; TUPLE: ebnf-sequence elements ; +TUPLE: ebnf-repeat0 group ; TUPLE: ebnf-rule symbol elements ; TUPLE: ebnf rules ; @@ -14,6 +15,7 @@ C: ebnf-non-terminal C: ebnf-terminal C: ebnf-choice C: ebnf-sequence +C: ebnf-repeat0 C: ebnf-rule C: ebnf @@ -49,6 +51,11 @@ M: ebnf-sequence ebnf-compile ( ast -- quot ) [ call ] , \ map , \ seq , ] [ ] make ; +M: ebnf-repeat0 ebnf-compile ( ast -- quot ) + [ + ebnf-repeat0-group ebnf-compile % \ repeat0 , + ] [ ] make ; + M: ebnf-rule ebnf-compile ( ast -- quot ) [ dup ebnf-rule-symbol , \ in , \ get , \ create , @@ -85,7 +92,7 @@ DEFER: 'rhs' "{" token sp hide [ 'rhs' sp ] delay "}" token sp hide - 3array seq ; + 3array seq [ first ] action ; : 'rhs' ( -- parser ) 'repeat0'