public override Node VisitRecord([NotNull] TigerParser.RecordContext context) { var node = new RecordNode(context); var typeId = new IdNode(context, context.typeID.Text); node.Children.Add(typeId); // RECORD TYPE ITerminalNode[] ids = context.ID(); TigerParser.ExprContext[] exprs = context.expr(); for (int i = 1; i < ids.Length; i++) { var fieldId = new IdNode( ids[i].Symbol.Line, ids[i].Symbol.Column, ids[i].GetText()); var fieldExpr = Visit(exprs[i - 1]); var field = new FieldNode(fieldId.Line, fieldId.Column); field.Children.Add(fieldId); // field -> FIELD NAME field.Children.Add(fieldExpr); // field -> FIELD EXPRESSION node.Children.Add(field); // FIELD #i } return(node); }
/// <summary> /// Visit a parse tree produced by the <c>Record</c> /// labeled alternative in <see cref="TigerParser.expr"/>. /// <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 VisitRecord([NotNull] TigerParser.RecordContext context) { return(VisitChildren(context)); }