grammar FormulaGrammar rule additive head:multiplicative tail:(space* operator:[+-] space* operand:multiplicative)* end rule multiplicative head:operand tail:(space* operator:[*/] space* operand:operand)* end rule operand reference / signed_number / string / group / function end rule group '(' space* content:additive space* ')' end rule function name:[a-zA-Z]+ '(' space* arguments:arguments_list? space* ')' end rule arguments_list head:argument tail:(space* ';' space* arguments:arguments_list)* end rule argument range / additive / operand end rule range top:reference ':' bottom:reference end rule reference col:[a-zA-Z]+ row:([1-9] [0-9]+ / [1-9]) end rule signed_number sign? number end rule number ([0-9]+ '.')? [0-9]+ end rule sign [+-] end rule string quote chars:(!quote .)* quote end rule quote '"' end rule space ' ' end end