grammar = { expr ';'+# } ~ all; expr = def; expr = as; expr = e1; def = ( ( id! L [id {','# id}] R ':='# ) expr ) ~ def; as = id, '='>assign!, e1; number = REAL; id = /^[A-Z]+/i; L = '('#; R = ')'#; e1 = ( e2 ( '+'# e2 )+ )~add | e2; e2 = ( e3+ ( '*'# e3+ )+ )~mul | ( e3 e3+ ) ~mul | e3; e3 = number | fcall | id | L, expr, R; fcall = id! L [ expr { ','# expr } ] R; skipper = /^\s+/; (* R15031518 *)
[press Ctrl to evaluate]
A = 1 * 2x + 4y z; F(x); F(x, y) := 6x + F(x-2, y);