in src/Parser.php [994:1070]
private function isStatementStart(Token $token) {
// https://github.com/php/php-langspec/blob/master/spec/19-grammar.md#statements
switch ($token->kind) {
// Compound Statements
case TokenKind::OpenBraceToken:
// Labeled Statements
case TokenKind::Name:
// case TokenKind::CaseKeyword: // TODO update spec
// case TokenKind::DefaultKeyword:
// Expression Statements
case TokenKind::SemicolonToken:
case TokenKind::IfKeyword:
case TokenKind::SwitchKeyword:
// Iteration Statements
case TokenKind::WhileKeyword:
case TokenKind::DoKeyword:
case TokenKind::ForKeyword:
case TokenKind::ForeachKeyword:
// Jump Statements
case TokenKind::GotoKeyword:
case TokenKind::ContinueKeyword:
case TokenKind::BreakKeyword:
case TokenKind::ReturnKeyword:
case TokenKind::ThrowKeyword:
// The try Statement
case TokenKind::TryKeyword:
// The declare Statement
case TokenKind::DeclareKeyword:
// const-declaration
case TokenKind::ConstKeyword:
// function-definition
case TokenKind::FunctionKeyword:
// class-declaration
case TokenKind::ClassKeyword:
case TokenKind::AbstractKeyword:
case TokenKind::FinalKeyword:
// interface-declaration
case TokenKind::InterfaceKeyword:
// trait-declaration
case TokenKind::TraitKeyword:
// enum-declaration
case TokenKind::EnumKeyword:
// namespace-definition
case TokenKind::NamespaceKeyword:
// namespace-use-declaration
case TokenKind::UseKeyword:
// global-declaration
case TokenKind::GlobalKeyword:
// function-static-declaration
case TokenKind::StaticKeyword:
case TokenKind::ScriptSectionEndTag:
// attributes
case TokenKind::AttributeToken:
return true;
default:
return $this->isExpressionStart($token);
}
}