Example #1
0
        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);
        }
Example #2
0
 /// <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));
 }