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); }
/// <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)); }