add action parser

release
Chris Double 2007-11-21 16:21:23 +13:00
parent 2a464ea2c6
commit 167f2d716d
2 changed files with 25 additions and 0 deletions

View File

@ -136,4 +136,16 @@ IN: temporary
"a++b" 0 <parse-state>
"a" token "+" token "++" token 2array choice "b" token 3array seq
parse [ t ] [ f ] if
] unit-test
{ 1 } [
"a" 0 <parse-state> "a" token [ drop 1 ] action parse parse-result-ast
] unit-test
{ V{ 1 1 } } [
"aa" 0 <parse-state> "a" token [ drop 1 ] action dup 2array seq parse parse-result-ast
] unit-test
{ f } [
"b" 0 <parse-state> "a" token [ drop 1 ] action parse
] unit-test

View File

@ -174,3 +174,16 @@ M: ensure-not-parser parse ( state parser -- result )
: ensure-not ( parser -- parser )
ensure-not-parser construct-boa init-parser ;
TUPLE: action-parser p1 quot ;
M: action-parser parse ( state parser -- result )
tuck action-parser-p1 parse dup [
dup parse-result-ast rot action-parser-quot call
swap [ set-parse-result-ast ] keep
] [
nip
] if ;
: action ( parser quot -- parser )
action-parser construct-boa init-parser ;