public Node ExprMul() { var node = ExprUnary(); while (firstOfExprMul.Contains(CurrentToken)) { switch (CurrentToken) { case TokenCategory.MULTIPLICATION: var node_mul = new Mul(); node_mul.AnchorToken = Expect(TokenCategory.MULTIPLICATION); node_mul.Add(node); node_mul.Add(ExprUnary()); node = node_mul; break; case TokenCategory.MODULO: var node_rem = new Rem(); node_rem.AnchorToken = Expect(TokenCategory.MODULO); node_rem.Add(node); node_rem.Add(ExprUnary()); node = node_rem; break; case TokenCategory.DIVIDE: var node_div = new Div(); node_div.AnchorToken = Expect(TokenCategory.DIVIDE); node_div.Add(node); node_div.Add(ExprUnary()); node = node_div; break; default: throw new SyntaxError(firstOfExprMul, tokenStream.Current); } } return(node); }