add ensure parser
parent
ffa71ef86f
commit
129f68d428
|
@ -104,4 +104,12 @@ IN: temporary
|
||||||
|
|
||||||
{ f } [
|
{ f } [
|
||||||
"cb" 0 <parse-state> "a" token optional "b" token 2array seq parse
|
"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
|
] unit-test
|
|
@ -3,6 +3,8 @@
|
||||||
USING: kernel sequences strings namespaces math assocs shuffle vectors combinators.lib ;
|
USING: kernel sequences strings namespaces math assocs shuffle vectors combinators.lib ;
|
||||||
IN: peg
|
IN: peg
|
||||||
|
|
||||||
|
SYMBOL: ignore
|
||||||
|
|
||||||
TUPLE: parse-state input cache ;
|
TUPLE: parse-state input cache ;
|
||||||
|
|
||||||
: <parse-state> ( input index -- state )
|
: <parse-state> ( input index -- state )
|
||||||
|
@ -71,7 +73,7 @@ TUPLE: seq-parser parsers ;
|
||||||
: do-seq-parser ( result parser -- result )
|
: do-seq-parser ( result parser -- result )
|
||||||
[ dup parse-result-remaining ] dip parse [
|
[ dup parse-result-remaining ] dip parse [
|
||||||
[ parse-result-remaining swap set-parse-result-remaining ] 2keep
|
[ 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
|
drop f
|
||||||
] if* ;
|
] if* ;
|
||||||
|
@ -148,3 +150,15 @@ M: optional-parser parse ( state parser -- result )
|
||||||
|
|
||||||
: optional ( parser -- parser )
|
: optional ( parser -- parser )
|
||||||
optional-parser construct-boa init-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 ;
|
||||||
|
|
Loading…
Reference in New Issue