public string Visit(NExprUnary nExprUnary) { var retVal = ""; Token anchorToken = nExprUnary.AnchorToken; retVal += Visit((dynamic)nExprUnary[0]); if (anchorToken != null) { switch (anchorToken.Category) { case TokenCategory.ADDITION: { // Do nothing break; } case TokenCategory.SUBTRACTION: { // Multiply times -1 retVal += "\t\tldc.i8 -1\n"; retVal += "\t\tmul\n"; break; } case TokenCategory.NOT /*!*/: { string pushTrueValue = GenerateLabel(); string pushFalseValue = GenerateLabel(); string exitExpression = GenerateLabel(); retVal += "\t\tbrfalse " + pushTrueValue + "\n"; retVal += "\t\tbr " + pushFalseValue + "\n"; retVal += pushTrueValue + ":\n"; retVal += "\t\tldc.i8 1\n"; retVal += "\t\tbr " + exitExpression + "\n"; retVal += pushFalseValue + ":\n"; retVal += "\t\tldc.i8 0\n"; retVal += exitExpression + ":\n"; break; } case TokenCategory.BIT_NOT /*~*/: { retVal += "\t\tnot\n"; break; } } } return(retVal); }
// Returns NExprUnary or any of subproduction nodes public Node ExprUnary() { NExprUnary nExprUnary = new NExprUnary(); if (firstOfUnary.Contains(CurrentToken)) { switch (CurrentToken) { case TokenCategory.ADDITION: { nExprUnary.AnchorToken = Expect(TokenCategory.ADDITION); nExprUnary.Add(ExprUnary()); break; } case TokenCategory.SUBTRACTION: { nExprUnary.AnchorToken = Expect(TokenCategory.SUBTRACTION); nExprUnary.Add(ExprUnary()); break; } case TokenCategory.NOT: { nExprUnary.AnchorToken = Expect(TokenCategory.NOT); nExprUnary.Add(ExprUnary()); break; } case TokenCategory.BIT_NOT: { nExprUnary.AnchorToken = Expect(TokenCategory.BIT_NOT); nExprUnary.Add(ExprUnary()); break; } // Default case would be unreachable } } else if (firstOfExprPrimary.Contains(CurrentToken)) { return(ExprPrimary()); } else { return(null); } return(nExprUnary); }
//----------------------------------------------------------- public void Visit(NExprUnary node) { Console.WriteLine($"+++++++++++++++ NExprUnary ++++++++++++++++"); //VisitBinaryOperator('*', node /*, Type.INT*/); VisitChildren(node); }
public void Visit(NExprUnary nExprUnary) { GenericChildVisitor(nExprUnary); }