public ForStatement(Token relatedToken) : base(relatedToken) { _blockStatement = new BlockStatement(relatedToken); _init = new NodeCollection<ExpressionNode>(); _inc = new NodeCollection<ExpressionNode>(); }
public IfStatement(Token relatedToken) : base(relatedToken) { _statements = new BlockStatement(relatedToken); }
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); } } }
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()); } }
public ForeachStatement(Token relatedToken) : base(relatedToken) { _blockStatement = new BlockStatement(relatedToken); }