24 lines
955 B
Factor
24 lines
955 B
Factor
! Copyright (C) 2009 Philipp Brüschweiler
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
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+
|
|
Number = Digits '.' Digits => [[ concat >string string>number ast-number boa ]]
|
|
| Digits => [[ >string string>number ast-number boa ]]
|
|
Space = " " | "\n" | "\r" | "\t"
|
|
Spaces = Space* => [[ ignore ]]
|
|
NameFirst = Letter | "_" => [[ CHAR: _ ]]
|
|
NameRest = NameFirst | Digit
|
|
Name = NameFirst NameRest* => [[ first2 swap prefix >string ]]
|
|
Special = [+*/%(),] | "-" => [[ CHAR: - ]]
|
|
| "[" => [[ CHAR: [ ]] | "]" => [[ CHAR: ] ]]
|
|
Tok = Spaces (Name | Number | Special )
|
|
End = !(.)
|
|
Toks = Tok* Spaces End
|
|
;EBNF
|