remove match from parse results
parent
691c62501f
commit
e9df13dad5
|
@ -24,9 +24,9 @@ IN: temporary
|
|||
"endbegin" 0 <parse-state> "begin" token parse
|
||||
] unit-test
|
||||
|
||||
{ "begin" "begin" "end" } [
|
||||
{ "begin" "end" } [
|
||||
"beginend" 0 <parse-state> "begin" token parse
|
||||
{ parse-result-matched parse-result-ast parse-result-remaining } get-slots
|
||||
{ parse-result-ast parse-result-remaining } get-slots
|
||||
parse-state-input >string
|
||||
] unit-test
|
||||
|
||||
|
@ -50,16 +50,16 @@ IN: temporary
|
|||
"bad" 0 <parse-state> "a" token "b" token 2array seq parse
|
||||
] unit-test
|
||||
|
||||
{ "go" } [
|
||||
"good" 0 <parse-state> "g" token "o" token 2array seq parse parse-result-matched
|
||||
{ V{ "g" "o" } } [
|
||||
"good" 0 <parse-state> "g" token "o" token 2array seq parse parse-result-ast
|
||||
] unit-test
|
||||
|
||||
{ "a" } [
|
||||
"abcd" 0 <parse-state> "a" token "b" token 2array choice parse parse-result-matched
|
||||
"abcd" 0 <parse-state> "a" token "b" token 2array choice parse parse-result-ast
|
||||
] unit-test
|
||||
|
||||
{ "b" } [
|
||||
"bbcd" 0 <parse-state> "a" token "b" token 2array choice parse parse-result-matched
|
||||
"bbcd" 0 <parse-state> "a" token "b" token 2array choice parse parse-result-ast
|
||||
] unit-test
|
||||
|
||||
{ f } [
|
||||
|
@ -78,8 +78,8 @@ IN: temporary
|
|||
"b" 0 <parse-state> "a" token repeat0 parse parse-result-ast length
|
||||
] unit-test
|
||||
|
||||
{ "aaa" } [
|
||||
"aaab" 0 <parse-state> "a" token repeat0 parse parse-result-matched
|
||||
{ V{ "a" "a" "a" } } [
|
||||
"aaab" 0 <parse-state> "a" token repeat0 parse parse-result-ast
|
||||
] unit-test
|
||||
|
||||
{ f } [
|
||||
|
@ -90,6 +90,6 @@ IN: temporary
|
|||
"b" 0 <parse-state> "a" token repeat1 parse
|
||||
] unit-test
|
||||
|
||||
{ "aaa" } [
|
||||
"aaab" 0 <parse-state> "a" token repeat1 parse parse-result-matched
|
||||
{ V{ "a" "a" "a" } } [
|
||||
"aaab" 0 <parse-state> "a" token repeat1 parse parse-result-ast
|
||||
] unit-test
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
! Copyright (C) 2007 Chris Double.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: kernel sequences strings namespaces math assocs shuffle combinators.lib ;
|
||||
USING: kernel sequences strings namespaces math assocs shuffle vectors combinators.lib ;
|
||||
IN: peg
|
||||
|
||||
TUPLE: parse-state input cache ;
|
||||
|
@ -20,9 +20,9 @@ TUPLE: parse-state input cache ;
|
|||
[ parse-state-input ] dip tail-slice
|
||||
{ set-parse-state-cache set-parse-state-input } parse-state construct ;
|
||||
|
||||
TUPLE: parse-result remaining matched ast ;
|
||||
TUPLE: parse-result remaining ast ;
|
||||
|
||||
: <parse-result> ( remaining matched ast -- parse-result )
|
||||
: <parse-result> ( remaining ast -- parse-result )
|
||||
parse-result construct-boa ;
|
||||
|
||||
SYMBOL: next-id
|
||||
|
@ -41,7 +41,7 @@ TUPLE: token-parser symbol ;
|
|||
|
||||
M: token-parser parse ( state parser -- result )
|
||||
token-parser-symbol 2dup >r parse-state-input r> head? [
|
||||
dup >r length state-tail r> dup <parse-result>
|
||||
dup >r length state-tail r> <parse-result>
|
||||
] [
|
||||
2drop f
|
||||
] if ;
|
||||
|
@ -57,7 +57,7 @@ M: range-parser parse ( state parser -- result )
|
|||
] [
|
||||
0 pick parse-state-input nth dup rot
|
||||
{ range-parser-min range-parser-max } get-slots between? [
|
||||
[ 1 state-tail ] dip dup <parse-result>
|
||||
[ 1 state-tail ] dip <parse-result>
|
||||
] [
|
||||
2drop f
|
||||
] if
|
||||
|
@ -71,8 +71,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 ] 2keep
|
||||
parse-result-matched swap [ parse-result-matched swap append ] keep [ set-parse-result-matched ] keep
|
||||
parse-result-ast swap [ parse-result-ast push ] keep
|
||||
] [
|
||||
drop f
|
||||
] if* ;
|
||||
|
@ -85,7 +84,7 @@ TUPLE: seq-parser parsers ;
|
|||
] if ;
|
||||
|
||||
M: seq-parser parse ( state parser -- result )
|
||||
seq-parser-parsers [ "" V{ } clone <parse-result> ] dip (seq-parser) ;
|
||||
seq-parser-parsers [ V{ } clone <parse-result> ] dip (seq-parser) ;
|
||||
|
||||
: seq ( seq -- parser )
|
||||
seq-parser construct-boa init-parser ;
|
||||
|
@ -114,22 +113,21 @@ TUPLE: repeat0-parser p1 ;
|
|||
: (repeat-parser) ( parser result -- result )
|
||||
2dup parse-result-remaining swap parse [
|
||||
[ parse-result-remaining swap set-parse-result-remaining ] 2keep
|
||||
[ parse-result-ast swap parse-result-ast push ] 2keep
|
||||
parse-result-matched swap [ parse-result-matched swap append ] keep [ set-parse-result-matched ] keep
|
||||
parse-result-ast swap [ parse-result-ast push ] keep
|
||||
(repeat-parser)
|
||||
] [
|
||||
nip
|
||||
] if* ;
|
||||
|
||||
: clone-result ( result -- result )
|
||||
{ parse-result-remaining parse-result-matched parse-result-ast }
|
||||
get-slots V{ } clone-like <parse-result> ;
|
||||
{ parse-result-remaining parse-result-ast }
|
||||
get-slots 1vector <parse-result> ;
|
||||
|
||||
M: repeat0-parser parse ( state parser -- result )
|
||||
repeat0-parser-p1 2dup parse [
|
||||
nipd clone-result (repeat-parser)
|
||||
] [
|
||||
drop "" V{ } clone <parse-result>
|
||||
drop V{ } clone <parse-result>
|
||||
] if* ;
|
||||
|
||||
: repeat0 ( parser -- parser )
|
||||
|
|
Loading…
Reference in New Issue