Example #1
0
 public ForStatement(Token relatedToken)
     : base(relatedToken)
 {
     _blockStatement = new BlockStatement(relatedToken);
     _init = new NodeCollection<ExpressionNode>();
     _inc = new NodeCollection<ExpressionNode>();
 }
Example #2
0
 public IfStatement(Token relatedToken)
     : base(relatedToken)
 {
     _statements = new BlockStatement(relatedToken);
 }
Example #3
0
        private StatementNode ParseStatement()
        {
            switch (_curtok.TokenId)
            {
                case TokenId.LCurly:
                case TokenId.Block:
                    BlockStatement block = new BlockStatement(_curtok);
                    ParseBlock(block);
                    return block;
                case TokenId.Semi:
                    Advance();
                    return new StatementNode(_curtok);
                case TokenId.If:
                    return ParseIf();
                case TokenId.For:
                    return ParseFor();
                case TokenId.Break:
                    return ParseBreak();
                case TokenId.Continue:
                    return ParseContinue();
                case TokenId.Dollar:
                    return ParseDollar();
                case TokenId.Echo:
                    return ParseEcho();
                case TokenId.Html:
                    return ParseHtml();
                case TokenId.String:
                case TokenId.Int:
                case TokenId.Double:
                case TokenId.True:
                case TokenId.False:
                case TokenId.Null:
                case TokenId.LParen:
                case TokenId.PlusPlus:
                case TokenId.MinusMinus:
                case TokenId.Ident:
                    {
                        ExpressionStatement node = new ExpressionStatement(ParseExpression());
                        AssertAndAdvance(TokenId.Semi);
                        return node;
                    }
                case TokenId.Var:
                    {
                        Advance();
                        ExpressionStatement node = new ExpressionStatement(ParseExpression());
                        AssertAndAdvance(TokenId.Semi);
                        return node;
                    }
                default:
                    {
                        throw new ParseException("Unknow token, " + _curtok);

                    }
            }
        }
Example #4
0
        private void ParseBlock(BlockStatement block)
        {
            if (_curtok.TokenId == TokenId.LCurly)
            {
                Token beginToken = _curtok;

                Advance();

                while (_curtok != _eof && _curtok.TokenId != TokenId.RCurly)
                {
                    block.Statements.Add(ParseStatement());
                }

                Token endToken = _curtok;

                AssertAndAdvance(TokenId.RCurly);

                if (beginToken.StartLocation.LineIndex != endToken.StartLocation.LineIndex && _curtok.TokenId == TokenId.Html)
                {
                    string data = _curtok.Data;

                    if (data.StartsWith("\r\n"))
                    {
                        _curtok.Data = data.Substring(2);
                    }
                }

            }
            else
            {
                block.Statements.Add(ParseStatement());
            }
        }
Example #5
0
 public IfStatement(Token relatedToken)
     : base(relatedToken)
 {
     _statements = new BlockStatement(relatedToken);
 }
Example #6
0
 public ForeachStatement(Token relatedToken)
     : base(relatedToken)
 {
     _blockStatement = new BlockStatement(relatedToken);
 }
Example #7
0
 public ForeachStatement(Token relatedToken)
     : base(relatedToken)
 {
     _blockStatement = new BlockStatement(relatedToken);
 }