示例#1
0
        // Returns NExprBitShift or any of subproduction nodes
        public Node ExprBitShift()
        {
            Node resultingNode = ExprAdd();

            while (CurrentToken == TokenCategory.SHIFT_LEFT || CurrentToken == TokenCategory.SHIFT_RIGHT || CurrentToken == TokenCategory.SHIFT_RIGHT_ALT)
            {
                NExprBitShift tmp = new NExprBitShift();
                tmp.Add(resultingNode);
                resultingNode = tmp;
                switch (CurrentToken)
                {
                case TokenCategory.SHIFT_LEFT: {
                    resultingNode.AnchorToken = Expect(TokenCategory.SHIFT_LEFT);
                    resultingNode.Add(ExprAdd());
                    break;
                }

                case TokenCategory.SHIFT_RIGHT: {
                    resultingNode.AnchorToken = Expect(TokenCategory.SHIFT_RIGHT);
                    resultingNode.Add(ExprAdd());
                    break;
                }

                case TokenCategory.SHIFT_RIGHT_ALT: {
                    resultingNode.AnchorToken = Expect(TokenCategory.SHIFT_RIGHT_ALT);
                    resultingNode.Add(ExprAdd());
                    break;
                }
                    // Default case would be unreachable
                }
            }
            return(resultingNode);
        }