// var -> arr
        public override object VisitArrayDecl([NotNull] SLangGrammarParser.ArrayDeclContext context)
        {
            var type = Visit(context.arrayDeclType()) as SlangArrayType;
            var name = context.Id();

            ThrowIfReservedWord(name.GetText(), ModuleData.File, name.Symbol);
            return(new VariableNameTableItem {
                IsConstant = false, Type = type, Line = name.Symbol.Line, Column = name.Symbol.Column, Name = name.GetText()
            });
        }
예제 #2
0
        public override object VisitArrayDecl([NotNull] SLangGrammarParser.ArrayDeclContext context)
        {
            var type      = Visit(context.arrayDeclType()) as SlangType;
            var nameToken = context.Id().Symbol;
            var res       = new VariableNameTableItem {
                Type = type, IsConstant = false, Column = nameToken.Column, Line = nameToken.Line, Name = nameToken.Text
            };

            if (!inProgramBlock && currentRoutine == null)
            {
                TranslateDeclareHead(res, headerText);
            }
            TranslateDeclareHead(res, cppText);

            // write constructor
            var exps           = context.arrayDeclType().exp();
            int dimensionCount = exps.Length;
            int n = dimensionCount - 1;

            foreach (var exp in context.arrayDeclType().exp())
            {
                cppText.Write("(");
                Visit(exp);

                if (n > 0)
                {
                    cppText.Write(", ");
                    cppText.Write(GetVectorTypeStart(n));
                    var arrType = Visit(context.arrayDeclType().scalarType()) as SlangType;
                    cppText.Write(GetStringFromType(arrType));
                    cppText.Write(GetVectorTypeEnd(n));
                }

                n--;
            }

            for (int i = 0; i < exps.Length; ++i)
            {
                cppText.Write(")");
            }

            PutVariableIfInBlock(res);
            return(null);
        }
예제 #3
0
 /// <summary>
 /// Exit a parse tree produced by <see cref="SLangGrammarParser.arrayDecl"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitArrayDecl([NotNull] SLangGrammarParser.ArrayDeclContext context)
 {
 }
 /// <summary>
 /// Visit a parse tree produced by <see cref="SLangGrammarParser.arrayDecl"/>.
 /// <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 VisitArrayDecl([NotNull] SLangGrammarParser.ArrayDeclContext context)
 {
     return(VisitChildren(context));
 }