Пример #1
0
        public bool TryParse(Tokens tokens, IScope scope, out IStatement statement)
        {
            tokens.SetMark ();

            Expression value = _expressionParser.ParseValue ( scope, tokens );

            // Look ahead to see if this is an assignment
            if ( value is Variable && tokens.PullTokenIfEqual ( "=" ) )
            {
                Assign assign = new Assign ( _executorFactory.GetAssignExecutor() );
                assign.Ident = value as Variable;

                Expression expression = _expressionParser.ParseExpression ( scope, tokens );
                assign.Expr = expression;

                statement = assign;
                return true;
            }

            // Failed to parse as assignment, rollback.
            tokens.RollbackToMark ();
            statement = null;
            return false;
        }
Пример #2
0
        private ArithOp ParseOperator( Tokens tokens )
        {
            if ( tokens.PullTokenIfEqual ( "+" ) )
            {
                return ArithOp.Add;
            }
            else if ( tokens.PullTokenIfEqual ( "-" ) )
            {
                return ArithOp.Sub;
            }
            else if ( tokens.PullTokenIfEqual ( "*" ) )
            {
                return ArithOp.Mul;
            }
            else if ( tokens.PullTokenIfEqual ( "/" ) )
            {
                return ArithOp.Div;
            }
            else if ( tokens.PullTokenIfEqual ( "==" ) )
            {
                return ArithOp.Equality;
            }
            else if ( tokens.PullTokenIfEqual ( "<" ) )
            {
                return ArithOp.LessThan;
            }
            else if ( tokens.PullTokenIfEqual ( ">" ) )
            {
                return ArithOp.GreaterThan;
            }

            return ArithOp.none;
        }