factor/extra/infix/tokenizer/tokenizer.factor

25 lines
981 B
Factor
Raw Normal View History

! Copyright (C) 2009 Philipp Brüschweiler
! See http://factorcode.org/license.txt for BSD license.
2009-02-07 19:03:35 -05:00
USING: infix.ast kernel peg peg.ebnf math.parser sequences
strings ;
IN: infix.tokenizer
EBNF: tokenize-infix
Letter = [a-zA-Z]
Digit = [0-9]
Digits = Digit+
2011-10-16 16:01:58 -04:00
Number = Digits '.' Digits => [[ "" concat-as string>number ast-number boa ]]
2009-02-07 19:03:35 -05:00
| Digits => [[ >string string>number ast-number boa ]]
2015-07-16 11:44:59 -04:00
Space = [ \t\n\r]
2009-02-07 19:03:35 -05:00
Spaces = Space* => [[ ignore ]]
NameFirst = Letter | "_" => [[ CHAR: _ ]]
NameRest = NameFirst | Digit
Name = NameFirst NameRest* => [[ first2 swap prefix >string ]]
Special = [+*/%(),] | "-" => [[ CHAR: - ]]
| "[" => [[ CHAR: [ ]] | "]" => [[ CHAR: ] ]]
| ":" => [[ CHAR: : ]]
2009-02-07 19:03:35 -05:00
Tok = Spaces (Name | Number | Special )
End = !(.)
Toks = Tok* Spaces End
;EBNF