php7parser
Version:
591 lines (579 loc) • 20.7 kB
text/typescript
/* Copyright (c) Ben Robert Mewburn
* Licensed under the ISC Licence.
*/
'use strict';
import { Token, TokenType } from './lexer';
export const enum PhraseType {
Unknown,
AdditiveExpression,
AnonymousClassDeclaration,
AnonymousClassDeclarationHeader,
AnonymousFunctionCreationExpression,
AnonymousFunctionHeader,
AnonymousFunctionUseClause,
AnonymousFunctionUseVariable,
ArgumentExpressionList,
ArrayCreationExpression,
ArrayElement,
ArrayInitialiserList,
ArrayKey,
ArrayValue,
BitwiseExpression,
BreakStatement,
ByRefAssignmentExpression,
CaseStatement,
CaseStatementList,
CastExpression,
CatchClause,
CatchClauseList,
CatchNameList,
ClassBaseClause,
ClassConstantAccessExpression,
ClassConstDeclaration,
ClassConstElement,
ClassConstElementList,
ClassDeclaration,
ClassDeclarationBody,
ClassDeclarationHeader,
ClassInterfaceClause,
ClassMemberDeclarationList,
ClassModifiers,
ClassTypeDesignator,
CloneExpression,
ClosureUseList,
CoalesceExpression,
CompoundAssignmentExpression,
CompoundStatement,
TernaryExpression,
ConstantAccessExpression,
ConstDeclaration,
ConstElement,
ConstElementList,
ContinueStatement,
DeclareDirective,
DeclareStatement,
DefaultStatement,
DoStatement,
DoubleQuotedStringLiteral,
EchoIntrinsic,
ElseClause,
ElseIfClause,
ElseIfClauseList,
EmptyIntrinsic,
EncapsulatedExpression,
EncapsulatedVariable,
EncapsulatedVariableList,
EqualityExpression,
Error,
ErrorClassMemberDeclaration,
ErrorClassTypeDesignatorAtom,
ErrorControlExpression,
ErrorExpression,
ErrorScopedAccessExpression,
ErrorTraitAdaptation,
ErrorVariable,
ErrorVariableAtom,
EvalIntrinsic,
ExitIntrinsic,
ExponentiationExpression,
ExpressionList,
ExpressionStatement,
FinallyClause,
ForControl,
ForeachCollection,
ForeachKey,
ForeachStatement,
ForeachValue,
ForEndOfLoop,
ForExpressionGroup,
ForInitialiser,
ForStatement,
FullyQualifiedName,
FunctionCallExpression,
FunctionDeclaration,
FunctionDeclarationBody,
FunctionDeclarationHeader,
FunctionStaticDeclaration,
FunctionStaticInitialiser,
GlobalDeclaration,
GotoStatement,
HaltCompilerStatement,
HeredocStringLiteral,
Identifier,
IfStatement,
IncludeExpression,
IncludeOnceExpression,
InlineText,
InstanceOfExpression,
InstanceofTypeDesignator,
InterfaceBaseClause,
InterfaceDeclaration,
InterfaceDeclarationBody,
InterfaceDeclarationHeader,
InterfaceMemberDeclarationList,
IssetIntrinsic,
ListIntrinsic,
LogicalExpression,
MemberModifierList,
MemberName,
MethodCallExpression,
MethodDeclaration,
MethodDeclarationBody,
MethodDeclarationHeader,
MethodReference,
MultiplicativeExpression,
NamedLabelStatement,
NamespaceAliasingClause,
NamespaceDefinition,
NamespaceName,
NamespaceUseClause,
NamespaceUseClauseList,
NamespaceUseDeclaration,
NamespaceUseGroupClause,
NamespaceUseGroupClauseList,
NullStatement,
ObjectCreationExpression,
ParameterDeclaration,
ParameterDeclarationList,
PostfixDecrementExpression,
PostfixIncrementExpression,
PrefixDecrementExpression,
PrefixIncrementExpression,
PrintIntrinsic,
PropertyAccessExpression,
PropertyDeclaration,
PropertyElement,
PropertyElementList,
PropertyInitialiser,
QualifiedName,
QualifiedNameList,
RelationalExpression,
RelativeQualifiedName,
RelativeScope,
RequireExpression,
RequireOnceExpression,
ReturnStatement,
ReturnType,
ScopedCallExpression,
ScopedMemberName,
ScopedPropertyAccessExpression,
ShellCommandExpression,
ShiftExpression,
SimpleAssignmentExpression,
SimpleVariable,
StatementList,
StaticVariableDeclaration,
StaticVariableDeclarationList,
SubscriptExpression,
SwitchStatement,
ThrowStatement,
TraitAdaptationList,
TraitAlias,
TraitDeclaration,
TraitDeclarationBody,
TraitDeclarationHeader,
TraitMemberDeclarationList,
TraitPrecedence,
TraitUseClause,
TraitUseSpecification,
TryStatement,
TypeDeclaration,
UnaryOpExpression,
UnsetIntrinsic,
VariableList,
VariableNameList,
VariadicUnpacking,
WhileStatement,
YieldExpression,
YieldFromExpression
}
export interface Phrase {
/**
* Phrase type
*/
phraseType: PhraseType;
/**
* Phrase and token child nodes
*/
children: (Phrase | Token)[];
}
export interface ParseError extends Phrase {
/**
* The token that prompted the parse error
*/
unexpected: Token;
/**
* The expected token type
*/
expected?: TokenType;
}
export function phraseTypeToString(type: PhraseType) {
switch (type) {
case PhraseType.Unknown:
return 'Unknown';
case PhraseType.AdditiveExpression:
return 'AdditiveExpression';
case PhraseType.AnonymousClassDeclaration:
return 'AnonymousClassDeclaration';
case PhraseType.AnonymousClassDeclarationHeader:
return 'AnonymousClassDeclarationHeader';
case PhraseType.AnonymousFunctionCreationExpression:
return 'AnonymousFunctionCreationExpression';
case PhraseType.AnonymousFunctionHeader:
return 'AnonymousFunctionHeader';
case PhraseType.AnonymousFunctionUseClause:
return 'AnonymousFunctionUseClause';
case PhraseType.AnonymousFunctionUseVariable:
return 'AnonymousFunctionUseVariable';
case PhraseType.ArgumentExpressionList:
return 'ArgumentExpressionList';
case PhraseType.ArrayCreationExpression:
return 'ArrayCreationExpression';
case PhraseType.ArrayElement:
return 'ArrayElement';
case PhraseType.ArrayInitialiserList:
return 'ArrayInitialiserList';
case PhraseType.ArrayKey:
return 'ArrayKey';
case PhraseType.ArrayValue:
return 'ArrayValue';
case PhraseType.BitwiseExpression:
return 'BitwiseExpression';
case PhraseType.BreakStatement:
return 'BreakStatement';
case PhraseType.ByRefAssignmentExpression:
return 'ByRefAssignmentExpression';
case PhraseType.CaseStatement:
return 'CaseStatement';
case PhraseType.CaseStatementList:
return 'CaseStatementList';
case PhraseType.CastExpression:
return 'CastExpression';
case PhraseType.CatchClause:
return 'CatchClause';
case PhraseType.CatchClauseList:
return 'CatchClauseList';
case PhraseType.CatchNameList:
return 'CatchNameList';
case PhraseType.ClassBaseClause:
return 'ClassBaseClause';
case PhraseType.ClassConstantAccessExpression:
return 'ClassConstantAccessExpression';
case PhraseType.ClassConstDeclaration:
return 'ClassConstDeclaration';
case PhraseType.ClassConstElement:
return 'ClassConstElement';
case PhraseType.ClassConstElementList:
return 'ClassConstElementList';
case PhraseType.ClassDeclaration:
return 'ClassDeclaration';
case PhraseType.ClassDeclarationBody:
return 'ClassDeclarationBody';
case PhraseType.ClassDeclarationHeader:
return 'ClassDeclarationHeader';
case PhraseType.ClassInterfaceClause:
return 'ClassInterfaceClause';
case PhraseType.ClassMemberDeclarationList:
return 'ClassMemberDeclarationList';
case PhraseType.ClassModifiers:
return 'ClassModifiers';
case PhraseType.ClassTypeDesignator:
return 'ClassTypeDesignator';
case PhraseType.CloneExpression:
return 'CloneExpression';
case PhraseType.ClosureUseList:
return 'ClosureUseList';
case PhraseType.CoalesceExpression:
return 'CoalesceExpression';
case PhraseType.CompoundAssignmentExpression:
return 'CompoundAssignmentExpression';
case PhraseType.CompoundStatement:
return 'CompoundStatement';
case PhraseType.TernaryExpression:
return 'TernaryExpression';
case PhraseType.ConstantAccessExpression:
return 'ConstantAccessExpression';
case PhraseType.ConstDeclaration:
return 'ConstDeclaration';
case PhraseType.ConstElement:
return 'ConstElement';
case PhraseType.ConstElementList:
return 'ConstElementList';
case PhraseType.ContinueStatement:
return 'ContinueStatement';
case PhraseType.DeclareDirective:
return 'DeclareDirective';
case PhraseType.DeclareStatement:
return 'DeclareStatement';
case PhraseType.DefaultStatement:
return 'DefaultStatement';
case PhraseType.DoStatement:
return 'DoStatement';
case PhraseType.DoubleQuotedStringLiteral:
return 'DoubleQuotedStringLiteral';
case PhraseType.EchoIntrinsic:
return 'EchoIntrinsic';
case PhraseType.ElseClause:
return 'ElseClause';
case PhraseType.ElseIfClause:
return 'ElseIfClause';
case PhraseType.ElseIfClauseList:
return 'ElseIfClauseList';
case PhraseType.EmptyIntrinsic:
return 'EmptyIntrinsic';
case PhraseType.EncapsulatedExpression:
return 'EncapsulatedExpression';
case PhraseType.EncapsulatedVariable:
return 'EncapsulatedVariable';
case PhraseType.EncapsulatedVariableList:
return 'EncapsulatedVariableList';
case PhraseType.EqualityExpression:
return 'EqualityExpression';
case PhraseType.Error:
return 'Error';
case PhraseType.ErrorClassMemberDeclaration:
return 'ErrorClassMemberDeclaration';
case PhraseType.ErrorClassTypeDesignatorAtom:
return 'ErrorClassTypeDesignatorAtom';
case PhraseType.ErrorControlExpression:
return 'ErrorControlExpression';
case PhraseType.ErrorExpression:
return 'ErrorExpression';
case PhraseType.ErrorScopedAccessExpression:
return 'ErrorScopedAccessExpression';
case PhraseType.ErrorTraitAdaptation:
return 'ErrorTraitAdaptation';
case PhraseType.ErrorVariable:
return 'ErrorVariable';
case PhraseType.ErrorVariableAtom:
return 'ErrorVariableAtom';
case PhraseType.EvalIntrinsic:
return 'EvalIntrinsic';
case PhraseType.ExitIntrinsic:
return 'ExitIntrinsic';
case PhraseType.ExponentiationExpression:
return 'ExponentiationExpression';
case PhraseType.ExpressionList:
return 'ExpressionList';
case PhraseType.ExpressionStatement:
return 'ExpressionStatement';
case PhraseType.FinallyClause:
return 'FinallyClause';
case PhraseType.ForControl:
return 'ForControl';
case PhraseType.ForeachCollection:
return 'ForeachCollection';
case PhraseType.ForeachKey:
return 'ForeachKey';
case PhraseType.ForeachStatement:
return 'ForeachStatement';
case PhraseType.ForeachValue:
return 'ForeachValue';
case PhraseType.ForEndOfLoop:
return 'ForEndOfLoop';
case PhraseType.ForExpressionGroup:
return 'ForExpressionGroup';
case PhraseType.ForInitialiser:
return 'ForInitialiser';
case PhraseType.ForStatement:
return 'ForStatement';
case PhraseType.FullyQualifiedName:
return 'FullyQualifiedName';
case PhraseType.FunctionCallExpression:
return 'FunctionCallExpression';
case PhraseType.FunctionDeclaration:
return 'FunctionDeclaration';
case PhraseType.FunctionDeclarationHeader:
return 'FunctionDeclarationHeader';
case PhraseType.FunctionDeclarationBody:
return 'FunctionDeclarationBody';
case PhraseType.FunctionStaticDeclaration:
return 'FunctionStaticDeclaration';
case PhraseType.FunctionStaticInitialiser:
return 'FunctionStaticInitialiser';
case PhraseType.GlobalDeclaration:
return 'GlobalDeclaration';
case PhraseType.GotoStatement:
return 'GotoStatement';
case PhraseType.HaltCompilerStatement:
return 'HaltCompilerStatement';
case PhraseType.HeredocStringLiteral:
return 'HeredocStringLiteral';
case PhraseType.Identifier:
return 'Identifier';
case PhraseType.IfStatement:
return 'IfStatement';
case PhraseType.IncludeExpression:
return 'IncludeExpression';
case PhraseType.IncludeOnceExpression:
return 'IncludeOnceExpression';
case PhraseType.InlineText:
return 'InlineText';
case PhraseType.InstanceOfExpression:
return 'InstanceOfExpression';
case PhraseType.InstanceofTypeDesignator:
return 'InstanceofTypeDesignator';
case PhraseType.InterfaceBaseClause:
return 'InterfaceBaseClause';
case PhraseType.InterfaceDeclaration:
return 'InterfaceDeclaration';
case PhraseType.InterfaceDeclarationBody:
return 'InterfaceDeclarationBody';
case PhraseType.InterfaceDeclarationHeader:
return 'InterfaceDeclarationHeader';
case PhraseType.InterfaceMemberDeclarationList:
return 'InterfaceMemberDeclarationList';
case PhraseType.IssetIntrinsic:
return 'IssetIntrinsic';
case PhraseType.ListIntrinsic:
return 'ListIntrinsic';
case PhraseType.LogicalExpression:
return 'LogicalExpression';
case PhraseType.MemberModifierList:
return 'MemberModifierList';
case PhraseType.MemberName:
return 'MemberName';
case PhraseType.MethodCallExpression:
return 'MethodCallExpression';
case PhraseType.MethodDeclaration:
return 'MethodDeclaration';
case PhraseType.MethodDeclarationBody:
return 'MethodDeclarationBody';
case PhraseType.MethodDeclarationHeader:
return 'MethodDeclarationHeader';
case PhraseType.MethodReference:
return 'MethodReference';
case PhraseType.MultiplicativeExpression:
return 'MultiplicativeExpression';
case PhraseType.NamedLabelStatement:
return 'NamedLabelStatement';
case PhraseType.NamespaceAliasingClause:
return 'NamespaceAliasingClause';
case PhraseType.NamespaceDefinition:
return 'NamespaceDefinition';
case PhraseType.NamespaceName:
return 'NamespaceName';
case PhraseType.NamespaceUseClause:
return 'NamespaceUseClause';
case PhraseType.NamespaceUseClauseList:
return 'NamespaceUseClauseList';
case PhraseType.NamespaceUseDeclaration:
return 'NamespaceUseDeclaration';
case PhraseType.NamespaceUseGroupClause:
return 'NamespaceUseGroupClause';
case PhraseType.NamespaceUseGroupClauseList:
return 'NamespaceUseGroupClauseList';
case PhraseType.NullStatement:
return 'NullStatement';
case PhraseType.ObjectCreationExpression:
return 'ObjectCreationExpression';
case PhraseType.ParameterDeclaration:
return 'ParameterDeclaration';
case PhraseType.ParameterDeclarationList:
return 'ParameterDeclarationList';
case PhraseType.PostfixDecrementExpression:
return 'PostfixDecrementExpression';
case PhraseType.PostfixIncrementExpression:
return 'PostfixIncrementExpression';
case PhraseType.PrefixDecrementExpression:
return 'PrefixDecrementExpression';
case PhraseType.PrefixIncrementExpression:
return 'PrefixIncrementExpression';
case PhraseType.PrintIntrinsic:
return 'PrintIntrinsic';
case PhraseType.PropertyAccessExpression:
return 'PropertyAccessExpression';
case PhraseType.PropertyDeclaration:
return 'PropertyDeclaration';
case PhraseType.PropertyElement:
return 'PropertyElement';
case PhraseType.PropertyElementList:
return 'PropertyElementList';
case PhraseType.PropertyInitialiser:
return 'PropertyInitialiser';
case PhraseType.QualifiedName:
return 'QualifiedName';
case PhraseType.QualifiedNameList:
return 'QualifiedNameList';
case PhraseType.RelationalExpression:
return 'RelationalExpression';
case PhraseType.RelativeQualifiedName:
return 'RelativeQualifiedName';
case PhraseType.RelativeScope:
return 'RelativeScope';
case PhraseType.RequireExpression:
return 'RequireExpression';
case PhraseType.RequireOnceExpression:
return 'RequireOnceExpression';
case PhraseType.ReturnStatement:
return 'ReturnStatement';
case PhraseType.ReturnType:
return 'ReturnType';
case PhraseType.ScopedCallExpression:
return 'ScopedCallExpression';
case PhraseType.ScopedMemberName:
return 'ScopedMemberName';
case PhraseType.ScopedPropertyAccessExpression:
return 'ScopedPropertyAccessExpression';
case PhraseType.ShellCommandExpression:
return 'ShellCommandExpression';
case PhraseType.ShiftExpression:
return 'ShiftExpression';
case PhraseType.SimpleAssignmentExpression:
return 'SimpleAssignmentExpression';
case PhraseType.SimpleVariable:
return 'SimpleVariable';
case PhraseType.StatementList:
return 'StatementList';
case PhraseType.StaticVariableDeclaration:
return 'StaticVariableDeclaration';
case PhraseType.StaticVariableDeclarationList:
return 'StaticVariableDeclarationList';
case PhraseType.SubscriptExpression:
return 'SubscriptExpression';
case PhraseType.SwitchStatement:
return 'SwitchStatement';
case PhraseType.ThrowStatement:
return 'ThrowStatement';
case PhraseType.TraitAdaptationList:
return 'TraitAdaptationList';
case PhraseType.TraitAlias:
return 'TraitAlias';
case PhraseType.TraitDeclaration:
return 'TraitDeclaration';
case PhraseType.TraitDeclarationBody:
return 'TraitDeclarationBody';
case PhraseType.TraitDeclarationHeader:
return 'TraitDeclarationHeader';
case PhraseType.TraitMemberDeclarationList:
return 'TraitMemberDeclarationList';
case PhraseType.TraitPrecedence:
return 'TraitPrecedence';
case PhraseType.TraitUseClause:
return 'TraitUseClause';
case PhraseType.TraitUseSpecification:
return 'TraitUseSpecification';
case PhraseType.TryStatement:
return 'TryStatement';
case PhraseType.TypeDeclaration:
return 'TypeDeclaration';
case PhraseType.UnaryOpExpression:
return 'UnaryOpExpression';
case PhraseType.UnsetIntrinsic:
return 'UnsetIntrinsic';
case PhraseType.VariableList:
return 'VariableList';
case PhraseType.VariableNameList:
return 'VariableNameList';
case PhraseType.VariadicUnpacking:
return 'VariadicUnpacking';
case PhraseType.WhileStatement:
return 'WhileStatement';
case PhraseType.YieldExpression:
return 'YieldExpression';
case PhraseType.YieldFromExpression:
return 'YieldFromExpression';
default:
return '';
}
}