// 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); }
//------------------------------------------------------------ public void Visit(NExprBitShift node) { Console.WriteLine($"+++++++++++++++ NExprBitShift ++++++++++++++++"); //VisitChildren(node); }
public void Visit(NExprBitShift nExprBitShift) { GenericChildVisitor(nExprBitShift); }