示例#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);
        }
        public string Visit(NExprBitShift nExprBitShift)
        {
            string retVal = "";

            if (nExprBitShift.children.Count == 1)
            {
                retVal += Visit((dynamic)nExprBitShift[0]);
            }
            else
            {
                retVal += Visit((dynamic)nExprBitShift[0]);
                retVal += Visit((dynamic)nExprBitShift[1]);
                retVal += "\t\tconv.i4\n";
                if (nExprBitShift.AnchorToken.Category == TokenCategory.SHIFT_LEFT)
                {
                    retVal += "\t\tshl\n";
                }
                else if (nExprBitShift.AnchorToken.Category == TokenCategory.SHIFT_RIGHT)
                {
                    retVal += "\t\tshr\n";
                }
                else if (nExprBitShift.AnchorToken.Category == TokenCategory.SHIFT_RIGHT_ALT)
                {
                    retVal += "\t\tshr.un\n";
                }
            }
            return(retVal);
        }
示例#3
0
//------------------------------------------------------------
        public void Visit(NExprBitShift node)
        {
            Console.WriteLine($"+++++++++++++++ NExprBitShift ++++++++++++++++");

            //VisitChildren(node);
        }
 public void Visit(NExprBitShift nExprBitShift)
 {
     GenericChildVisitor(nExprBitShift);
 }