コード例 #1
0
        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);
        }