Make some parsers uses MEMO:
parent
362f2d3436
commit
3003911e07
|
@ -1,7 +1,7 @@
|
||||||
! 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 sequences strings namespaces math assocs shuffle
|
USING: kernel sequences strings namespaces math assocs shuffle
|
||||||
vectors arrays combinators.lib ;
|
vectors arrays combinators.lib memoize ;
|
||||||
IN: peg
|
IN: peg
|
||||||
|
|
||||||
TUPLE: parse-result remaining ast ;
|
TUPLE: parse-result remaining ast ;
|
||||||
|
@ -217,13 +217,13 @@ M: delay-parser (parse) ( state parser -- result )
|
||||||
|
|
||||||
PRIVATE>
|
PRIVATE>
|
||||||
|
|
||||||
: token ( string -- parser )
|
MEMO: token ( string -- parser )
|
||||||
token-parser construct-boa init-parser ;
|
token-parser construct-boa init-parser ;
|
||||||
|
|
||||||
: satisfy ( quot -- parser )
|
: satisfy ( quot -- parser )
|
||||||
satisfy-parser construct-boa init-parser ;
|
satisfy-parser construct-boa init-parser ;
|
||||||
|
|
||||||
: range ( min max -- parser )
|
MEMO: range ( min max -- parser )
|
||||||
range-parser construct-boa init-parser ;
|
range-parser construct-boa init-parser ;
|
||||||
|
|
||||||
: seq ( seq -- parser )
|
: seq ( seq -- parser )
|
||||||
|
@ -232,32 +232,32 @@ PRIVATE>
|
||||||
: choice ( seq -- parser )
|
: choice ( seq -- parser )
|
||||||
choice-parser construct-boa init-parser ;
|
choice-parser construct-boa init-parser ;
|
||||||
|
|
||||||
: repeat0 ( parser -- parser )
|
MEMO: repeat0 ( parser -- parser )
|
||||||
repeat0-parser construct-boa init-parser ;
|
repeat0-parser construct-boa init-parser ;
|
||||||
|
|
||||||
: repeat1 ( parser -- parser )
|
MEMO: repeat1 ( parser -- parser )
|
||||||
repeat1-parser construct-boa init-parser ;
|
repeat1-parser construct-boa init-parser ;
|
||||||
|
|
||||||
: optional ( parser -- parser )
|
MEMO: optional ( parser -- parser )
|
||||||
optional-parser construct-boa init-parser ;
|
optional-parser construct-boa init-parser ;
|
||||||
|
|
||||||
: ensure ( parser -- parser )
|
MEMO: ensure ( parser -- parser )
|
||||||
ensure-parser construct-boa init-parser ;
|
ensure-parser construct-boa init-parser ;
|
||||||
|
|
||||||
: ensure-not ( parser -- parser )
|
MEMO: ensure-not ( parser -- parser )
|
||||||
ensure-not-parser construct-boa init-parser ;
|
ensure-not-parser construct-boa init-parser ;
|
||||||
|
|
||||||
: action ( parser quot -- parser )
|
: action ( parser quot -- parser )
|
||||||
action-parser construct-boa init-parser ;
|
action-parser construct-boa init-parser ;
|
||||||
|
|
||||||
: sp ( parser -- parser )
|
MEMO: sp ( parser -- parser )
|
||||||
sp-parser construct-boa init-parser ;
|
sp-parser construct-boa init-parser ;
|
||||||
|
|
||||||
: hide ( parser -- parser )
|
MEMO: hide ( parser -- parser )
|
||||||
[ drop ignore ] action ;
|
[ drop ignore ] action ;
|
||||||
|
|
||||||
: delay ( parser -- parser )
|
MEMO: delay ( parser -- parser )
|
||||||
delay-parser construct-boa init-parser ;
|
delay-parser construct-boa init-parser ;
|
||||||
|
|
||||||
: list-of ( items separator -- parser )
|
MEMO: list-of ( items separator -- parser )
|
||||||
hide over 2array seq repeat0 [ concat ] action 2array seq [ unclip 1vector swap first append ] action ;
|
hide over 2array seq repeat0 [ concat ] action 2array seq [ unclip 1vector swap first append ] action ;
|
||||||
|
|
Loading…
Reference in New Issue