Make some parsers uses MEMO:

release
Chris Double 2007-11-29 23:49:34 +13:00
parent 362f2d3436
commit 3003911e07
1 changed files with 12 additions and 12 deletions

View File

@ -1,7 +1,7 @@
! Copyright (C) 2007 Chris Double.
! See http://factorcode.org/license.txt for BSD license.
USING: kernel sequences strings namespaces math assocs shuffle
vectors arrays combinators.lib ;
vectors arrays combinators.lib memoize ;
IN: peg
TUPLE: parse-result remaining ast ;
@ -217,13 +217,13 @@ M: delay-parser (parse) ( state parser -- result )
PRIVATE>
: token ( string -- parser )
MEMO: token ( string -- parser )
token-parser construct-boa init-parser ;
: satisfy ( quot -- parser )
satisfy-parser construct-boa init-parser ;
: range ( min max -- parser )
MEMO: range ( min max -- parser )
range-parser construct-boa init-parser ;
: seq ( seq -- parser )
@ -232,32 +232,32 @@ PRIVATE>
: choice ( seq -- parser )
choice-parser construct-boa init-parser ;
: repeat0 ( parser -- parser )
MEMO: repeat0 ( parser -- parser )
repeat0-parser construct-boa init-parser ;
: repeat1 ( parser -- parser )
MEMO: repeat1 ( parser -- parser )
repeat1-parser construct-boa init-parser ;
: optional ( parser -- parser )
MEMO: optional ( parser -- parser )
optional-parser construct-boa init-parser ;
: ensure ( parser -- parser )
MEMO: ensure ( parser -- parser )
ensure-parser construct-boa init-parser ;
: ensure-not ( parser -- parser )
MEMO: ensure-not ( parser -- parser )
ensure-not-parser construct-boa init-parser ;
: action ( parser quot -- parser )
action-parser construct-boa init-parser ;
: sp ( parser -- parser )
MEMO: sp ( parser -- parser )
sp-parser construct-boa init-parser ;
: hide ( parser -- parser )
MEMO: hide ( parser -- parser )
[ drop ignore ] action ;
: delay ( parser -- parser )
MEMO: delay ( parser -- 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 ;