public override ParserRuleContext VisitUnaryExpr([NotNull] StructuredTextParser.UnaryExprContext context) { var result = new VisualBasicParser.UnaryExprContext(_contextStack.Peek(), 0); if (context.operand != null) { int type; switch (context.operand.Type) { case StructuredTextParser.PLUS: type = VisualBasicParser.PLUS; break; case StructuredTextParser.MINUS: type = VisualBasicParser.MINUS; break; case StructuredTextParser.NOT: return(ParseNotExpr(context)); default: throw new InvalidOperationException(); } result.AddChild(new CommonToken(type, context.operand.Text)); } var dummyChild = new VisualBasicParser.PowerExprContext(result, 0); result.AddChild(dummyChild); _contextStack.Push(dummyChild); dummyChild.AddChild(Visit(context.rhs)); _contextStack.Pop(); return(result); }
private ParserRuleContext ParseNotExpr([NotNull] StructuredTextParser.UnaryExprContext context) { var result = new VisualBasicParser.UnaryExprContext(_contextStack.Peek(), 0); AddChild(result, parent => { var notExpr = new VisualBasicParser.NotExprContext(parent, 0); notExpr.AddChild(new CommonToken(VisualBasicParser.NOT, "NOT")); AddChild(notExpr, parent2 => { _contextStack.Push(parent2); var primaryExpr = (VisualBasicParser.PrimaryExprContext)Visit(context.rhs); _contextStack.Pop(); return(primaryExpr); }); return(notExpr); }); return(result); }
/// <summary> /// Visit a parse tree produced by <see cref="StructuredTextParser.unaryExpr"/>. /// <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 VisitUnaryExpr([NotNull] StructuredTextParser.UnaryExprContext context) { return(VisitChildren(context)); }