Exemple #1
0
        void decl_stmt(VarList curtree)
        {
            VarList vars = new VarList();

            io.Message(tok+"[DECLARE]");
            tok.scan();

            switch (tok.getId())
            {
                case Tok.TOK_1_LBRACKET:
                    param(vars);
                    break;
                case Tok.TOK_IDENT:
                    simple_var(vars);
                    break;
                case Tok.TOK_DIGITS:
                    break;
            }

            if (tok.getId() == Tok.TOK_1_LBRACKET)
            {
                io.Message(tok+"[(]");
                tok.scan();
                if (tok.getId() != Tok.TOK_DIGITS) io.Abort("PL0113: constant expected");
                io.Message(tok+"[Constant]");

                vars.setNodesGranularity(System.Convert.ToInt32(tok.getValue()));

                tok.scan();
                if (tok.getId() != Tok.TOK_1_RBRACKET) io.Abort("PL0114: ')' expected");
                io.Message(tok+"[)]");
                tok.scan();
            }

            switch (tok.getId())
            {
                case Tok.TOK_FIXED:
                case Tok.TOK_FLOAT:
                case Tok.TOK_COMPLEX:
                case Tok.TOK_REAL:
                case Tok.TOK_BINARY:
                case Tok.TOK_DECIMAL:
                    vars.setNodesType(Var.VAR_LOCAL);
                    vars.setNodesTypeId(tok.getId());
                    try
                    {
                        curtree.mergeNodes(vars);
                    }
                    catch
                    {
                        io.Abort("PL0107: invalid variable declaration");
                    }
                    io.Message(tok+"[Type]");
                    tok.scan();
                break;
                default:
                    io.Abort("PL0115: type specifier expected");
                    break;
            }
        }
Exemple #2
0
        void decl_stmt(VarList curtree)
        {
            VarList vars = new VarList();

            io.Message(tok + "[DECLARE]");
            tok.scan();

            switch (tok.getId())
            {
            case Tok.TOK_1_LBRACKET:
                param(vars);
                break;

            case Tok.TOK_IDENT:
                simple_var(vars);
                break;

            case Tok.TOK_DIGITS:
                break;
            }

            if (tok.getId() == Tok.TOK_1_LBRACKET)
            {
                io.Message(tok + "[(]");
                tok.scan();
                if (tok.getId() != Tok.TOK_DIGITS)
                {
                    io.Abort("PL0113: constant expected");
                }
                io.Message(tok + "[Constant]");

                vars.setNodesGranularity(System.Convert.ToInt32(tok.getValue()));

                tok.scan();
                if (tok.getId() != Tok.TOK_1_RBRACKET)
                {
                    io.Abort("PL0114: ')' expected");
                }
                io.Message(tok + "[)]");
                tok.scan();
            }

            switch (tok.getId())
            {
            case Tok.TOK_FIXED:
            case Tok.TOK_FLOAT:
            case Tok.TOK_COMPLEX:
            case Tok.TOK_REAL:
            case Tok.TOK_BINARY:
            case Tok.TOK_DECIMAL:
                vars.setNodesType(Var.VAR_LOCAL);
                vars.setNodesTypeId(tok.getId());
                try
                {
                    curtree.mergeNodes(vars);
                }
                catch
                {
                    io.Abort("PL0107: invalid variable declaration");
                }
                io.Message(tok + "[Type]");
                tok.scan();
                break;

            default:
                io.Abort("PL0115: type specifier expected");
                break;
            }
        }