public Node Expr()
        {
            //ExprOr  --> ‹expr-and› < || ‹expr-and› >*
            var n = ExprAnd();

            while (CurrentToken == TokenCategory.OR)
            {
                var n1 = new ExprOr()
                {
                    AnchorToken = Expect(TokenCategory.OR)
                };
                n1.Add(n);
                n1.Add(ExprAnd());
                n = n1;
            }
            return(n);
        }
Beispiel #2
0
        public string Visit(ExprOr node)
        {
            var result        = "";
            var truecondition = GenerateLabel();
            var endcondition  = GenerateLabel();

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