Add ebnf rule word

db4
Chris Double 2008-04-02 15:55:18 +13:00
parent 34a1505d95
commit eac450bdcf
2 changed files with 13 additions and 19 deletions

View File

@ -350,3 +350,6 @@ M: ebnf-non-terminal (transform) ( ast -- parser )
";EBNF" parse-multiline-string replace-escapes ";EBNF" parse-multiline-string replace-escapes
ebnf>quot swapd 1 1 <effect> define-declared "ebnf-parser" set-word-prop ; parsing ebnf>quot swapd 1 1 <effect> define-declared "ebnf-parser" set-word-prop ; parsing
: rule ( name word -- parser )
#! Given an EBNF word produced from EBNF: return the EBNF rule
"ebnf-parser" word-prop at ;

View File

@ -1,52 +1,43 @@
! Copyright (C) 2007 Chris Double. ! Copyright (C) 2007 Chris Double.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
! !
USING: kernel tools.test peg peg.pl0 multiline sequences words assocs ; USING: kernel tools.test peg peg.ebnf peg.pl0 multiline sequences ;
IN: peg.pl0.tests IN: peg.pl0.tests
{ t } [ { t } [
"CONST foo = 1;" \ pl0 "ebnf-parser" word-prop "block" swap at parse parse-result-remaining empty? "CONST foo = 1;" "block" \ pl0 rule parse parse-result-remaining empty?
] unit-test ] unit-test
{ t } [ { t } [
"VAR foo;" \ pl0 "ebnf-parser" word-prop "block" swap at parse parse-result-remaining empty? "VAR foo;" "block" \ pl0 rule parse parse-result-remaining empty?
] unit-test ] unit-test
{ t } [ { t } [
"VAR foo,bar , baz;" \ pl0 "ebnf-parser" word-prop "block" swap at parse parse-result-remaining empty? "VAR foo,bar , baz;" "block" \ pl0 rule parse parse-result-remaining empty?
] unit-test ] unit-test
{ t } [ { t } [
"foo := 5" \ pl0 "ebnf-parser" word-prop "statement" swap at parse parse-result-remaining empty? "foo := 5" "statement" \ pl0 rule parse parse-result-remaining empty?
] unit-test ] unit-test
{ t } [ { t } [
"BEGIN foo := 5 END" \ pl0 "ebnf-parser" word-prop "statement" swap at parse parse-result-remaining empty? "BEGIN foo := 5 END" "statement" \ pl0 rule parse parse-result-remaining empty?
] unit-test ] unit-test
{ t } [ { t } [
"IF 1=1 THEN foo := 5" \ pl0 "ebnf-parser" word-prop "statement" swap at parse parse-result-remaining empty? "IF 1=1 THEN foo := 5" "statement" \ pl0 rule parse parse-result-remaining empty?
] unit-test ] unit-test
{ t } [ { t } [
"WHILE 1=1 DO foo := 5" \ pl0 "ebnf-parser" word-prop "statement" swap at parse parse-result-remaining empty? "WHILE 1=1 DO foo := 5" "statement" \ pl0 rule parse parse-result-remaining empty?
] unit-test ] unit-test
{ t } [ { t } [
"WHILE ODD 1 DO foo := 5" \ pl0 "ebnf-parser" word-prop "statement" swap at parse parse-result-remaining empty? "WHILE ODD 1 DO foo := 5" "statement" \ pl0 rule parse parse-result-remaining empty?
] unit-test ] unit-test
{ t } [ { t } [
"PROCEDURE square; BEGIN squ:=x*x END" \ pl0 "ebnf-parser" word-prop "block" swap at parse parse-result-remaining empty? "PROCEDURE square; BEGIN squ:=x*x END" "block" \ pl0 rule parse parse-result-remaining empty?
] unit-test
{ f } [
<"
PROCEDURE square;
BEGIN
squ := x * x
END;
"> \ pl0 "ebnf-parser" word-prop "block" swap at parse not
] unit-test ] unit-test
{ t } [ { t } [