grammar Eqn
rule comparation expression comp_group? <Eqn::Comparation> end rule comp_group comp_op expression <Eqn::Comparation::CompGroup> end rule expression space? multitive space? addsub_group? space? <Eqn::Expression> end rule addsub_group addsub_op expression <Eqn::Expression::ExprGroup> end rule multitive exponentiative space? muldiv_group? <Eqn::Expression> end rule muldiv_group muldiv_op space? multitive <Eqn::Expression::ExprGroup> end rule exponentiative operand space? pow_group? <Eqn::Expression> end rule pow_group pow_op space? exponentiative <Eqn::Expression::ExprGroup> end rule operand function / group / number end rule function if_func / round_func / roundup_func / rounddown_func end rule if_func ('if' / 'IF') space? '(' comparation ',' expression ',' expression ')' <Eqn::Function::If> end rule round_func ('round' / 'ROUND') space? '(' expression round_group? ')' <Eqn::Function::Round> end rule roundup_func ('roundup' / 'ROUNDUP') space? '(' expression round_group? ')' <Eqn::Function::RoundUp> end rule rounddown_func ('rounddown' / 'ROUNDDOWN') space? '(' expression round_group? ')' <Eqn::Function::RoundDown> end rule round_group ',' expression <Eqn::Expression> end rule group '(' expression ')' <Eqn::Expression> end rule number signed_float space? exponent? <Eqn::Number> end rule signed_float sign? space? (float / digits / variable) <Eqn::Number::SignedNumber> end rule float digits? decimal <Eqn::Number::Float> end rule decimal '.' digits <Eqn::Number::Decimal> end rule exponent exp space? signed_float <Eqn::Number::Exponent> end rule pow_op '^' <Eqn::Terminal::Op::RightAssociativeOp> end rule muldiv_op '*' <Eqn::Terminal::Op::RightAssociativeOp> / '/' <Eqn::Terminal::Op::LeftAssociativeOp> end rule addsub_op '+' <Eqn::Terminal::Op::RightAssociativeOp> / '-' <Eqn::Terminal::Op::LeftAssociativeOp> end rule comp_op '<=' <Eqn::Terminal::CompOp> / '>=' <Eqn::Terminal::CompOp> / '<' <Eqn::Terminal::CompOp> / '>' <Eqn::Terminal::CompOp> / '==' <Eqn::Terminal::CompOp> / '=' <Eqn::Terminal::CompOp> / '!=' <Eqn::Terminal::CompOp> end rule exp 'e' / 'E' end rule sign '+' / '-' <Eqn::Terminal::UnaryMinus> end rule digits [0-9]+ <Eqn::Terminal::Digits> end rule variable [a-zA-Z]+ <Eqn::Terminal::Variable> end rule space ("\s" / "\t")* end
end