public override ParserRuleContext VisitEquExpr([NotNull] StructuredTextParser.EquExprContext context)
            {
                //TODO: 演算の優先度調節
                var result = new VisualBasicParser.CompareExprContext(_contextStack.Peek(), 0);

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

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

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

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

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

                    result.AddChild(Visit(context.GetChild(i + 1)));
                }
                _contextStack.Pop();
                return(result);
            }
Example #2
0
 /// <summary>
 /// Visit a parse tree produced by <see cref="VisualBasicParser.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] VisualBasicParser.CompareExprContext context)
 {
     return(VisitChildren(context));
 }