Ejemplo n.º 1
0
        private IEXPR ParseExpr(bool isArith)
        {
            IEXPR r = null;
            if (Current.type == TokenType.String_Literal)
            {
                string val = Current.val.ToString();
                StringLit s = new StringLit() { val = val };
                r = s;
            }
            else if (Current.type == TokenType.Int_Literal)
            {
                int val = (int)Current.val;
                IntLit i = new IntLit() { val = val };
                 r = i;

            }
            else if (Current.type == TokenType.Double_Literal)
            {
                double val = (double)Current.val;
                DoubleLit d = new DoubleLit() { val = val };
                 r = d;
            }
            else if (Current.type == TokenType.Word && tokens[this.i + 1].val.ToString() == "(")
            {
                 string name = Current.val.ToString();
                 i++;
                 i++;
                 FuncCall f = new FuncCall() { method = name, args = ParseArgs() };
                 r = f;
            }
            else if (Current.val.ToString() == "new")
            {
                i++;
                New n = new New() { from = Current.val.ToString() };
                r = n;
            }
            else if (Current.type == TokenType.Bool_Literal)
            {
                BoolLit b = new BoolLit() { val = (bool)Current.val };
                r = b;
            }
            else if (Current.type == TokenType.Word)
            {
                string name = Current.val as string;
                LoadVar v = new LoadVar() { name = name };
                r = v;
            }

            if ((this.i + 1 < tokens.Length) && (isArith == false) && (tokens[this.i + 1].val.ToString() == "+" || tokens[this.i + 1].val.ToString() == "-" || tokens[this.i + 1].val.ToString() == "*" || tokens[this.i + 1].val.ToString() == "/" || tokens[this.i + 1].val.ToString() == "%" || tokens[this.i + 1].val.ToString() == "<" || tokens[this.i + 1].val.ToString() == "=" || tokens[this.i + 1].val.ToString() == ">" || Current.val.ToString() == "("))
            {
                r = ParseAtrithExpr(r);
                i++;
                return r;
            }
            else
            {
                return r;
            }

            throw new Exception();
        }