Ejemplo n.º 1
0
        public NumberExpression ParseNumberExpression()
        {
            var exp = new NumberExpression(decimal.Parse(_currentToken.Lexeme));

            NextToken();
            return(exp);
        }
Ejemplo n.º 2
0
        public static NumberExpression Create(
            AphidExpressionContext context_aphidExpressionContext,
            decimal value_d,
            int value_i,
            int value_i1
            )
        {
            NumberExpression numberExpression
                = new NumberExpression(context_aphidExpressionContext, value_d);

            ((AphidExpression)numberExpression).Index  = value_i;
            ((AphidExpression)numberExpression).Length = value_i1;
            return(numberExpression);

            // TODO: Edit factory method of NumberExpression
            // This method should be able to configure the object in all possible ways.
            // Add as many parameters as needed,
            // and assign their values to each field by using the API.
        }
Ejemplo n.º 3
0
        public Expression ParseFactor()
        {
            Expression exp;

            switch (_currentToken.TokenType)
            {
            case AphidTokenType.LeftBrace:
                exp = ParseObjectExpression();
                break;

            case AphidTokenType.LeftBracket:
                exp = ParseArrayExpression();
                break;

            case AphidTokenType.LeftParenthesis:
                NextToken();
                exp = ParseExpression();
                Match(AphidTokenType.RightParenthesis);
                break;

            case AphidTokenType.String:
                exp = ParseStringExpression();
                break;

            case AphidTokenType.Number:
                exp = ParseNumberExpression();
                break;

            case AphidTokenType.MinusOperator:
                NextToken();
                var numExp = ParseNumberExpression();
                numExp.Value *= -1;
                exp           = numExp;
                break;

            case AphidTokenType.Identifier:
                exp = ParseIdentifierExpression();

                if (_currentToken.TokenType == AphidTokenType.definedKeyword)
                {
                    NextToken();
                    exp = new UnaryOperatorExpression(AphidTokenType.definedKeyword, exp)
                    {
                        IsPostfix = true
                    };
                }

                break;

            case AphidTokenType.functionOperator:
                exp = ParseFunctionExpression();
                break;

            //case AphidTokenType.forKeyword:
            //    exp = ParseForExpression();
            //    break;

            case AphidTokenType.retKeyword:
            case AphidTokenType.deleteKeyword:
                exp = ParseUnaryExpression();
                break;

            case AphidTokenType.trueKeyword:
                exp = new BooleanExpression(true);
                NextToken();
                break;

            case AphidTokenType.falseKeyword:
                exp = new BooleanExpression(false);
                NextToken();
                break;

            case AphidTokenType.thisKeyword:
                exp = new ThisExpression();
                NextToken();
                break;

            //case AphidTokenType.extendKeyword:
            //    exp = ParseExtendExpression();
            //    break;

            //case AphidTokenType.ifKeyword:
            //    exp = ParseIfExpression();
            //    break;

            case AphidTokenType.LoadScriptOperator:
                exp = ParseLoadScriptExpression();
                break;

            case AphidTokenType.LoadLibraryOperator:
                exp = ParseLoadLibraryExpression();
                break;

            case AphidTokenType.nullKeyword:
                exp = new NullExpression();
                NextToken();
                break;

            case AphidTokenType.breakKeyword:
                exp = new BreakExpression();
                NextToken();
                break;

            case AphidTokenType.HexNumber:
                exp = new NumberExpression((decimal)Convert.ToInt64(_currentToken.Lexeme.Substring(2), 16));
                NextToken();
                break;

            case AphidTokenType.PatternMatchingOperator:
                var matchExp = new PatternMatchingExpression();
                NextToken();
                Match(AphidTokenType.LeftParenthesis);
                matchExp.TestExpression = ParseExpression();
                Match(AphidTokenType.RightParenthesis);

                while (true)
                {
                    var tests = new List <Expression>();

                    while (true)
                    {
                        tests.Add(ParseExpression());

                        if (_currentToken.TokenType == AphidTokenType.Comma)
                        {
                            NextToken();
                        }
                        else
                        {
                            break;
                        }
                    }

                    if (_currentToken.TokenType == AphidTokenType.ColonOperator)
                    {
                        NextToken();

                        var b = ParseExpression();

                        foreach (var t in tests)
                        {
                            matchExp.Patterns.Add(new Tuple <Expression, Expression>(t, b));
                        }
                    }
                    else
                    {
                        matchExp.Patterns.Add(new Tuple <Expression, Expression>(null, tests[0]));
                    }

                    if (_currentToken.TokenType == AphidTokenType.Comma)
                    {
                        NextToken();
                    }
                    else
                    {
                        break;
                    }
                }

                exp = matchExp;
                break;

            default:
                throw new AphidParserException(_currentToken);
            }

            return(exp);
        }
Ejemplo n.º 4
0
 public NumberExpression ParseNumberExpression()
 {
     var exp = new NumberExpression(decimal.Parse(_currentToken.Lexeme));
     NextToken();
     return exp;
 }
Ejemplo n.º 5
0
        public Expression ParseFactor()
        {
            Expression exp;
            switch (_currentToken.TokenType)
            {
                case AphidTokenType.LeftBrace:
                    exp = ParseObjectExpression();
                    break;

                case AphidTokenType.LeftBracket:
                    exp = ParseArrayExpression();
                    break;

                case AphidTokenType.LeftParenthesis:
                    NextToken();
                    exp = ParseExpression();
                    Match(AphidTokenType.RightParenthesis);
                    break;

                case AphidTokenType.String:
                    exp = ParseStringExpression();
                    break;

                case AphidTokenType.Number:
                    exp = ParseNumberExpression();
                    break;

                case AphidTokenType.Identifier:
                    exp = ParseIdentifierExpression();
                    break;

                case AphidTokenType.functionOperator:
                    exp = ParseFunctionExpression();
                    break;

                case AphidTokenType.forKeyword:
                    exp = ParseForExpression();
                    break;

                case AphidTokenType.retKeyword:
                    exp = ParseReturnExpression();
                    break;

                case AphidTokenType.trueKeyword:
                    exp = new BooleanExpression(true);
                    NextToken();
                    break;

                case AphidTokenType.falseKeyword:
                    exp = new BooleanExpression(false);
                    NextToken();
                    break;

                case AphidTokenType.thisKeyword:
                    exp = new ThisExpression();
                    NextToken();
                    break;

                case AphidTokenType.ifKeyword:
                    exp = ParseIfExpression();
                    break;

                case AphidTokenType.LoadScriptOperator:
                    exp = ParseLoadScriptExpression();
                    break;

                case AphidTokenType.LoadLibraryOperator:
                    exp = ParseLoadLibraryExpression();
                    break;

                case AphidTokenType.nullKeyword:
                    exp = new NullExpression();
                    NextToken();
                    break;

                case AphidTokenType.breakKeyword:
                    exp = new BreakExpression();
                    NextToken();
                    break;

                case AphidTokenType.HexNumber:
                    exp = new NumberExpression((decimal)Convert.ToInt64(_currentToken.Lexeme.Substring(2), 16));
                    NextToken();
                    break;

                case AphidTokenType.PatternMatchingOperator:
                    var matchExp = new PatternMatchingExpression();
                    NextToken();
                    Match(AphidTokenType.LeftParenthesis);
                    matchExp.TestExpression = ParseExpression();
                    Match(AphidTokenType.RightParenthesis);

                    while (true)
                    {
                        var tests = new List<Expression>();

                        while (true)
                        {
                            tests.Add(ParseExpression());

                            if (_currentToken.TokenType == AphidTokenType.Comma)
                            {
                                NextToken();
                            }
                            else
                            {
                                break;
                            }
                        }

                        if (_currentToken.TokenType == AphidTokenType.ColonOperator)
                        {
                            NextToken();

                            var b = ParseExpression();

                            foreach (var t in tests)
                            {
                                matchExp.Patterns.Add(new Tuple<Expression, Expression>(t, b));
                            }
                        }
                        else
                        {
                            matchExp.Patterns.Add(new Tuple<Expression,Expression>(null, tests[0]));
                        }

                        if (_currentToken.TokenType == AphidTokenType.Comma)
                        {
                            NextToken();
                        }
                        else
                        {
                            break;
                        }
                    }

                    exp = matchExp;
                    break;

                default:
                    throw new AphidParserException(_currentToken);
            }

            return exp;
        }
Ejemplo n.º 6
0
        public Expression ParseFactor()
        {
            Expression exp;

            switch (_currentToken.TokenType)
            {
            case AphidTokenType.LeftBrace:
                exp = ParseObjectExpression();
                break;

            case AphidTokenType.LeftBracket:
                exp = ParseArrayExpression();
                break;

            case AphidTokenType.LeftParenthesis:
                NextToken();
                exp = ParseExpression();
                Match(AphidTokenType.RightParenthesis);
                break;

            case AphidTokenType.String:
                exp = ParseStringExpression();
                break;

            case AphidTokenType.Number:
                exp = ParseNumberExpression();
                break;

            case AphidTokenType.Identifier:
                exp = ParseIdentifierExpression();
                break;

            case AphidTokenType.functionOperator:
                exp = ParseFunctionExpression();
                break;

            case AphidTokenType.forKeyword:
                exp = ParseForExpression();
                break;

            case AphidTokenType.retKeyword:
                exp = ParseReturnExpression();
                break;

            case AphidTokenType.trueKeyword:
                exp = new BooleanExpression(true);
                NextToken();
                break;

            case AphidTokenType.falseKeyword:
                exp = new BooleanExpression(false);
                NextToken();
                break;

            case AphidTokenType.thisKeyword:
                exp = new ThisExpression();
                NextToken();
                break;

            case AphidTokenType.ifKeyword:
                exp = ParseIfExpression();
                break;

            case AphidTokenType.LoadScriptOperator:
                exp = ParseLoadScriptExpression();
                break;

            case AphidTokenType.LoadLibraryOperator:
                exp = ParseLoadLibraryExpression();
                break;

            case AphidTokenType.nullKeyword:
                exp = new NullExpression();
                NextToken();
                break;

            case AphidTokenType.breakKeyword:
                exp = new BreakExpression();
                NextToken();
                break;

            case AphidTokenType.HexNumber:
                exp = new NumberExpression((decimal)Convert.ToInt64(_currentToken.Lexeme.Substring(2), 16));
                NextToken();
                break;

            default:
                throw new AphidParserException(_currentToken);
            }

            switch (_currentToken.TokenType)
            {
            case AphidTokenType.LeftBracket:
                if (exp is ArrayExpression)
                {
                    break;
                }

                NextToken();
                var key = ParseExpression();
                Match(AphidTokenType.RightBracket);
                exp = new ArrayAccessExpression(exp, key);
                break;
            }

            return(exp);
        }
        public Expression ParseFactor()
        {
            Expression exp;
            switch (_currentToken.TokenType)
            {
                case AphidTokenType.LeftBrace:
                    exp = ParseObjectExpression();
                    break;

                case AphidTokenType.LeftBracket:
                    exp = ParseArrayExpression();
                    break;

                case AphidTokenType.LeftParenthesis:
                    NextToken();
                    exp = ParseExpression();
                    Match(AphidTokenType.RightParenthesis);
                    break;

                case AphidTokenType.String:
                    exp = ParseStringExpression();
                    break;

                case AphidTokenType.Number:
                    exp = ParseNumberExpression();
                    break;

                case AphidTokenType.Identifier:
                    exp = ParseIdentifierExpression();
                    break;

                case AphidTokenType.functionOperator:
                    exp = ParseFunctionExpression();
                    break;

                case AphidTokenType.forKeyword:
                    exp = ParseForExpression();
                    break;

                case AphidTokenType.retKeyword:
                    exp = ParseReturnExpression();
                    break;

                case AphidTokenType.trueKeyword:
                    exp = new BooleanExpression(true);
                    NextToken();
                    break;

                case AphidTokenType.falseKeyword:
                    exp = new BooleanExpression(false);
                    NextToken();
                    break;

                case AphidTokenType.thisKeyword:
                    exp = new ThisExpression();
                    NextToken();
                    break;

                case AphidTokenType.ifKeyword:
                    exp = ParseIfExpression();
                    break;

                case AphidTokenType.LoadScriptOperator:
                    exp = ParseLoadScriptExpression();
                    break;

                case AphidTokenType.LoadLibraryOperator:
                    exp = ParseLoadLibraryExpression();
                    break;

                case AphidTokenType.nullKeyword:
                    exp = new NullExpression();
                    NextToken();
                    break;

                case AphidTokenType.breakKeyword:
                    exp = new BreakExpression();
                    NextToken();
                    break;

                case AphidTokenType.HexNumber:
                    exp = new NumberExpression((decimal)Convert.ToInt64(_currentToken.Lexeme.Substring(2), 16));
                    NextToken();
                    break;

                default:
                    throw new AphidParserException(_currentToken);
            }

            switch (_currentToken.TokenType)
            {
                case AphidTokenType.LeftBracket:
                    if (exp is ArrayExpression)
                    {
                        break;
                    }

                    NextToken();
                    var key = ParseExpression();
                    Match(AphidTokenType.RightBracket);
                    exp = new ArrayAccessExpression(exp, key);
                    break;
            }

            return exp;
        }
 public AphidObject InterpretNumberExpression(NumberExpression expression)
 {
     return new AphidObject(expression.Value);
 }
Ejemplo n.º 9
0
 private CodeExpression GenerateImperativeExpression(NumberExpression node)
 {
     return new CodePrimitiveExpression((int)node.Value);
 }
Ejemplo n.º 10
0
 private AphidExpression ParseNumberExpression()
 {
     var exp = new NumberExpression(decimal.Parse(this._currentToken.Lexeme));
     NextToken();
     return exp;
 }
Ejemplo n.º 11
0
 private AphidExpression ParseFactorExpression()
 {
     AphidExpression exp = default(AphidExpression);
     if ((this._currentToken.TokenType == AphidTokenType.LeftBrace)) {
         exp = ParseObjectExpression();
     }
     else {
         if ((this._currentToken.TokenType == AphidTokenType.LeftBracket)) {
             exp = ParseArrayExpression();
         }
         else {
             if ((this._currentToken.TokenType == AphidTokenType.LeftParenthesis)) {
                 NextToken();
                 exp = ParseExpression();
                 Match(AphidTokenType.RightParenthesis);
             }
             else {
                 if ((this._currentToken.TokenType == AphidTokenType.String)) {
                     exp = ParseStringExpression();
                 }
                 else {
                     if ((this._currentToken.TokenType == AphidTokenType.Number)) {
                         exp = ParseNumberExpression();
                     }
                     else {
                         if ((this._currentToken.TokenType == AphidTokenType.Identifier)) {
                             exp = ParseIdentifierExpression();
                             if ((this._currentToken.TokenType == AphidTokenType.definedKeyword)) {
                                 NextToken();
                                 exp = new UnaryOperatorExpression(AphidTokenType.definedKeyword, exp, true);
                             }
                         }
                         else {
                             if ((this._currentToken.TokenType == AphidTokenType.functionOperator)) {
                                 exp = ParseFunctionExpression();
                             }
                             else {
                                 if (((this._currentToken.TokenType == AphidTokenType.retKeyword)
                                             || (this._currentToken.TokenType == AphidTokenType.deleteKeyword))) {
                                     exp = ParseUnaryExpression();
                                 }
                                 else {
                                     if ((this._currentToken.TokenType == AphidTokenType.trueKeyword)) {
                                         exp = new BooleanExpression(true);
                                         NextToken();
                                     }
                                     else {
                                         if ((this._currentToken.TokenType == AphidTokenType.falseKeyword)) {
                                             exp = new BooleanExpression(false);
                                             NextToken();
                                         }
                                         else {
                                             if ((this._currentToken.TokenType == AphidTokenType.thisKeyword)) {
                                                 exp = new ThisExpression();
                                                 NextToken();
                                             }
                                             else {
                                                 if ((this._currentToken.TokenType == AphidTokenType.LoadScriptOperator)) {
                                                     exp = ParseLoadScriptExpression();
                                                 }
                                                 else {
                                                     if ((this._currentToken.TokenType == AphidTokenType.LoadLibraryOperator)) {
                                                         exp = ParseLoadLibraryExpression();
                                                     }
                                                     else {
                                                         if ((this._currentToken.TokenType == AphidTokenType.nullKeyword)) {
                                                             exp = new NullExpression();
                                                             NextToken();
                                                         }
                                                         else {
                                                             if ((this._currentToken.TokenType == AphidTokenType.breakKeyword)) {
                                                                 exp = new BreakExpression();
                                                                 NextToken();
                                                             }
                                                             else {
                                                                 if ((this._currentToken.TokenType == AphidTokenType.HexNumber)) {
                                                                     exp = new NumberExpression(System.Convert.ToInt64(_currentToken.Lexeme.Substring(2), 16));
                                                                     NextToken();
                                                                 }
                                                                 else {
                                                                     if ((this._currentToken.TokenType == AphidTokenType.BinaryNumber)) {
                                                                         exp = new NumberExpression(BinaryNumber.Parse(_currentToken.Lexeme.Substring(2)));
                                                                         NextToken();
                                                                     }
                                                                     else {
                                                                         if ((this._currentToken.TokenType == AphidTokenType.PatternMatchingOperator)) {
                                                                             exp = ParsePatternMatchingExpression();
                                                                         }
                                                                         else {
                                                                             throw new AphidParserException(_currentToken);
                                                                         }
                                                                     }
                                                                 }
                                                             }
                                                         }
                                                     }
                                                 }
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     return exp;
 }
Ejemplo n.º 12
0
 public byte[] AssembleNumber(NumberExpression expression)
 {
     return GetBytes((uint)(expression).Value);
 }