Add digit, number and string parser to peg
parent
8aed4d6b26
commit
d45ed669f8
|
@ -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 memoize ;
|
vectors arrays combinators.lib memoize math.parser ;
|
||||||
IN: peg
|
IN: peg
|
||||||
|
|
||||||
TUPLE: parse-result remaining ast ;
|
TUPLE: parse-result remaining ast ;
|
||||||
|
@ -265,3 +265,16 @@ MEMO: delay ( parser -- parser )
|
||||||
|
|
||||||
MEMO: 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 ;
|
||||||
|
|
||||||
|
MEMO: 'digit' ( -- parser )
|
||||||
|
[ digit? ] satisfy [ digit> ] action ;
|
||||||
|
|
||||||
|
MEMO: 'integer' ( -- parser )
|
||||||
|
'digit' repeat1 [ 10 swap digits>integer ] action ;
|
||||||
|
|
||||||
|
MEMO: 'string' ( -- parser )
|
||||||
|
[
|
||||||
|
[ CHAR: " = ] satisfy hide ,
|
||||||
|
[ CHAR: " = not ] satisfy repeat0 ,
|
||||||
|
[ CHAR: " = ] satisfy hide ,
|
||||||
|
] { } make seq [ first >string ] action ;
|
||||||
|
|
Loading…
Reference in New Issue