public Node ExprAnd()
        {
            //‹expr-comp› (&& ‹expr-comp›)*
            var n1 = ExprComp();

            while (CurrentToken == TokenCategory.AND)
            {
                var n2 = new ExprAnd()
                {
                    AnchorToken = Expect(TokenCategory.AND)
                };
                n2.Add(n1);
                n2.Add(ExprComp());
                n1 = n2;
            }
            return(n1);
        }
Exemple #2
0
        public string Visit(ExprAnd node)
        {
            var result = "";
            var lbl    = GenerateLabel();
            var lbl2   = GenerateLabel();

            if (node.AnchorToken.Category == TokenCategory.AND)
            {
                foreach (var n in node)
                {
                    result +=
                        Visit((dynamic)n)
                        + Line(Indent() + "ldc.i4 42")
                        + Line(Indent() + "bne.un '" + lbl + "'");
                }
                return(result
                       + Line(Indent() + "ldc.i4 42")
                       + Line(Indent() + "br " + lbl2)
                       + Line(Indent() + lbl + ":")
                       + Line(Indent() + "ldc.i4.0 ")
                       + Line(Indent() + lbl2 + ":"));
            }
            return(node.ToString() + "\n" + VisitChildren(node));
        }
 public void Visit(ExprAnd node)
 {
     VisitChildren(node);
 }