Exemple #1
0
        private Statement ParseSwitchStatement(ILabelSet labelSet)
        {
            var result = new SwitchStatement(Lookahead.StartPosition.LineNo, labelSet);

            Match(TokenType.Switch);

            Match(TokenType.LParenthesis);
            result.Expression = ParseExpression();
            Match(TokenType.RParenthesis);

            Match(TokenType.LCurlyBrace);

            result.BeforeDefault = ParseCaseClauseBlockStatement();

            if (Lookahead.Type == TokenType.Default)
            {
                ReadNextToken();
                Match(TokenType.Colon);
                result.DefaultClause = ParseStatementListStatement();

                result.AfterDefault = ParseCaseClauseBlockStatement();
            }

            if (result.BeforeDefault.IsEmpty || (result.AfterDefault != null && result.AfterDefault.IsEmpty))
            {
                Errors.ThrowExpectedCaseClause(Lookahead.StartPosition);
            }

            Match(TokenType.RCurlyBrace);

            return(result);
        }
Exemple #2
0
        private Statement ParseWhileStatement(ILabelSet labelSet)
        {
            var result = new WhileStatement(Lookahead.StartPosition.LineNo, labelSet);

            Match(TokenType.While);
            Match(TokenType.LParenthesis);
            result.Condition = ParseExpression();
            Match(TokenType.RParenthesis);
            result.Statement = ParseStatement(true);
            return(result);
        }
 internal ForStatement(
     int lineNo,
     Expression initialization,
     Expression condition,
     Expression increment,
     ILabelSet labelSet)
     : base(StatementType.For, lineNo, labelSet)
 {
     _initialization = initialization;
     _condition      = condition;
     _increment      = increment;
 }
Exemple #4
0
 public WhileStatement(int lineNo, ILabelSet labelSet)
     : base(StatementType.While, lineNo, labelSet)
 {
 }
Exemple #5
0
        private Statement ParseForStatement(ILabelSet labelSet)
        {
            var startPosition         = Lookahead.StartPosition;
            IterationStatement result = null;

            Match(TokenType.For);
            Match(TokenType.LParenthesis);
            var isVariableDeclaration = false;

            if (Lookahead.Type == TokenType.Var)
            {
                ReadNextToken();
                isVariableDeclaration = true;
            }
            if (Lookahead.Type == TokenType.Ident)
            {
                var variableName = Lookahead.Value;
                if (PeekNextToken().Type == TokenType.In)
                {
                    MoveForwardLookahead();
                    if (isVariableDeclaration)
                    {
                        if (!_currentFunction.DeclaredVariables.Contains(variableName))
                        {
                            _currentFunction.DeclaredVariables.Add(variableName);
                        }
                    }
                    result = new ForInStatement(startPosition.LineNo, variableName, ParseExpression(), labelSet);
                }
            }
            if (result == null)
            {
                Expression initialization = null;
                if (isVariableDeclaration)
                {
                    initialization = ParseVariableDeclarationList();
                }
                else
                {
                    if (Lookahead.Type != TokenType.Semicolon)
                    {
                        initialization = ParseExpression();
                    }
                }
                Match(TokenType.Semicolon);
                Expression condition = null;
                if (Lookahead.Type != TokenType.Semicolon)
                {
                    condition = ParseExpression();
                }
                Match(TokenType.Semicolon);
                Expression increment = null;
                if (Lookahead.Type != TokenType.RParenthesis)
                {
                    increment = ParseExpression();
                }
                result = new ForStatement(startPosition.LineNo, initialization, condition, increment, labelSet);
            }
            Match(TokenType.RParenthesis);
            result.Statement = ParseStatement(true);
            return(result);
        }
Exemple #6
0
 protected LabellableStatement(StatementType type, int lineNo, ILabelSet labelSet)
     : base(type, lineNo)
 {
     Contract.Requires(labelSet != null);
     _labelSet = labelSet.UnionWith(string.Empty);
 }
Exemple #7
0
 public ForInStatement(int lineNo, string variableName, Expression enumerable, ILabelSet labelSet)
     : base(StatementType.ForIn, lineNo, labelSet)
 {
     Contract.Requires(!string.IsNullOrEmpty(variableName));
     Contract.Requires(enumerable != null);
     _variableName = variableName;
     _enumerable   = enumerable;
 }
 public SwitchStatement(int lineNo, ILabelSet labelSet)
     : base(StatementType.Switch, lineNo, labelSet)
 {
 }
Exemple #9
0
 protected IterationStatement(StatementType type, int lineNo, ILabelSet labelSet)
     : base(type, lineNo, labelSet)
 {
 }