public override ParserRuleContext VisitPowerExpr([NotNull] StructuredTextParser.PowerExprContext context) { var unaryExpr = (VisualBasicParser.UnaryExprContext)Visit(context.lhs); if (context.rhs == null) { return(unaryExpr); } VisualBasicParser.PowerExprContext powerExpr; if (unaryExpr.ChildCount == 1) { powerExpr = unaryExpr.rhs; } else { powerExpr = new VisualBasicParser.PowerExprContext(null, 0); AddChild(powerExpr, parent => { unaryExpr.Parent = parent; return(unaryExpr); }); } foreach (var rhs in context.unaryExpr().Skip(1)) { powerExpr.AddChild(new CommonToken(VisualBasicParser.HAT, "^")); AddChild(powerExpr, parent => { _contextStack.Push(parent); var unary = (VisualBasicParser.UnaryExprContext)Visit(rhs); _contextStack.Pop(); return(unary); }); } var result = new VisualBasicParser.UnaryExprContext((ParserRuleContext)unaryExpr.Parent, 0); result.AddChild(powerExpr); powerExpr.Parent = result; return(result); }
/// <summary> /// Visit a parse tree produced by <see cref="StructuredTextParser.powerExpr"/>. /// <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 VisitPowerExpr([NotNull] StructuredTextParser.PowerExprContext context) { return(VisitChildren(context)); }