30 lines
714 B
Python
30 lines
714 B
Python
ebnf = r"""
|
|
expr = (number ws?)*
|
|
number = factor additive*
|
|
additive = ("+"/"-") factor
|
|
factor = primary multiplicative*
|
|
multiplicative = ("*" / "/") primary
|
|
primary = parens / neg / number
|
|
parens = "(" number ")"
|
|
neg = "-" primary
|
|
number = ((~"[0-9]"+ "."? ~"[0-9]"*) / ("." ~"[0-9]"+)) (("e"/"E") ("-"/"+") ~"[0-9]"+)?
|
|
ws = ~"\s*"
|
|
lpar = "("
|
|
rpar = ")"
|
|
lbra = "["
|
|
rbra = "]"
|
|
lcbra = "{"
|
|
rcbra = "}"
|
|
lt = "<"
|
|
gt = ">"
|
|
comma = ","
|
|
octup = "^"
|
|
octdown = "_"
|
|
barsign = "|"
|
|
plus = "+"
|
|
minus = "-"
|
|
times = "*"
|
|
div = "/"
|
|
emptyline = ws+
|
|
"""
|