1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
package main
type Fexl Peg {
}
Fexl <- ws Expression+ Input? !.
Input <- '\\\\' .*
Expression <- Comment / ';' ws Expression* / Definition / Argument / Term
Comment <- '#' (![\n\r] .)* ws
Definition <- '\\' Symbol '=' ws Term / Recursive
Recursive <- '\\' Symbol '==' ws Term
Argument <- '\\' Symbol
Term <- open Expression+ close / Symbol
Symbol <- (String / (![ \t\n\r\\()"~;=] .)+) ws
String <- '"' (!'"' .)* '"' / Complex
Complex <- tilde '@' (!'@' .)* '@'
tilde <- '~'
open <- '(' ws
close <- ')' ws
ws <- [ \t\n\r]*
|