|
|
@@ -1,28 +1,32 @@
|
|
|
-<start> = assignment | expr
|
|
|
-expr = add-sub
|
|
|
-<add-sub> = pow-term | mul-div | add | sub | variable
|
|
|
+<start> = assignment | expr | comment
|
|
|
+expr = add-sub comment
|
|
|
+comment = <#'\s*(#.*$)?'>
|
|
|
+<add-sub> = pow-term | mul-div | add | sub | variable
|
|
|
add = add-sub <'+'> mul-div
|
|
|
sub = add-sub <'-'> mul-div
|
|
|
<mul-div> = pow-term | mul | div
|
|
|
mul = mul-div <'*'> pow-term
|
|
|
div = mul-div <'/'> pow-term
|
|
|
<pow-term> = pow | term
|
|
|
-pow = pow-term <'^'> term
|
|
|
-<trig> = sin | cos | tan | acos | asin | atan
|
|
|
+pow = posterm <'^'> pow-term
|
|
|
+<function> = log | ln | exp | sqrt | abs | sin | cos | tan | acos | asin | atan
|
|
|
log = <#'\s*'> <'log('> expr <')'> <#'\s*'>
|
|
|
ln = <#'\s*'> <'ln('> expr <')'> <#'\s*'>
|
|
|
+exp = <#'\s*'> <'exp('> expr <')'> <#'\s*'>
|
|
|
+sqrt = <#'\s*'> <'sqrt('> expr <')'> <#'\s*'>
|
|
|
+abs = <#'\s*'> <'abs('> expr <')'> <#'\s*'>
|
|
|
sin = <#'\s*'> <'sin('> expr <')'> <#'\s*'>
|
|
|
cos = <#'\s*'> <'cos('> expr <')'> <#'\s*'>
|
|
|
tan = <#'\s*'> <'tan('> expr <')'> <#'\s*'>
|
|
|
atan = <#'\s*'> <'atan('> expr <')'> <#'\s*'>
|
|
|
acos = <#'\s*'> <'acos('> expr <')'> <#'\s*'>
|
|
|
asin = <#'\s*'> <'asin('> expr <')'> <#'\s*'>
|
|
|
-<posterm> = log | ln | trig | percent | scientific | number | variable | <#'\s*'> <'('> expr <')'> <#'\s*'>
|
|
|
-negterm = <#'\s*'> <'-'> posterm
|
|
|
+<posterm> = function | percent | scientific | number | variable | <#'\s*'> <'('> expr <')'> <#'\s*'>
|
|
|
+negterm = <#'\s*'> <'-'> posterm | <#'\s*'> <'-'> pow
|
|
|
<term> = negterm | posterm
|
|
|
-scientific = #'\s*[0-9]+\.?[0-9]*(e|E)-?[0-9]+()\s*'
|
|
|
-number = #'\s*\d+(,\d+)*(\.\d*)?\s*'
|
|
|
+scientific = #'\s*[0-9]*\.?[0-9]+(e|E)[\-\+]?[0-9]+()\s*'
|
|
|
+number = #'\s*(\d+(,\d+)*(\.\d*)?|\d*\.\d+)\s*'
|
|
|
percent = number <'%'> <#'\s*'>
|
|
|
-variable = #'\s*[a-zA-Z]+(\_+[a-zA-Z]+)*\s*'
|
|
|
-toassign = #'\s*[a-zA-Z]+(\_+[a-zA-Z]+)*\s*'
|
|
|
+variable = #'\s*_*[a-zA-Z]+[_a-zA-Z0-9]*\s*'
|
|
|
+toassign = #'\s*_*[a-zA-Z]+[_a-zA-Z0-9]*\s*'
|
|
|
assignment = toassign <#'\s*'> <'='> <#'\s*'> expr
|