示例#1
0
        private Syntax.Expression ParsePrimaryExpr()
        {
            Syntax.Expression res = null;
            switch (scan.Peek().type)
            {
            case Token.Type.CONST_CHAR:
                res = new Syntax.Const(scan.Read(), tstack.GetType("char"));
                break;

            case Token.Type.CONST_DOUBLE:
                res = new Syntax.Const(scan.Read(), tstack.GetType("double"));
                break;

            case Token.Type.CONST_INT:
                res = new Syntax.Const(scan.Read(), tstack.GetType("int"));
                break;

            case Token.Type.CONST_STRING:
                this.count_string++;
                Symbols.ARRAY strt = new Symbols.ARRAY(tstack.GetType("char"));
                Token         str  = scan.Read();
                strt.SetSize(new Syntax.Const(str.GetStrVal().Length.ToString(), tstack.GetType("int")));
                res = new Syntax.Const(str, strt);
                break;

            case Token.Type.IDENTIFICATOR:
                Token       t = scan.Read();
                Symbols.Var v = new Symbols.SuperVar();
                try
                {
                    v = tstack.GetVariable(t);
                }
                catch (Symbols.Exception e)
                {
                    this.logger.Add(e);
                }

                res = new Syntax.Identifier(t, v);
                break;

            case Token.Type.LPAREN:
                scan.Read();
                res = ParseExpression();

                CheckToken(scan.Peek(), Token.Type.RPAREN, true);
                break;
            }
            return(res);
        }
示例#2
0
        private Syntax.Expression ParsePrimaryExpr()
        {
            Syntax.Expression res = null;
            switch (scan.Peek().type)
            {
                case Token.Type.CONST_CHAR:
                    res = new Syntax.Const(scan.Read(), tstack.GetType("char"));
                    break;

                case Token.Type.CONST_DOUBLE:
                    res = new Syntax.Const(scan.Read(), tstack.GetType("double"));
                    break;

                case Token.Type.CONST_INT:
                    res = new Syntax.Const(scan.Read(), tstack.GetType("int"));
                    break;

                case Token.Type.CONST_STRING:
                    this.count_string++;
                    Symbols.ARRAY strt = new Symbols.ARRAY(tstack.GetType("char"));
                    Token str = scan.Read();
                    strt.SetSize(new Syntax.Const(str.GetStrVal().Length.ToString(), tstack.GetType("int")));
                    res = new Syntax.Const(str, strt);
                    break;

                case Token.Type.IDENTIFICATOR:
                    Token t = scan.Read();
                    Symbols.Var v = new Symbols.SuperVar();
                    try
                    {
                        v = tstack.GetVariable(t);
                    }
                    catch (Symbols.Exception e)
                    {
                        this.logger.Add(e);
                    }

                    res = new Syntax.Identifier(t, v);
                    break;

                case Token.Type.LPAREN:
                    scan.Read();
                     res = ParseExpression();

                    CheckToken(scan.Peek(), Token.Type.RPAREN, true);
                    break;
            }
            return res;
        }