public override Node VisitObjectAccess(TParser.ObjectAccessContext context) { var path = new NodesCollection <Node>(context.Start); VisitObjectAccess(context, path); var obj = new ObjectAccess(path[0], null, path[0].Position); foreach (var node in path.Skip(1)) { obj = new ObjectAccess(node, obj, node.Position); } return(obj); }
private void VisitObjectAccess(TParser.ObjectAccessContext context, NodesCollection <Node> path) { while (true) { var id = new Identifier(context.Identifier().GetText(), context.Identifier().Symbol); path.Add(id); var leftExp = context.expression(); if (leftExp is TParser.ObjectAccessContext objCtx) { context = objCtx; continue; } else { path.Add(Visit(leftExp)); } break; } }
/// <summary> /// Visit a parse tree produced by the <c>ObjectAccess</c> /// labeled alternative in <see cref="TParser.expression"/>. /// <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 VisitObjectAccess([NotNull] TParser.ObjectAccessContext context) { return(VisitChildren(context)); }
/// <summary> /// Exit a parse tree produced by the <c>ObjectAccess</c> /// labeled alternative in <see cref="TParser.expression"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitObjectAccess([NotNull] TParser.ObjectAccessContext context) { }