예제 #1
0
        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));
        }
예제 #2
0
        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);
 }