예제 #1
0
파일: Parser.cs 프로젝트: Northcode/NXCODE
        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();
        }
예제 #2
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();
        }