add ensure parser

release
Chris Double 2007-11-21 16:06:02 +13:00
parent ffa71ef86f
commit 129f68d428
2 changed files with 23 additions and 1 deletions

View File

@ -104,4 +104,12 @@ IN: temporary
{ f } [
"cb" 0 <parse-state> "a" token optional "b" token 2array seq parse
] unit-test
{ V{ CHAR: a CHAR: b } } [
"ab" 0 <parse-state> "a" token ensure CHAR: a CHAR: z range dup 3array seq parse parse-result-ast
] unit-test
{ f } [
"bb" 0 <parse-state> "a" token ensure CHAR: a CHAR: z range 2array seq parse
] unit-test

View File

@ -3,6 +3,8 @@
USING: kernel sequences strings namespaces math assocs shuffle vectors combinators.lib ;
IN: peg
SYMBOL: ignore
TUPLE: parse-state input cache ;
: <parse-state> ( input index -- state )
@ -71,7 +73,7 @@ TUPLE: seq-parser parsers ;
: do-seq-parser ( result parser -- result )
[ dup parse-result-remaining ] dip parse [
[ parse-result-remaining swap set-parse-result-remaining ] 2keep
parse-result-ast swap [ parse-result-ast push ] keep
parse-result-ast dup ignore = [ drop ] [ swap [ parse-result-ast push ] keep ] if
] [
drop f
] if* ;
@ -148,3 +150,15 @@ M: optional-parser parse ( state parser -- result )
: optional ( parser -- parser )
optional-parser construct-boa init-parser ;
TUPLE: ensure-parser p1 ;
M: ensure-parser parse ( state parser -- result )
dupd ensure-parser-p1 parse [
ignore <parse-result>
] [
drop f
] if ;
: ensure ( parser -- parser )
ensure-parser construct-boa init-parser ;