expression: exp | /* none */ { result = nil }
# NEED: RootNode
- exp: exp '+' exp { result = Mint::AdditionNode.new(node(val[0]), node(val[2])) }
- | exp '-' exp { result = Mint::SubtractionNode.new(node(val[0]), node(val[2])) }
- | exp '*' exp { result = Mint::MultipleNode.new(node(val[0]), node(val[2])) }
- | exp '/' exp { result = Mint::FractionNode.new(node(val[0]), add_parenthesis(node(val[2]))) }
- | exp '^' exp { result = Mint::FactorialNode.new(node(val[0]), node(val[2])) }
- | exp DIV exp { result = Mint::DivisionNode.new(node(val[0]), add_parenthesis(node(val[2]))) }
- | '(' exp ')' '-' NUMBER { n = node(val[1]); n.parenthesis = true; result = Mint::SubtractionNode.new(n, val[4]) }
- | '(' exp ')' { n = node(val[1]); n.parenthesis = true; result = n }
- | '-' NUMBER =UMINUS { result = minus(val[1]) }
- | '-' multiple =UMINUS { result = minus(val[1]) }
- | ROOT '(' exp ')' { result = Mint::RootNode.new(val[2]) }
- | multiple multiple { result = Mint::MultipleNode.new(node(val[0]), node(val[1])) }
- | NUMBER multiple { result = Mint::MultipleNode.new(node(val[0]), node(val[1])) }
- | minus multiple { result = Mint::MultipleNode.new(node(val[0]), node(val[1])) }
- | '(' exp ')' exp { n = node(val[1]); n.parenthesis = true; result = Mint::MultipleNode.new(n, val[3]) }
- | VARIABLE { result = node(val[0]) }
- | NUMBER { result = node(val[0]) }
-
- multiple: '(' exp ')' { n = node(val[1]); n.parenthesis = true; result = n }
- | ROOT '(' exp ')' { result = Mint::RootNode.new(val[2]) }
- | VARIABLE { result = node(val[0]) }
+ exp: exp '+' exp { result = Mint::AdditionNode.new(node(val[0]), node(val[2])) }
+ | exp '-' exp { result = Mint::SubtractionNode.new(node(val[0]), node(val[2])) }
+ | exp '*' exp { result = Mint::MultipleNode.new(node(val[0]), node(val[2])) }
+ | exp '/' exp { result = Mint::FractionNode.new(node(val[0]), add_parenthesis(node(val[2]))) }
+ | exp '^' exp { result = Mint::FactorialNode.new(node(val[0]), node(val[2])) }
+ | exp DIV exp { result = Mint::DivisionNode.new(node(val[0]), add_parenthesis(node(val[2]))) }
+ | '(' exp ')' '-' NUMBER { n = node(val[1]); n.parenthesis = true; result = Mint::SubtractionNode.new(n, node(val[4])) }
+ | '(' exp ')' { n = node(val[1]); n.parenthesis = true; result = n }
+ | '-' NUMBER =UMINUS { result = minus(val[1]) }
+ | '-' multiple =UMINUS { result = minus(val[1]) }
+ | ROOT '(' exp ')' { result = Mint::RootNode.new(val[2]) }
+ | multiple multiple { result = Mint::MultipleNode.new(node(val[0]), node(val[1])) }
+ | NUMBER multiple { result = Mint::MultipleNode.new(node(val[0]), node(val[1])) }
+ | minus multiple { result = Mint::MultipleNode.new(node(val[0]), node(val[1])) }
+ | '(' exp ')' exp { n = node(val[1]); n.parenthesis = true; result = Mint::MultipleNode.new(n, val[3]) }
+ | VARIABLE { result = node(val[0]) }
+ | NUMBER { result = node(val[0]) }
+
+ multiple: '(' exp ')' { n = node(val[1]); n.parenthesis = true; result = n }
+ | ROOT '(' exp ')' { result = Mint::RootNode.new(val[2]) }
+ | VARIABLE { result = node(val[0]) }
minus: '-' NUMBER =UMINUS { result = minus(val[1]) }
| '-' multiple =UMINUS { result = minus(val[1]) }