BNF: D

From AdonaiMedrado.Pro.Br
Jump to: navigation, search
EndOfFile:
	physical end of the file
	\u0000
	\u001A
EndOfLine:
	\u000D
	\u000A
	\u000D \u000A
	EndOfFile
WhiteSpace:
	Space
	Space WhiteSpace
Space:
	\u0020
	\u0009
	\u000B
	\u000C
Comment:
	/* Characters */
	// Characters EndOfLine
	NestingBlockComment
Characters:
	Character
	Character Characters
NestingBlockComment:
	/+ NestingBlockCommentCharacters +/
NestingBlockCommentCharacters:
	NestingBlockCommentCharacter
	NestingBlockCommentCharacter NestingBlockCommentCharacters
NestingBlockCommentCharacter:
	Character
	NestingBlockComment
Token:
	Identifier
	StringLiteral
	CharacterLiteral
	IntegerLiteral
	FloatLiteral
	Keyword
	/
	/=
	.
	..
	...
	&
	&=
	&&
	|
	|=
	||
	-
	-=
	--
	+
	+=
	++
	<
	<=
	<<
	<<=
	<>
	<>=
	>
	>=
	>>=
	>>>=
	>>
	>>>
	!
	!=
	!==
	!<>
	!<>=
	!<
	!<=
	!>
	!>=
	!~
	(
	)
	[
	]
	{
	}
	?
	,
	;
       :
	$
	=
	==
	===
	*
	*=
	%
	%=
	^
	^=
	~
	~=
	~~
Identifier:
	IdentiferStart
	IdentiferStart IdentifierChars
IdentifierChars:
	IdentiferChar
	IdentiferChar IdentifierChars
IdentifierStart:
	_
	Letter
	UniversalAlpha
IdentifierChar:
	IdentiferStart
	0
	NonZeroDigit
StringLiteral:
	WysiwygString
	AlternateWysiwygString
	DoubleQuotedString
	EscapeSequence
	HexString
WysiwygString:
	r" WysiwygCharacters " Postfixopt
AlternateWysiwygString:
	` WysiwygCharacters ` Postfixopt
WysiwygCharacters:
	WysiwygCharacter
	WysiwygCharacter WysiwygCharacters
WysiwygCharacter:
	Character
	EndOfLine
DoubleQuotedString:
	" DoubleQuotedCharacters " Postfixopt
DoubleQuotedCharacters:
	DoubleQuotedCharacter
	DoubleQuotedCharacter DoubleQuotedCharacters
DoubleQuotedCharacter:
	Character
	EscapeSequence
	EndOfLine
EscapeSequence:
	\'
	\"
	\?
	\\
	\a
	\b
	\f
	\n
	\r
	\t
	\v
	\ EndOfFile
	\x HexDigit HexDigit
	\ OctalDigit
	\ OctalDigit OctalDigit
	\ OctalDigit OctalDigit OctalDigit
	\u HexDigit HexDigit HexDigit HexDigit
	\U HexDigit HexDigit HexDigit HexDigit
	HexDigit HexDigit HexDigit HexDigit
	\& NamedCharacterEntity ;
HexString:
	x" HexStringChars " Postfixopt
HexStringChars:
	HexStringChar
	HexStringChar HexStringChars
	HexStringChar
	HexDigit
	WhiteSpace
	EndOfLine
	Postfix
	c
	w
	d
CharacterLiteral:
	' SingleQuotedCharacter '
	SingleQuotedCharacter
	D Specification 1 0
	Character
	EscapeSequence
IntegerLiteral:
	Integer
	Integer IntegerSuffix
Integer:
	Decimal
	Binary
	Octal
	Hexadecimal
	Integer
IntegerSuffix:
	L
	u
	U
	Lu
	LU
	uL
	UL
Decimal:
	0
	NonZeroDigit
	NonZeroDigit DecimalDigits
Binary:
	0b BinaryDigits
	0B BinaryDigits
Octal:
	0 OctalDigits
Hexadecimal:
	0x HexDigits
	0X HexDigits
NonZeroDigit:
	1
	2
	3
	4
	5
	6
	7
	8
	9
DecimalDigits:
	DecimalDigit
	DecimalDigit DecimalDigits
DecimalDigit:
	0
	NonZeroDigit
	_
BinaryDigits:
	BinaryDigit
	BinaryDigit BinaryDigits
BinaryDigit:
	0
	1
	_
OctalDigits:
	OctalDigit
	OctalDigit OctalDigits
OctalDigit:
	0
	1
	2
	3
	4
	5
	6
	7
	_
HexDigits:
	HexDigit
	HexDigit HexDigits
HexDigit:
	DecimalDigit
	a
	b
	c
	d
	e
	f
	A
	B
	C
	D
	E
	F
FloatLiteral:
	Float
	Float FloatSuffix
	Float ImaginarySuffix
	Float FloatSuffix ImaginarySuffix
Float:
	DecimalFloat
	HexFloat
DecimalFloat:
	DecimalDigits .
	DecimalDigits . DecimalDigits
	DecimalDigits . DecimalDigits DecimalExponent
	. Decimal
	. Decimal DecimalExponent
	DecimalDigits DecimalExponent
	DecimalExponent
	e DecimalDigits
	E DecimalDigits
	e+ DecimalDigits
	E+ DecimalDigits
	e- DecimalDigits
	E- DecimalDigits
HexFloat:
	HexPrefix HexDigits .
	HexPrefix HexDigits . HexDigits
	HexPrefix HexDigits . HexDigits HexExponent
	HexPrefix . HexDigits
	HexPrefix . HexDigits HexExponent
	HexPrefix HexDigits HexExponent
HexPrefix:
	0x
	0X
	HexExponent
	p DecimalDigits
	P DecimalDigits
	p+ DecimalDigits
	P+ DecimalDigits
	p- DecimalDigits
	P- DecimalDigits
FloatSuffix:
	f
	F
	L
ImaginarySuffix:
	i
Keyword:
	abstract
	alias
	align
	asm
	assert
	auto
	body
	bool
	break
	byte
	case
	cast
	catch
	cdouble
	cent
	cfloat
	char
	class
	const
	continue
	creal
	dchar
	debug
	default
	delegate
	delete
	deprecated
	do
	double
	else
	enum
	export
	extern
	false
	final
	1 5 D Specification
	finally
	float
	for
	foreach
	foreach_reverse
	function
	goto
	idouble
	if
	ifloat
	import
	in
	inout
	int
	interface
	invariant
	ireal
	is
	lazy
	long
	mixin
	module
	new
	null
	out
	override
	package
	pragma
	private
	protected
	public
	real
	return
	scope
	short
	static
	struct
	super
	switch
	synchronized
	template
	this
	throw
	true
	try
	typedef
	typeid
	typeof
	ubyte
	ucent
	D Specification 1 6
	uint
	ulong
	union
	unittest
	ushort
	version
	void
	volatile
	wchar
	while
	with
	SpecialTokenSequence
	# line Integer EndOfLine
	# line Integer Filespec EndOfLine
	Filespec
	" Characters "
Module:
	ModuleDeclaration DeclDefs
	DeclDefs
DeclDefs:
	DeclDef
	DeclDef DeclDefs
DeclDef:
	AttributeSpecifier
	ImportDeclaration
	EnumDeclaration
	ClassDeclaration
	InterfaceDeclaration
	AggregateDeclaration
	Declaration
	Constructor
	Destructor
	Invariant
	UnitTest
	StaticConstructor
	StaticDestructor
	DebugSpecification
	VersionSpecification
	;
ModuleDeclaration:
	module ModuleName ;
ModuleName:
	Identifier
	ModuleName . Identifier
ImportDeclaration:
	import ImportList ;
	static import ImportList ;
ImportList:
	Import
	ImportBindings
	Import , ImportList
Import:
	ModuleName
	ModuleAliasIdentifier = ModuleName
ImportBindings:
	Import : ImportBindList
ImportBindList:
	ImportBind
	ImportBind , ImportBindList
ImportBind:
	Identifier
	Identifier =
Declaration:
	typedef Decl
	alias Decl
	Decl
Decl:
	StorageClasses Decl
	BasicType Declarators ;
	BasicType Declarator FunctionBody
	AutoDeclaration
Declarators:
	DeclaratorInitializer
	DeclaratorInitializer , DeclaratorIdentifierList
DeclaratorInitializer:
	Declarator
	Declarator = Initializer
DeclaratorIdentifierList:
	DeclaratorIdentifier
	DeclaratorIdentifier , DeclaratorIdentifierList
DeclaratorIdentifier:
	Identifier
	Identifier = Initializer
BasicType:
	bool
	byte
	ubyte
	short
	ushort
	int
	uint
	long
	ulong
	char
	wchar
	dchar
	float
	double
	real
	ifloat
	idouble
	ireal
	cfloat
	cdouble
	creal
	void
	.IdentifierList
	IdentifierList
	Typeof
	Typeof . IdentifierList
BasicType2:
	*
	[ ]
	[ Expression ]
	[ Type ]
	delegate Parameters
	function Parameters
Declarator:
	BasicType2 Declarator
	Identifier
	() Declarator
	Identifier DeclaratorSuffixes
	() Declarator DeclaratorSuffixes
DeclaratorSuffixes:
	DeclaratorSuffix
	DeclaratorSuffix DeclaratorSuffixes
DeclaratorSuffix:
	[ ]
	[ Expression ]
	[ Type ]
	Parameters
IdentifierList:
	Identifier
	Identifier . IdentifierList
	TemplateInstance
	TemplateInstance . IdentifierList
Typeof:
	typeof ( Expression )
StorageClasses:
	StorageClass
	StorageClass StorageClasses
StorageClass:
	abstract
	auto
	const
	deprecated
	extern
	final
	override
	scope
	static
	synchronized
Type:
	BasicType
	BasicType Declarator2
Declarator2:
	BasicType2 Declarator2
	( Declarator2 )
	( Declarator2 ) DeclaratorSuffixes
Parameters:
	( ParameterList )
	( )
ParameterList:
	Parameter
	Parameter , ParameterList
	Parameter ...
	...
Parameter:
	Declarator
	Declarator = AssignExpression
	InOut Declarator
	InOut Declarator = AssignExpression
InOut:
	in
	out
	inout
	lazy
Initializer:
	void
	NonVoidInitializer
NonVoidInitializer:
	AssignExpression
	ArrayInitializer
	StructInitializer
ArrayInitializer:
	[ ]
	[ ArrayMemberInitializations ]
ArrayMemberInitializations:
	ArrayMemberInitialization
	ArrayMemberInitialization ,
	ArrayMemberInitialization , ArrayMemberInitializations
ArrayMemberInitialization:
	NonVoidInitializer
	AssignExpression : NonVoidInitializer
StructInitializer:
	{ }
	{ StructMemberInitializers }
StructMemberInitializers:
	StructMemberInitializer
	StructMemberInitializer ,
	StructMemberInitializer , StructMemberInitializers
StructMemberInitializer:
	NonVoidInitializer
	Identifier : NonVoidInitializer
AutoDeclaration:
	StorageClasses Identifier = AssignExpression ;
AttributeSpecifier:
Attribute :
	Attribute DeclarationBlock
Attribute:
	LinkageAttribute
	AlignAttribute
	Pragma
	deprecated
	private
	package
	protected
	public
	export
	static
	final
	override
	abstract
	const
	auto
	scope
	DeclarationBlock
	DeclDef
	{ }
	{ DeclDefs }
LinkageAttribute:
	extern
	extern ( LinkageType )
LinkageType:
	C
	C++
	D
	Windows
	Pascal
AlignAttribute:
	align
	align ( Integer )
Pragma:
	pragma ( Identifier )
	pragma ( Identifier , ExpressionList )
StringLiterals:
	StringLiteral
	StringLiterals StringLiteral
ArgumentList:
	AssignExpression
	AssignExpression , ArgumentList
Expression:
	AssignExpression
	AssignExpression , Expression
AssignExpression:
	ConditionalExpression
	ConditionalExpression = AssignExpression
	ConditionalExpression += AssignExpression
	ConditionalExpression -= AssignExpression
	ConditionalExpression *= AssignExpression
	ConditionalExpression /= AssignExpression
	ConditionalExpression %= AssignExpression
	ConditionalExpression &= AssignExpression
	ConditionalExpression |= AssignExpression
	ConditionalExpression ^= AssignExpression
	ConditionalExpression ~= AssignExpression
	ConditionalExpression <<= AssignExpression
	ConditionalExpression >>= AssignExpression
	ConditionalExpression >>>= AssignExpression
ConditionalExpression:
	OrOrExpression
	OrOrExpression ? Expression : ConditionalExpression
OrOrExpression:
	AndAndExpression
	OrOrExpression || AndAndExpression
AndAndExpression:
	OrExpression
	AndAndExpression && OrExpression
OrExpression:
	XorExpression
	OrExpression | XorExpression
XorExpression:
	AndExpression
	XorExpression ^ AndExpression
AndExpression:
	EqualExpression
	AndExpression & EqualExpression
EqualExpression:
	RelExpression
	EqualExpression == RelExpression
	EqualExpression != RelExpression
	EqualExpression is RelExpression
	EqualExpression !is RelExpression
RelExpression:
	ShiftExpression
	InExpression
	RelExpression < ShiftExpression
	RelExpression <= ShiftExpression
	RelExpression > ShiftExpression
	RelExpression >= ShiftExpression
	RelExpression !<>= ShiftExpression
	RelExpression !<> ShiftExpression
	RelExpression <> ShiftExpression
	RelExpression <>= ShiftExpression
	RelExpression !> ShiftExpression
	RelExpression !>= ShiftExpression
	RelExpression !< ShiftExpression
	RelExpression !<= ShiftExpression
InExpression:
	RelExpression in ShiftExpression
ShiftExpression:
	AddExpression
	ShiftExpression << AddExpression
	ShiftExpression >> AddExpression
	ShiftExpression >>> AddExpression
AddExpression:
	MulExpression
	AddExpression + MulExpression
	AddExpression - MulExpression
	CatExpression
CatExpression:
	AddExpression ~ MulExpression
MulExpression:
	UnaryExpression
	MulExpression * UnaryExpression
	MulExpression / UnaryExpression
	MulExpression % UnaryExpression
UnaryExpression:
	PostfixExpression
	& UnaryExpression
	++ UnaryExpression
	-- UnaryExpression
	* UnaryExpression
	- UnaryExpression
	+ UnaryExpression
	! UnaryExpression
	~ UnaryExpression
	( Type ) . Identifier
	NewExpression
	DeleteExpression
	CastExpression
	NewAnonClassExpression
NewExpression:
	NewArguments Type [ AssignExpression ]
	NewArguments Type ( ArgumentList )
	NewArguments Type
	NewArguments ClassArguments BaseClasslistopt { DeclDefs }
NewArguments:
	new ( ArgumentList )
	new ( )
	new
ClassArguments:
	class ( ArgumentList )
	class ( )
	class
DeleteExpression:
	delete UnaryExpression
CastExpression:
	cast ( Type ) UnaryExpression
PostfixExpression:
	PrimaryExpression
	PostfixExpression . Identifier
	PostfixExpression . NewExpression
	PostfixExpression ++
	PostfixExpression --
	PostfixExpression ( )
	PostfixExpression ( ArgumentList )
	IndexExpression
	SliceExpression
IndexExpression:
	PostfixExpression [ ArgumentList ]
SliceExpression:
	PostfixExpression [ ]
	PostfixExpression [ AssignExpression .. AssignExpression ]
PrimaryExpression:
	Identifier
	.Identifier
	this
	super
	null
	true
	false
	NumericLiteral
	CharacterLiteral
	StringLiterals
	ArrayLiteral
	FunctionLiteral
	AssertExpression
	BasicType . Identifier
	typeid ( Type )
	IsExpression
	( Expression )
ArrayLiteral:
	[ ArgumentList ]
FunctionLiteral:
	function Typeopt ( ArgumentList )opt FunctionBody
	delegate Typeopt ( ArgumentList )opt FunctionBody
	( ArgumentList ) FunctionBody
	FunctionBody
AssertExpression:
	assert ( Expression )
	assert ( Expression , Expression )
TypeidExpression:
	typeid ( Type )
IsExpression:
	is ( Type )
	is ( Type : TypeSpecialization )
	is ( Type == TypeSpecialization )
	is ( Type Identifier )
	is ( Type Identifier : TypeSpecialization )
	is ( Type Identifier == TypeSpecialization )
TypeSpecialization:
	Type
	typedef
	struct
	union
	class
	interface
	enum
	function
	delegate
	super
Statement:
	;
	NonEmptyStatement
	ScopeBlockStatement
NoScopeNonEmptyStatement:
	NonEmptyStatement
	BlockStatement
NoScopeStatement:
	;
	NonEmptyStatement
	BlockStatement
NonEmptyOrScopeBlockStatement:
	NonEmptyStatement
	ScopeBlockStatement
NonEmptyStatement:
	LabeledStatement
	ExpressionStatement
	DeclarationStatement
	IfStatement
	ConditionalStatement
	WhileStatement
	DoStatement
	ForStatement
	ForeachStatement
	SwitchStatement
	CaseStatement
	DefaultStatement
	ContinueStatement
	BreakStatement
	ReturnStatement
	GotoStatement
	WithStatement
	SynchronizedStatement
	TryStatement
	ScopeGuardStatement
	ThrowStatement
	VolatileStatement
	AsmStatement
	PragmaStatement
ScopeStatement:
	NonEmptyStatement
	BlockStatement
ScopeBlockStatement:
	BlockStatement
LabelledStatement:
	Identifier ':' NoScopeStatement
BlockStatement:
	{ }
	{ StatementList }
StatementList:
	Statement
	Statement StatementList
ExpressionStatement:
	Expression ;
IfStatement:
	if ( IfCondition ) ThenStatement
	if ( IfCondition ) ThenStatement else ElseStatement
IfCondition:
	Expression
	auto Identifier = Expression
	Declarator = Expression
ThenStatement:
	ScopeStatement
ElseStatement:
	ScopeStatement
WhileStatement:
	while ( Expression ) ScopeStatement
DoStatement:
	do ScopeStatement while ( Expression )
ForStatement:
	for (Initialize Test; Increment) ScopeStatement
Initialize:
	;
	NoScopeNonEmptyStatement
Test:
	empty
	Expression
Increment:
	empty
	Expression
ForeachStatement:
	Foreach (ForeachTypeList; Aggregate) ScopeStatement
Foreach:
	foreach
	foreach_reverse
ForeachTypeList:
	ForeachType
	ForeachType , ForeachTypeList
ForeachType:
	inout Type Identifier
	Type Identifier
	inout Identifier
	Identifier
Aggregate:
	Expression
	Tuple
SwitchStatement:
	switch ( Expression ) ScopeStatement
CaseStatement:
	case ExpressionList : Statement
DefaultStatement:
	default: Statement
ContinueStatement:
	continue;
	continue Identifier ;
BreakStatement:
	break;
	break Identifier ;
ReturnStatement:
	return;
	return Expression ;
GotoStatement:
	goto Identifier ;
	goto default ;
	goto case ;
	goto case Expression ;
WithStatement:
	with ( Expression ) ScopeStatement
	with ( Symbol ) ScopeStatement
	with ( TemplateInstance ) ScopeStatement
SynchronizedStatement:
	synchronized ScopeStatement
	synchronized ( Expression ) ScopeStatement
TryStatement:
	try ScopeStatement Catches
	try ScopeStatement Catches FinallyStatement
	try ScopeStatement FinallyStatement
Catches:
	LastCatch
	Catch
	Catch Catches
LastCatch:
	catch NoScopeNonEmptyStatement
Catch:
	catch ( CatchParameter ) NoScopeNonEmptyStatement
FinallyStatement:
	finally NoScopeNonEmptyStatement
ThrowStatement:
	throw Expression ;
ScopeGuardStatement:
	scope(exit) #NonEmptyOrScopeBlockStatement
	scope(success) #NonEmptyOrScopeBlockStatement
	scope(failure) #NonEmptyOrScopeBlockStatement
VolatileStatement:
	volatile Statement
	volatile ;
AsmStatement:
	asm { }
	asm { AsmInstructionList }
AsmInstructionList:
	AsmInstruction ;
	AsmInstruction ; AsmInstructionList
PragmaStatement:
	Pragma NoScopeStatement
AggregateDeclaration:
	Tag { DeclDefs }
	Tag Identifier StructBody
	Tag Identifier ;
Tag:
	struct
	union
StructBody:
	{ }
	{ StructBodyDeclarations }
StructBodyDeclarations:
	StructBodyDeclaration
	StructBodyDeclaration StructBodyDeclarations
StructBodyDeclaration:
	Declaration
	StaticConstructor
	StaticDestructor
	Invariant
	UnitTest
	StructAllocator
	StructDeallocator
StructAllocator:
	ClassAllocator
StructDeallocator:
	ClassDeallocator
ClassDeclaration:
	class Identifier BaseClassListopt ClassBody
BaseClassList:
	: SuperClass
	: SuperClass InterfaceClasses
	: InterfaceClass
SuperClass:
	Identifier
	Protection Identifier
InterfaceClasses:
	InterfaceClass
	InterfaceClass InterfaceClasses
InterfaceClass:
	Identifier
	Protection Identifier
Protection:
	private
	package
	public
	export
ClassBody:
	{ }
	{ ClassBodyDeclarations }
ClassBodyDeclarations:
	ClassBodyDeclaration
	ClassBodyDeclaration ClassBodyDeclarations
ClassBodyDeclaration:
	Declaration
	Constructor
	Destructor
	StaticConstructor
	StaticDestructor
	Invariant
	UnitTest
	ClassAllocator
	ClassDeallocator
Constructor:
	this Parameters FunctionBody
Destructor:
	~this() FunctionBody
StaticConstructor:
	static this() FunctionBody
StaticDestructor:
	static ~this() FunctionBody
ClassInvariant:
	invariant BlockStatement
UnitTest:
	unittest FunctionBody
ClassAllocator:
	new Parameters FunctionBody
ClassDeallocator:
	delete Parameters FunctionBody
NewAnonClassExpression:
	new (ArgumentList)opt class (ArgumentList)opt SuperClassopt InterfaceClassesopt ClassBody
InterfaceDeclaration:
	interface Identifier InterfaceBody
	interface Identifier : SuperInterfaces InterfaceBody
	SuperInterfaces
	Identifier
	Identifier , SuperInterfaces
InterfaceBody:
	{ DeclDefs }
EnumDeclaration:
	enum Identifier EnumBody
	enum EnumBody
	enum Identifier : EnumBaseType EnumBody
	enum : EnumBaseType EnumBody
EnumBaseType:
	Type
EnumBody:
	;
	{ EnumMembers }
EnumMembers:
	EnumMember
	EnumMember ,
	EnumMember , EnumMembers
EnumMember:
	Identifier
	Identifier = AssignExpression
FunctionBody:
	BlockStatement
	BodyStatement
	InStatement BodyStatement
	OutStatement BodyStatement
	InStatement OutStatement BodyStatement
	OutStatement InStatement BodyStatement
InStatement:
	in BlockStatement
OutStatement:
	out BlockStatement
	out ( Identifier ) BlockStatement
BodyStatement:
	body BlockStatement
TemplateDeclaration:
	template TemplateIdentifier ( TemplateParameterList )
	{ DeclDefs }
TemplateIdentifier:
	Identifier
	TemplateParameterList
	TemplateParameter
	TemplateParameter , TemplateParameterList
TemplateParameter:
	TemplateTypeParameter
	TemplateValueParameter
	TemplateAliasParameter
	TemplateTupleParameter
TemplateTypeParameter:
	Identifier
	Identifier TemplateTypeParameterSpecialization
	Identifier TemplateTypeParameterDefault
	Identifier TemplateTypeParameterSpecialization
	TemplateTypeParameterDefault
TemplateTypeParameterSpecialization:
	: Type
TemplateTypeParameterDefault:
	= Type
TemplateValueParameter:
	Declaration
	Declaration TemplateValueParameterSpecialization
	Declaration TemplateValueParameterDefault
	Declaration TemplateValueParameterSpecialization
	TemplateValueParameterDefault
TemplateValueParameterSpecialization:
	: ConditionalExpression
TemplateValueParameterDefault:
	= ConditionalExpression
TemplateAliasParameter:
	alias Identifier
	alias Identifier TemplateAliasParameterSpecialization
	alias Identifier TemplateAliasParameterDefault
	alias Identifier TemplateAliasParameterSpecialization
	TemplateAliasParameterDefault
TemplateAliasParameterSpecialization:
	: Type
TemplateAliasParameterDefault:
	= Type
TemplateTupleParameter:
	Identifier ...
TemplateInstance:
	TemplateIdentifer !( TemplateArgumentList )
TemplateArgumentList:
	TemplateArgument
	TemplateArgument , TemplateArgumentList
TemplateArgument:
	Type
	AssignExpression
	Symbol
ClassTemplateDeclaration:
	class Identifier ( TemplateParameterList ) [SuperClass {, InterfaceClass }]
	ClassBody
FunctionTemplateDeclaration:
	Type Identifier ( TemplateParameterList ) ( FunctionParameterList )
	FunctionBody
TemplateMixin:
	mixin TemplateIdentifier ;
	mixin TemplateIdentifier MixinIdentifier ;
	mixin TemplateIdentifier !( TemplateArgumentList ) ;
	mixin TemplateIdentifier !( TemplateArgumentList ) MixinIdentifier ;
MixinIdentifier:
	Identifier
ConditionalDeclaration:
	Condition DeclarationBlock
	Condition DeclarationBlock else DeclarationBlock
	Condition : Declarations
DeclarationBlock:
	Declaration
	{ Declarations }
	{ }
Declarations:
	Declaration
	Declaration Declarations
ConditionalStatement:
	Condition NoScopeNonEmptyStatement
	Condition NoScopeNonEmptyStatement else NoScopeNonEmptyStatement
Condition:
	VersionCondition
	DebugCondition
	StaticIfCondition
VersionCondition:
	version ( Integer )
	version ( Identifier )
	VersionSpecification
	version = Identifier ;
	version = Integer ;
DebugCondition:
	debug
	debug ( Integer )
	debug ( Identifier )
	DebugSpecification
	debug = Identifier ;
	debug = Integer ;
StaticIfCondition:
	static if ( AssignExpression )
StaticAssert:
	static assert ( AssignExpression );
	static assert ( AssignExpression , AssignExpression );
AsmInstruction:
	Identifier : AsmInstruction
	align IntegerExpression
	even
	naked
	db Operands
	ds Operands
	di Operands
	dl Operands
	df Operands
	dd Operands
	de Operands
	Opcode
	Opcode Operands
	Operands
	Operand
	Operand , Operands
Operand:
	AsmExp
AsmExp:
	AsmLogOrExp
	AsmLogOrExp ? AsmExp : AsmExp
AsmLogOrExp:
	AsmLogAndExp
	AsmLogAndExp || AsmLogAndExp
AsmLogAndExp:
	AsmOrExp
	AsmOrExp && AsmOrExp
AsmOrExp:
	AsmXorExp
	AsmXorExp | AsmXorExp
AsmXorExp:
	AsmAndExp
	AsmAndExp ^ AsmAndExp
AsmAndExp:
	AsmEqualExp
	AsmEqualExp & AsmEqualExp
AsmEqualExp:
	AsmRelExp
	AsmRelExp == AsmRelExp
	AsmRelExp != AsmRelExp
AsmRelExp:
	AsmShiftExp
	AsmShiftExp < AsmShiftExp
	AsmShiftExp <= AsmShiftExp
	AsmShiftExp > AsmShiftExp
	AsmShiftExp >= AsmShiftExp
AsmShiftExp:
	AsmAddExp
	AsmAddExp << AsmAddExp
	AsmAddExp >> AsmAddExp
	AsmAddExp >>> AsmAddExp
AsmAddExp:
	AsmMulExp
	AsmMulExp + AsmMulExp
	AsmMulExp - AsmMulExp
AsmMulExp:
	AsmBrExp
	AsmBrExp * AsmBrExp
	AsmBrExp / AsmBrExp
	AsmBrExp % AsmBrExp
AsmBrExp:
	AsmUnaExp
	AsmBrExp [ AsmExp ]
AsmUnaExp:
	AsmTypePrefix AsmExp
	offset AsmExp
	seg AsmExp
	+ AsmUnaExp
	- AsmUnaExp
	! AsmUnaExp
	~ AsmUnaExp
	AsmPrimaryExp
	AsmPrimaryExp
	IntegerConstant
	FloatConstant
	__LOCAL_SIZE
	$
	Register
	DotIdentifier
	DotIdentifier
	Identifier
	Identifier . DotIdentifier
AsmTypePrefix:
	near ptr
	far ptr
	byte ptr
	short ptr
	int ptr
	word ptr
	dword ptr
	float ptr
	double ptr
	real ptr
MangledName:
	_D QualifiedName Type
	_D QualifiedName M Type
QualifiedName:
	SymbolName
	SymbolName QualifiedName
SymbolName:
	LName
	TemplateInstanceName
TemplateInstanceName:
	__T LName TemplateArgs Z
TemplateArgs:
	TemplateArg
	TemplateArg TemplateArgs
TemplateArg:
	T Type
	V Type Value
	S LName
Value:
	n
	Number
	N Number
	e HexFloat
	c HexFloat c HexFloat
	A Number Value...
HexFloat:
	NAN
	INF
	NINF
	N HexDigits P Exponent
	HexDigits P Exponent
Exponent:
	N Number
	Number
HexDigits:
	HexDigit
	HexDigit HexDigits
HexDigit:
	Digit
	A
	B
	C
	D
	E
	F
Name:
	Namestart
	Namestart Namechars
Namestart:
	_
	Alpha
Namechar:
	Namestart
	Digit
Namechars:
	Namechar
	Namechar Namechars
LName:
	Number Name
Number:
	Digit
	Digit Number
Digit:
	0
	1
	2
	3
	4
	5
	6
	7
	8
	9
Type:
	TypeArray
	TypeSarray
	TypeAarray
	TypePointer
	TypeFunction
	TypeIdent
	TypeClass
	TypeStruct
	TypeEnum
	TypeTypedef
	TypeDelegate
	TypeNone
	TypeVoid
	TypeByte
	TypeUbyte
	TypeShort
	TypeUshort
	TypeInt
	TypeUint
	TypeLong
	TypeUlong
	TypeFloat
	TypeDouble
	TypeReal
	TypeIfloat
	TypeIdouble
	TypeIreal
	TypeCfloat
	TypeCdouble
	TypeCreal
	TypeBool
	TypeChar
	TypeWchar
	TypeDchar
	TypeTuple
TypeArray:
	A Type
TypeSarray:
	G Number Type
TypeAarray:
	H Type Type
TypePointer:
	P Type
TypeFunction:
	CallConvention Arguments ArgClose Type
CallConvention:
	F
	U
	W
	V
	R
Arguments:
	Argument
	Argument Arguments
Argument:
	Type
	J Type
	K Type
	L Type
	ArgClose
	X
	Y
	Z
TypeIdent:
	I LName
TypeClass:
	C LName
TypeStruct:
	S LName
TypeEnum:
	E LName
TypeTypedef:
	T LName
TypeDelegate:
	D TypeFunction
TypeNone:
	n
TypeVoid:
	v
TypeByte:
	g
TypeUbyte:
	h
TypeShort:
	s
TypeUshort:
	t
TypeInt:
	i
TypeUint:
	k
TypeLong:
	l
TypeUlong:
	m
TypeFloat:
	f
TypeDouble:
	d
TypeReal:
	e
TypeIfloat:
	o
TypeIdouble:
	p
TypeIreal:
	j
TypeCfloat:
	q
TypeCdouble:
	r
TypeCreal:
	c
TypeBool:
	b
TypeChar:
	a
TypeWchar:
	u
TypeDchar:
	w
TypeTuple:
	B Number Arguments