public string Visit(ExprComp node) { var lbl = GenerateLabel(); if (node.AnchorToken.Category == TokenCategory.EQUALS) { return (Line(Indent() + "ldc.i4.0") + VisitChildren(node) + Line(Indent() + "bne.un '" + lbl + "'") + Line(Indent() + "pop") + Line(Indent() + "ldc.i4 42") + Line(Indent() + lbl + ":")); } else if (node.AnchorToken.Category == TokenCategory.NOTEQUALS) { return (Line(Indent() + "ldc.i4 42") + VisitChildren(node) + Line(Indent() + "bne.un '" + lbl + "'") + Line(Indent() + "pop") + Line(Indent() + "ldc.i4.0") + Line(Indent() + lbl + ":")); } return(node.ToString() + "\n" + VisitChildren(node)); }
public Node ExprComp() { //‹expr-rel› (‹op-comp› ‹expr-rel›)* var n1 = ExprRel(); while (CurrentToken == TokenCategory.EQUALS || CurrentToken == TokenCategory.NOTEQUALS) { var n2 = new ExprComp(); if (CurrentToken == TokenCategory.EQUALS) { n2.AnchorToken = Expect(TokenCategory.EQUALS); } else { n2.AnchorToken = Expect(TokenCategory.NOTEQUALS); } n2.Add(n1); n2.Add(ExprRel()); n1 = n2; } return(n1); }
public void Visit(ExprComp node) { VisitChildren(node); }