コード例 #1
0
            public override ParserRuleContext VisitCompareExpr([NotNull] StructuredTextParser.CompareExprContext context)
            {
                //TODO: 演算の優先度調節
                var result = Visit(context.lhs);

                _contextStack.Push(result);
                for (int i = 1; i < context.ChildCount; i += 2)
                {
                    var operand = context.GetChild <ITerminalNode>(i).Symbol;
                    int type;
                    switch (operand.Type)
                    {
                    case StructuredTextParser.EQ: type = VisualBasicParser.EQ; break;

                    case StructuredTextParser.NEQ: type = VisualBasicParser.NEQ; break;

                    default: throw new InvalidOperationException();
                    }
                    result.AddChild(new CommonToken(type, operand.Text));

                    result.AddChild(Visit(context.GetChild(i + 1)));
                }
                _contextStack.Pop();
                return(result);
            }
コード例 #2
0
 /// <summary>
 /// Visit a parse tree produced by <see cref="StructuredTextParser.compareExpr"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitCompareExpr([NotNull] StructuredTextParser.CompareExprContext context)
 {
     return(VisitChildren(context));
 }