Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.

D Grammar

After the lexical analyzer has created tokens from the source text, the tokens are parsed into the following key constructs:

Note: Many nodes are omitted from these diagrams.
Declaration sub nodes
Statement sub nodes
Expression sub nodes
Note: The remainder of this page is auto-generated, see the other pages for semantic details.

Modules

Module: ModuleDeclaration ModuleDeclaration DeclDefs DeclDefs 
DeclDefs: DeclDef DeclDef DeclDefs
DeclDef: AttributeSpecifier Declaration Constructor Destructor Postblit Invariant UnitTest AliasThis StaticConstructor StaticDestructor SharedStaticConstructor SharedStaticDestructor ConditionalDeclaration DebugSpecification VersionSpecification MixinDeclaration EmptyDeclaration
EmptyDeclaration: ;
ModuleDeclaration: ModuleAttributesopt module ModuleFullyQualifiedName Editionopt ; 
ModuleAttributes: ModuleAttribute ModuleAttribute ModuleAttributes
ModuleAttribute: DeprecatedAttribute UserDefinedAttribute
ModuleFullyQualifiedName: ModuleName Packages . ModuleName
ModuleName: Identifier
Packages: PackageName Packages . PackageName 
PackageName: Identifier
ImportDeclaration: import ImportList ; static import ImportList ; 
ImportList: Import ImportBindings Import , ImportList
Import: ModuleFullyQualifiedName ModuleAliasIdentifier = ModuleFullyQualifiedName
ImportBindings: Import : ImportBindList
ImportBindList: ImportBind ImportBind , ImportBindList
ImportBind: Identifier Identifier = Identifier
ModuleAliasIdentifier: Identifier
MixinDeclaration: mixin ( ArgumentList ) ; 

Declarations

Declaration: FuncDeclaration VarDeclarations AliasDeclaration AliasAssign AggregateDeclaration EnumDeclaration ImportDeclaration ConditionalDeclaration StaticForeachDeclaration StaticAssert TemplateDeclaration TemplateMixinDeclaration TemplateMixin 
AggregateDeclaration: ClassDeclaration InterfaceDeclaration StructDeclaration UnionDeclaration 
VarDeclarations: StorageClassesopt BasicType TypeSuffixesopt IdentifierInitializers ; AutoDeclaration 
IdentifierInitializers: IdentifierInitializer IdentifierInitializer , IdentifierInitializers
IdentifierInitializer: Identifier Identifier TemplateParametersopt = Initializer BitfieldDeclarator BitfieldDeclarator = Initializer
BitfieldDeclarator: : AssignExpression Identifier : ConditionalExpression
Declarator: TypeSuffixesopt Identifier
StorageClasses: StorageClass StorageClass StorageClasses 
StorageClass: LinkageAttribute AlignAttribute AtAttribute deprecated enum static extern abstract final override synchronized auto scope const immutable inout shared __gshared Property nothrow pure ref
Initializer: VoidInitializer NonVoidInitializer 
NonVoidInitializer: ArrayInitializer StructInitializer AssignExpression
VoidInitializer: void 
AutoDeclaration: StorageClasses AutoAssignments ; 
AutoAssignments: AutoAssignment AutoAssignments , AutoAssignment
AutoAssignment: Identifier TemplateParametersopt = Initializer
AliasDeclaration:  alias StorageClassesopt BasicType TypeSuffixesopt Identifiers ; alias StorageClassesopt BasicType FuncDeclarator ; alias AliasAssignments ; 
Identifiers: Identifier Identifier , Identifiers
AliasAssignments: AliasAssignment AliasAssignments , AliasAssignment
AliasAssignment: Identifier TemplateParametersopt = StorageClassesopt Type Identifier TemplateParametersopt = FunctionLiteral Identifier TemplateParametersopt = StorageClassesopt Type Parameters MemberFunctionAttributesopt
AliasAssign: Identifier = Type 
AliasReassignment: Identifier = StorageClassesopt Type Identifier = FunctionLiteral Identifier = StorageClassesopt BasicType Parameters MemberFunctionAttributesopt 

Types

Type: TypeCtorsopt BasicType TypeSuffixesopt 
TypeCtors: TypeCtor TypeCtor TypeCtors
TypeCtor: const immutable inout shared
BasicType: FundamentalType . QualifiedIdentifier QualifiedIdentifier Typeof Typeof . QualifiedIdentifier TypeCtor ( Type ) Vector TraitsExpression MixinType
Vector: __vector ( VectorBaseType )
VectorBaseType: Type
FundamentalType: void ArithmeticType
ArithmeticType: bool byte ubyte short ushort int uint long ulong cent ucent char wchar dchar float double real ifloat idouble ireal cfloat cdouble creal
TypeSuffixes: TypeSuffix TypeSuffixesopt
TypeSuffix: * [ ] [ AssignExpression ] [ AssignExpression .. AssignExpression ] [ Type ] delegate Parameters MemberFunctionAttributesopt function Parameters FunctionAttributesopt
QualifiedIdentifier: Identifier Identifier . QualifiedIdentifier TemplateInstance TemplateInstance . QualifiedIdentifier Identifier [ AssignExpression ] Identifier [ AssignExpression ] . QualifiedIdentifier
Typeof: typeof ( Expression ) typeof ( return ) 
MixinType: mixin ( ArgumentList ) 

Attributes

AttributeSpecifier: Attribute : Attribute DeclarationBlock 
Attribute: AlignAttribute AtAttribute DeprecatedAttribute FunctionAttributeKwd LinkageAttribute Pragma VisibilityAttribute abstract auto const final __gshared extern immutable inout override ref __rvalue scope shared static synchronized
FunctionAttributeKwd: nothrow pure
AtAttribute: @ disable @ __future @ nogc @ live Property @ safe @ system @ trusted UserDefinedAttribute
Property: @ property
DeclarationBlock: DeclDef { DeclDefsopt }
LinkageAttribute: extern ( LinkageType ) extern ( C ++ , ) extern ( C ++ , QualifiedIdentifier ) extern ( C ++ , NamespaceList ) extern ( C ++ , class ) extern ( C ++ , struct ) 
LinkageType: C C ++ D Windows System Objective - C
NamespaceList: ConditionalExpression ConditionalExpression , ConditionalExpression , NamespaceList
AlignAttribute: align ( default ) align align ( AssignExpression ) 
DeprecatedAttribute: deprecated deprecated ( AssignExpression ) 
VisibilityAttribute: export package package ( QualifiedIdentifier ) private protected public 
UserDefinedAttribute: @ ( TemplateArgumentList ) @ TemplateSingleArgument @ Identifier ( NamedArgumentListopt ) @ TemplateInstance @ TemplateInstance ( NamedArgumentListopt ) 

Pragmas

PragmaDeclaration: Pragma ; Pragma DeclarationBlock 
PragmaStatement: Pragma ; Pragma NoScopeStatement
Pragma: pragma ( Identifier ) pragma ( Identifier , ArgumentList )

Expressions

Expression: CommaExpression 
CommaExpression: AssignExpression CommaExpression , AssignExpression 
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 ^^= AssignExpression 
ConditionalExpression: OrOrExpression OrOrExpression ? Expression : ConditionalExpression 
OrOrExpression: AndAndExpression OrOrExpression || AndAndExpression 
AndAndExpression: OrExpression AndAndExpression && OrExpression 
OrExpression: XorExpression OrExpression | XorExpression 
XorExpression: AndExpression XorExpression ^ AndExpression 
AndExpression: CmpExpression AndExpression & CmpExpression 
CmpExpression: EqualExpression IdentityExpression RelExpression InExpression ShiftExpression 
EqualExpression: ShiftExpression == ShiftExpression ShiftExpression != ShiftExpression 
IdentityExpression: ShiftExpression is ShiftExpression ShiftExpression ! is ShiftExpression 
RelExpression: ShiftExpression < ShiftExpression ShiftExpression <= ShiftExpression ShiftExpression > ShiftExpression ShiftExpression >= ShiftExpression 
InExpression: ShiftExpression in ShiftExpression ShiftExpression ! in ShiftExpression 
ShiftExpression: AddExpression ShiftExpression << AddExpression ShiftExpression >> AddExpression ShiftExpression >>> AddExpression 
AddExpression: MulExpression AddExpression + MulExpression AddExpression - MulExpression AddExpression ~ MulExpression 
MulExpression: UnaryExpression MulExpression * UnaryExpression MulExpression / UnaryExpression MulExpression % UnaryExpression 
UnaryExpression: & UnaryExpression ++ UnaryExpression -- UnaryExpression * UnaryExpression - UnaryExpression + UnaryExpression ! UnaryExpression ComplementExpression DeleteExpression CastExpression ThrowExpression PowExpression 
ComplementExpression: ~ UnaryExpression 
DeleteExpression: delete UnaryExpression 
CastExpression: cast ( Type ) UnaryExpression CastQual 
CastQual: cast ( TypeCtorsopt ) UnaryExpression 
ThrowExpression: throw AssignExpression 
PowExpression: PostfixExpression PostfixExpression ^^ UnaryExpression 
PostfixExpression: PrimaryExpression PostfixExpression . Identifier PostfixExpression . TemplateInstance PostfixExpression . NewExpression PostfixExpression ++ PostfixExpression -- PostfixExpression ( NamedArgumentListopt ) TypeCtorsopt BasicType ( NamedArgumentListopt ) PostfixExpression IndexOperation PostfixExpression SliceOperation 
ArgumentList: AssignExpression AssignExpression , AssignExpression , ArgumentList 
NamedArgumentList: NamedArgument NamedArgument , NamedArgument , NamedArgumentList
NamedArgument: Identifier : AssignExpression AssignExpression
IndexOperation: [ ArgumentList ] 
SliceOperation: [ ] [ Slice ] [ Slice , ] 
Slice: AssignExpression AssignExpression , Slice AssignExpression .. AssignExpression AssignExpression .. AssignExpression , Slice
PrimaryExpression: Identifier . Identifier TemplateInstance . TemplateInstance $ LiteralExpression AssertExpression MixinExpression ImportExpression NewExpression FundamentalType . Identifier TypeCtoropt ( Type ) . Identifier ( Type ) . TemplateInstance FundamentalType ( NamedArgumentListopt ) TypeCtoropt ( Type ) ( NamedArgumentListopt ) Typeof TypeidExpression IsExpression ( Expression ) SpecialKeyword RvalueExpression TraitsExpression 
LiteralExpression: this super null true false IntegerLiteral FloatLiteral CharacterLiteral StringLiteral InterpolationExpressionSequence ArrayLiteral AssocArrayLiteral FunctionLiteral
ArrayLiteral: [ ArgumentListopt ] 
AssocArrayLiteral: [ KeyValuePairs ] 
KeyValuePairs: KeyValuePair KeyValuePair , KeyValuePairs
KeyValuePair: KeyExpression : ValueExpression
KeyExpression: AssignExpression
ValueExpression: AssignExpression
FunctionLiteral: function RefOrAutoRefopt BasicTypeWithSuffixesopt ParameterWithAttributesopt FunctionLiteralBody delegate RefOrAutoRefopt BasicTypeWithSuffixesopt ParameterWithMemberAttributesopt FunctionLiteralBody RefOrAutoRefopt ParameterWithMemberAttributes FunctionLiteralBody BlockStatement Identifier => AssignExpression 
RefOrAutoRef: ref auto ref
BasicTypeWithSuffixes: BasicType TypeSuffixesopt
ParameterWithAttributes: Parameters FunctionAttributesopt
ParameterWithMemberAttributes: Parameters MemberFunctionAttributesopt
FunctionLiteralBody: => AssignExpression SpecifiedFunctionBody
AssertExpression: assert ( AssertArguments ) 
AssertArguments: AssignExpression AssignExpression , AssignExpression , AssignExpression AssignExpression , AssignExpression ,
MixinExpression: mixin ( ArgumentList ) 
ImportExpression: import ( AssignExpression ) 
NewExpression: new PlacementExpressionopt Type new PlacementExpressionopt Type [ AssignExpression ] new PlacementExpressionopt Type ( NamedArgumentListopt ) NewAnonClassExpression 
PlacementExpression: ( AssignExpression )
TypeidExpression: typeid ( Type ) typeid ( Expression ) 
IsExpression: is ( Type ) is ( Type : TypeSpecialization ) is ( Type == TypeSpecialization ) is ( Type : TypeSpecialization , TemplateParameterList ) is ( Type == TypeSpecialization , TemplateParameterList ) is ( Type Identifier ) is ( Type Identifier : TypeSpecialization ) is ( Type Identifier == TypeSpecialization ) is ( Type Identifier : TypeSpecialization , TemplateParameterList ) is ( Type Identifier == TypeSpecialization , TemplateParameterList ) 
TypeSpecialization: Type TypeCtor struct union class interface enum __vector function delegate super return __parameters module package
RvalueExpression: __rvalue ( AssignExpression ) 
SpecialKeyword: __FILE__ __FILE_FULL_PATH__ __MODULE__ __LINE__ __FUNCTION__ __PRETTY_FUNCTION__ 

Statements

Statement: EmptyStatement NonEmptyStatement ScopeBlockStatement 
EmptyStatement: ;
NoScopeNonEmptyStatement: NonEmptyStatement BlockStatement
NoScopeStatement: EmptyStatement NonEmptyStatement BlockStatement
NonEmptyOrScopeBlockStatement: NonEmptyStatement ScopeBlockStatement
NonEmptyStatement: NonEmptyStatementNoCaseNoDefault CaseStatement CaseRangeStatement DefaultStatement
NonEmptyStatementNoCaseNoDefault: LabeledStatement ExpressionStatement DeclarationStatement IfStatement WhileStatement DoStatement ForStatement ForeachStatement SwitchStatement FinalSwitchStatement ContinueStatement BreakStatement ReturnStatement GotoStatement WithStatement SynchronizedStatement TryStatement ScopeGuardStatement AsmStatement MixinStatement ForeachRangeStatement PragmaStatement ConditionalStatement StaticForeachStatement ImportDeclaration
ScopeStatement: NonEmptyStatement BlockStatement 
ScopeBlockStatement: BlockStatement 
LabeledStatement: Identifier : Identifier : Statement 
BlockStatement: { } { StatementList } 
StatementList: Statement Statement StatementList
ExpressionStatement: Expression ; 
DeclarationStatement: StorageClassesopt Declaration 
IfStatement: if ( IfCondition ) ThenStatement if ( IfCondition ) ThenStatement else ElseStatement 
IfCondition: Expression IfConditionStorageClasses Identifier = Expression IfConditionStorageClassesopt BasicType Declarator = Expression
IfConditionStorageClasses: IfConditionStorageClass IfConditionStorageClass IfConditionStorageClasses
IfConditionStorageClass: scope auto ref TypeCtor
ThenStatement: ScopeStatement
ElseStatement: ScopeStatement
WhileStatement: while ( IfCondition ) ScopeStatement 
DoStatement: do ScopeStatement  while ( Expression ) ; 
ForStatement: for ( Initialize Testopt ; Incrementopt ) ScopeStatement 
Initialize: ; NoScopeNonEmptyStatement
Test: Expression
Increment: Expression
AggregateForeach: Foreach ( ForeachTypeList ; ForeachAggregate ) 
ForeachStatement: AggregateForeach NoScopeNonEmptyStatement
Foreach: foreach foreach_reverse
ForeachTypeList: ForeachType ForeachType , ForeachTypeList
ForeachType: ForeachTypeAttributesopt BasicType Declarator ForeachTypeAttributesopt Identifier ForeachTypeAttributesopt alias Identifier
ForeachTypeAttributes: ForeachTypeAttribute ForeachTypeAttribute ForeachTypeAttributes
ForeachTypeAttribute: enum ref scope TypeCtor
ForeachAggregate: Expression
RangeForeach: Foreach ( ForeachType ; LwrExpression .. UprExpression ) 
LwrExpression: Expression
UprExpression: Expression
ForeachRangeStatement: RangeForeach ScopeStatement
SwitchStatement: switch ( IfCondition ) ScopeStatement 
CaseStatement: case ArgumentList : ScopeStatementListopt
DefaultStatement: default : ScopeStatementListopt
ScopeStatementList: StatementListNoCaseNoDefault
StatementListNoCaseNoDefault: StatementNoCaseNoDefault StatementNoCaseNoDefault StatementListNoCaseNoDefault
StatementNoCaseNoDefault: EmptyStatement NonEmptyStatementNoCaseNoDefault ScopeBlockStatement
CaseRangeStatement: case FirstExp : .. case LastExp : ScopeStatementListopt 
FirstExp: AssignExpression
LastExp: AssignExpression
FinalSwitchStatement: final switch ( IfCondition ) ScopeStatement 
ContinueStatement: continue Identifieropt ; 
BreakStatement: break Identifieropt ; 
ReturnStatement: return Expressionopt ; 
GotoStatement: goto Identifier ; goto default ; goto case ; goto case Expression ; 
WithStatement: with ( IfCondition ) ScopeStatement with ( Symbol ) ScopeStatement 
SynchronizedStatement: synchronized ScopeStatement synchronized ( Expression ) ScopeStatement 
TryStatement: try ScopeStatement Catches try ScopeStatement Catches FinallyStatement try ScopeStatement FinallyStatement 
Catches: Catch Catch Catches
Catch: catch ( CatchParameter ) NoScopeNonEmptyStatement
CatchParameter: BasicType Identifieropt
FinallyStatement: finally NoScopeNonEmptyStatement
ScopeGuardStatement: scope ( exit ) NonEmptyOrScopeBlockStatement scope ( success ) NonEmptyOrScopeBlockStatement scope ( failure ) NonEmptyOrScopeBlockStatement 
AsmStatement: asm FunctionAttributesopt { AsmInstructionListopt } 
AsmInstructionList: AsmInstruction ; AsmInstruction ; AsmInstructionList
MixinStatement: mixin ( ArgumentList ) ; 

Arrays

ArrayInitializer: [ ArrayElementInitializersopt ] 
ArrayElementInitializers: ArrayElementInitializer ArrayElementInitializer , ArrayElementInitializer , ArrayElementInitializers
ArrayElementInitializer: NonVoidInitializer AssignExpression : NonVoidInitializer

Structs and Unions

StructDeclaration: struct Identifier ; struct Identifier AggregateBody StructTemplateDeclaration AnonStructDeclaration 
AnonStructDeclaration: struct AggregateBody
AggregateBody: { DeclDefsopt } 
UnionDeclaration: union Identifier ; union Identifier AggregateBody UnionTemplateDeclaration AnonUnionDeclaration 
AnonUnionDeclaration: union AggregateBody
StructInitializer: { StructMemberInitializersopt } 
StructMemberInitializers: StructMemberInitializer StructMemberInitializer , StructMemberInitializer , StructMemberInitializers
StructMemberInitializer: NonVoidInitializer Identifier : NonVoidInitializer
Postblit: this ( this ) MemberFunctionAttributesopt FunctionBody this ( this ) MemberFunctionAttributesopt MissingFunctionBody 
Invariant: invariant ( ) BlockStatement invariant BlockStatement invariant ( AssertArguments ) ; 
AliasThis: alias Identifier this ; alias this = Identifier ; 

Classes

ClassDeclaration: class Identifier ; class Identifier BaseClassListopt AggregateBody ClassTemplateDeclaration 
BaseClassList: : SuperClassOrInterface : SuperClassOrInterface , Interfaces
SuperClassOrInterface: BasicType
Interfaces: Interface Interface , Interfaces
Interface: BasicType
Constructor: this Parameters MemberFunctionAttributesopt FunctionBody this Parameters MemberFunctionAttributesopt MissingFunctionBody ConstructorTemplate 
Destructor: ~ this ( ) MemberFunctionAttributesopt FunctionBody ~ this ( ) MemberFunctionAttributesopt MissingFunctionBody 
StaticConstructor: static this ( ) MemberFunctionAttributesopt FunctionBody static this ( ) MemberFunctionAttributesopt MissingFunctionBody 
StaticDestructor: static ~ this ( ) MemberFunctionAttributesopt FunctionBody 
SharedStaticConstructor: shared static this ( ) MemberFunctionAttributesopt FunctionBody shared static this ( ) MemberFunctionAttributesopt MissingFunctionBody 
SharedStaticDestructor: shared static ~ this ( ) MemberFunctionAttributesopt FunctionBody shared static ~ this ( ) MemberFunctionAttributesopt MissingFunctionBody 
Invariant: invariant ( ) BlockStatement invariant BlockStatement invariant ( AssertArguments ) ; 
NewAnonClassExpression: new PlacementExpressionopt class ConstructorArgsopt AnonBaseClassListopt AggregateBody 
ConstructorArgs: ( NamedArgumentListopt )
AnonBaseClassList: SuperClassOrInterface SuperClassOrInterface , Interfaces

Interfaces

InterfaceDeclaration: interface Identifier ; interface Identifier BaseInterfaceListopt AggregateBody InterfaceTemplateDeclaration 
BaseInterfaceList: : Interfaces

Enums

EnumDeclaration: enum Identifier EnumBody enum Identifier : EnumBaseType EnumBody AnonymousEnumDeclaration 
EnumBaseType: Type
EnumBody: { EnumMembers } ;
EnumMembers: EnumMember EnumMember , EnumMember , EnumMembers
EnumMember: EnumMemberAttributesopt Identifier EnumMemberAttributesopt Identifier = AssignExpression
EnumMemberAttributes: EnumMemberAttribute EnumMemberAttribute EnumMemberAttributes
EnumMemberAttribute: DeprecatedAttribute UserDefinedAttribute @ disable
AnonymousEnumDeclaration: enum : EnumBaseType { EnumMembers } enum { AnonymousEnumMembers } 
AnonymousEnumMembers: AnonymousEnumMember AnonymousEnumMember , AnonymousEnumMember , AnonymousEnumMembers
AnonymousEnumMember: EnumMember EnumMemberAttributesopt Type Identifier = AssignExpression

Functions

FuncDeclaration: StorageClassesopt BasicType FuncDeclarator FunctionBody StorageClassesopt BasicType FuncDeclarator MissingFunctionBody AutoFuncDeclaration 
AutoFuncDeclaration: StorageClasses Identifier FuncDeclaratorSuffix FunctionBody
FuncDeclarator: TypeSuffixesopt Identifier FuncDeclaratorSuffix
FuncDeclaratorSuffix: Parameters MemberFunctionAttributesopt TemplateParameters Parameters MemberFunctionAttributesopt Constraintopt
Parameters: ( ParameterListopt ) 
ParameterList: Parameter Parameter , ParameterListopt VariadicArgumentsAttributesopt ...
Parameter: ParameterDeclaration ParameterDeclaration ... ParameterDeclaration = AssignExpression ParameterDeclaration = AssignExpression ...
ParameterDeclaration: ParameterAttributesopt BasicType Declarator ParameterAttributesopt Type
ParameterAttributes: ParameterStorageClass UserDefinedAttribute ParameterAttributes ParameterStorageClass ParameterAttributes UserDefinedAttribute
ParameterStorageClass: auto TypeCtor final in lazy out ref return scope
VariadicArgumentsAttributes: VariadicArgumentsAttribute VariadicArgumentsAttribute VariadicArgumentsAttributes
VariadicArgumentsAttribute: const immutable return scope shared
FunctionAttributes: FunctionAttribute FunctionAttribute FunctionAttributes 
FunctionAttribute: FunctionAttributeKwd Property AtAttribute
MemberFunctionAttributes: MemberFunctionAttribute MemberFunctionAttribute MemberFunctionAttributes
MemberFunctionAttribute: const immutable inout return refopt scope shared FunctionAttribute
FunctionBody: SpecifiedFunctionBody ShortenedFunctionBody 
SpecifiedFunctionBody: doopt BlockStatement FunctionContractsopt InOutContractExpression doopt BlockStatement FunctionContractsopt InOutStatement do BlockStatement
ShortenedFunctionBody: InOutContractExpressionsopt => AssignExpression ;
MissingFunctionBody: ; FunctionContractsopt InOutContractExpression ; FunctionContractsopt InOutStatement 
FunctionContracts: FunctionContract FunctionContract FunctionContracts 
FunctionContract: InOutContractExpression InOutStatement
InOutContractExpressions: InOutContractExpression InOutContractExpression InOutContractExpressions
InOutContractExpression: InContractExpression OutContractExpression
InOutStatement: InStatement OutStatement
InContractExpression: in ( AssertArguments ) 
InStatement: in BlockStatement
OutContractExpression: out ( ; AssertArguments ) out ( Identifier ; AssertArguments ) 
OutStatement: out BlockStatement out ( Identifier ) BlockStatement
MainFunction: MainReturnDecl main() FunctionBody MainReturnDecl main(string[] Identifier) FunctionBody 
MainReturnDecl: void int noreturn auto
CMainFunction: extern (C) MainReturnDecl main(CmainParametersopt) BlockStatement 
CmainParameters: int Identifier, char** Identifier int Identifier, char** Identifier, char** Identifier

Templates

TemplateDeclaration: template Identifier TemplateParameters Constraintopt { DeclDefsopt } 
TemplateParameters: ( TemplateParameterListopt )
TemplateParameterList: TemplateParameter TemplateParameter , TemplateParameter , TemplateParameterList
TemplateInstance: Identifier TemplateArguments 
TemplateArguments: ! ( TemplateArgumentListopt ) ! TemplateSingleArgument
TemplateArgumentList: TemplateArgument TemplateArgument , TemplateArgument , TemplateArgumentList
TemplateSingleArgument: Identifier FundamentalType CharacterLiteral StringLiteral InterpolationExpressionSequence IntegerLiteral FloatLiteral true false null this SpecialKeyword
TemplateArgument: Type AssignExpression Symbol 
Symbol: SymbolTail . SymbolTail
SymbolTail: Identifier Identifier . SymbolTail TemplateInstance TemplateInstance . SymbolTail
TemplateParameter: TemplateTypeParameter TemplateValueParameter TemplateAliasParameter TemplateSequenceParameter TemplateThisParameter 
TemplateTypeParameter: Identifier TemplateTypeParameterSpecializationopt TemplateTypeParameterDefaultopt 
TemplateTypeParameterSpecialization: : Type
TemplateTypeParameterDefault: = Type
TemplateThisParameter: this TemplateTypeParameter 
TemplateValueParameter: BasicType Declarator TemplateValueParameterSpecializationopt TemplateValueParameterDefaultopt 
TemplateValueParameterSpecialization: : ConditionalExpression
TemplateValueParameterDefault: = AssignExpression = SpecialKeyword
TemplateAliasParameter: alias Identifier TemplateAliasParameterSpecializationopt TemplateAliasParameterDefaultopt alias BasicType Declarator TemplateAliasParameterSpecializationopt TemplateAliasParameterDefaultopt 
TemplateAliasParameterSpecialization: : Type : ConditionalExpression
TemplateAliasParameterDefault: = Type = ConditionalExpression
TemplateSequenceParameter: Identifier ... 
ClassTemplateDeclaration: class Identifier TemplateParameters ; class Identifier TemplateParameters Constraintopt BaseClassListopt AggregateBody class Identifier TemplateParameters BaseClassListopt Constraintopt AggregateBody 
InterfaceTemplateDeclaration: interface Identifier TemplateParameters ; interface Identifier TemplateParameters Constraintopt BaseInterfaceListopt AggregateBody interface Identifier TemplateParameters BaseInterfaceList Constraint AggregateBody
StructTemplateDeclaration: struct Identifier TemplateParameters ; struct Identifier TemplateParameters Constraintopt AggregateBody
UnionTemplateDeclaration: union Identifier TemplateParameters ; union Identifier TemplateParameters Constraintopt AggregateBody
ConstructorTemplate: this TemplateParameters Parameters MemberFunctionAttributesopt Constraintopt FunctionBody this TemplateParameters Parameters MemberFunctionAttributesopt Constraintopt MissingFunctionBody 
Constraint: if ( Expression ) 

Template Mixins

TemplateMixinDeclaration: mixin template Identifier TemplateParameters Constraintopt { DeclDefsopt } 
TemplateMixin: mixin MixinTemplateName TemplateArgumentsopt Identifieropt ; mixin Identifier = MixinTemplateName TemplateArgumentsopt ;
MixinTemplateName: . MixinQualifiedIdentifier MixinQualifiedIdentifier Typeof . MixinQualifiedIdentifier
MixinQualifiedIdentifier: Identifier Identifier . MixinQualifiedIdentifier TemplateInstance . MixinQualifiedIdentifier

Conditional Compilation

ConditionalDeclaration: Condition DeclarationBlock Condition DeclarationBlock else DeclarationBlock Condition : DeclDefsopt Condition DeclarationBlock else : DeclDefsopt 
ConditionalStatement: Condition NoScopeNonEmptyStatement Condition NoScopeNonEmptyStatement else NoScopeNonEmptyStatement
Condition: VersionCondition DebugCondition StaticIfCondition 
VersionCondition: version ( Identifier ) version ( unittest ) version ( assert ) 
VersionSpecification: version = Identifier ; 
DebugCondition: debug debug ( Identifier ) 
DebugSpecification: debug = Identifier ; 
StaticIfCondition: static if ( AssignExpression ) 
StaticForeachDeclaration: StaticForeach DeclarationBlock StaticForeach : DeclDefsopt 
StaticForeachStatement: StaticForeach NoScopeNonEmptyStatement
StaticForeach: static AggregateForeach static RangeForeach
StaticAssert: static assert ( ArgumentList ) ; 

Traits

TraitsExpression: __traits ( TraitsKeyword , TraitsArguments ) 
TraitsKeyword: isAbstractClass isArithmetic isOverlapped isAssociativeArray isFinalClass isPOD isNested isFuture isDeprecated isFloating isIntegral isScalar isStaticArray isUnsigned isDisabled isVirtualFunction isVirtualMethod isAbstractFunction isFinalFunction isStaticFunction isOverrideFunction isTemplate isRef isOut isLazy isReturnOnStack isCopyable isZeroInit isModule isPackage isCOMClass hasMember hasCopyConstructor hasMoveConstructor hasPostblit needsDestruction identifier fullyQualifiedName getAliasThis getAttributes isBitfield getBitfieldOffset getBitfieldWidth getFunctionAttributes getFunctionVariadicStyle getLinkage getLocation getMember getOverloads getParameterStorageClasses getPointerBitmap getCppNamespaces getVisibility getProtection getTargetInfo getVirtualFunctions getVirtualMethods getUnitTests parent child classInstanceSize classInstanceAlignment getVirtualIndex allMembers derivedMembers isSame compiles toType initSymbol parameters
TraitsArguments: TraitsArgument TraitsArgument , TraitsArguments
TraitsArgument: AssignExpression Type

Unit Tests

UnitTest: unittest BlockStatement 

D x86 Inline Assembler

AsmStatement: asm FunctionAttributesopt { AsmInstructionListopt } 
AsmInstructionList: AsmInstruction ; AsmInstruction ; AsmInstructionList
AsmInstruction: Identifier : AsmInstruction align IntegerExpression even naked db Operands ds Operands di Operands dl Operands df Operands dd Operands de Operands db StringLiteral ds StringLiteral di StringLiteral dl StringLiteral dw StringLiteral dq StringLiteral Opcode Opcode Operands 
Opcode: Identifier int in out
Operands: Operand Operand , Operands
IntegerExpression: IntegerLiteral Identifier 
Register: AL AH AX EAX 
BL BH BX EBX
CL CH CX ECX
DL DH DX EDX
BP EBP
SP ESP
DI EDI
SI ESI
ES CS SS DS GS FS
CR0 CR2 CR3 CR4
DR0 DR1 DR2 DR3 DR6 DR7
TR3 TR4 TR5 TR6 TR7
ST
ST(0) ST(1) ST(2) ST(3) ST(4) ST(5) ST(6) ST(7)
MM0 MM1 MM2 MM3 MM4 MM5 MM6 MM7
XMM0 XMM1 XMM2 XMM3 XMM4 XMM5 XMM6 XMM7
Register64: RAX RBX RCX RDX 
BPL RBP
SPL RSP
DIL RDI
SIL RSI
R8B R8W R8D R8
R9B R9W R9D R9
R10B R10W R10D R10
R11B R11W R11D R11
R12B R12W R12D R12
R13B R13W R13D R13
R14B R14W R14D R14
R15B R15W R15D R15
XMM8 XMM9 XMM10 XMM11 XMM12 XMM13 XMM14 XMM15
YMM0 YMM1 YMM2 YMM3 YMM4 YMM5 YMM6 YMM7
YMM8 YMM9 YMM10 YMM11 YMM12 YMM13 YMM14 YMM15
Operand: AsmExp 
AsmExp: AsmLogOrExp AsmLogOrExp ? AsmExp : AsmExp
AsmLogOrExp: AsmLogAndExp AsmLogOrExp || AsmLogAndExp
AsmLogAndExp: AsmOrExp AsmLogAndExp && AsmOrExp
AsmOrExp: AsmXorExp AsmOrExp | AsmXorExp
AsmXorExp: AsmAndExp AsmXorExp ^ AsmAndExp
AsmAndExp: AsmEqualExp AsmAndExp & AsmEqualExp
AsmEqualExp: AsmRelExp AsmEqualExp == AsmRelExp AsmEqualExp != AsmRelExp
AsmRelExp: AsmShiftExp AsmRelExp < AsmShiftExp AsmRelExp <= AsmShiftExp AsmRelExp > AsmShiftExp AsmRelExp >= AsmShiftExp
AsmShiftExp: AsmAddExp AsmShiftExp << AsmAddExp AsmShiftExp >> AsmAddExp AsmShiftExp >>> AsmAddExp
AsmAddExp: AsmMulExp AsmAddExp + AsmMulExp AsmAddExp - AsmMulExp
AsmMulExp: AsmBrExp AsmMulExp * AsmBrExp AsmMulExp / AsmBrExp AsmMulExp % AsmBrExp
AsmBrExp: AsmUnaExp AsmBrExp [ AsmExp ]
AsmUnaExp: AsmTypePrefix AsmExp offsetof AsmExp seg AsmExp + AsmUnaExp - AsmUnaExp ! AsmUnaExp ~ AsmUnaExp AsmPrimaryExp
AsmPrimaryExp: IntegerLiteral FloatLiteral __LOCAL_SIZE $ Register Register : AsmExp Register64 Register64 : AsmExp DotIdentifier this
DotIdentifier: Identifier Identifier . DotIdentifier FundamentalType . Identifier
AsmTypePrefix: near ptr far ptr word ptr dword ptr qword ptr FundamentalType ptr 
GccAsmStatement: asm FunctionAttributesopt { GccAsmInstructionList } 
GccAsmInstructionList: GccAsmInstruction ; GccAsmInstruction ; GccAsmInstructionList
GccAsmInstruction: GccBasicAsmInstruction GccExtAsmInstruction GccGotoAsmInstruction
GccBasicAsmInstruction: GccAsmStringExpression
GccExtAsmInstruction: GccAsmStringExpression : GccAsmOperandsopt GccAsmStringExpression : GccAsmOperandsopt : GccAsmOperandsopt GccAsmStringExpression : GccAsmOperandsopt : GccAsmOperandsopt : GccAsmClobbersopt
GccGotoAsmInstruction: GccAsmStringExpression : : GccAsmOperandsopt : GccAsmClobbersopt : GccAsmGotoLabelsopt
GccAsmStringExpression: StringLiteral ( ConditionalExpression )
GccAsmOperands: GccSymbolicNameopt GccAsmStringExpression ( AssignExpression ) GccSymbolicNameopt GccAsmStringExpression ( AssignExpression ) , GccAsmOperands
GccSymbolicName: [ Identifier ]
GccAsmClobbers: GccAsmStringExpression GccAsmStringExpression , GccAsmClobbers
GccAsmGotoLabels: Identifier Identifier , GccAsmGotoLabels

Application Binary Interface

MangledName: _D QualifiedName Type _D QualifiedName Z // Internal 
QualifiedName: SymbolFunctionName SymbolFunctionName QualifiedName 
SymbolFunctionName: SymbolName SymbolName TypeFunctionNoReturn SymbolName M TypeModifiersopt TypeFunctionNoReturn
SymbolName: LName TemplateInstanceName IdentifierBackRef 0 // anonymous symbols 
TemplateInstanceName: TemplateID LName TemplateArgs Z 
TemplateID: __T __U // for symbols declared inside template constraint
TemplateArgs: TemplateArg TemplateArg TemplateArgs
TemplateArg: TemplateArgX H TemplateArgX
TemplateArgX: T Type V Type Value S QualifiedName X Number ExternallyMangledName 
Values: Value Value Values 
Value: n i Number N Number e HexFloat c HexFloat c HexFloat CharWidth Number _ HexDigits A Number Values S Number Values f MangledName
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
CharWidth: a w d
Name: Namestart Namestart Namechars 
Namestart: _ Alpha
Namechar: Namestart Digit
Namechars: Namechar Namechar Namechars
LName: Number Name Number __S Number // function-local parent symbols 
Number: Digit Digit Number
Digit: 0 1 2 3 4 5 6 7 8 9
TypeBackRef: Q NumberBackRef 
IdentifierBackRef: Q NumberBackRef
NumberBackRef: lower-case-letter upper-case-letter NumberBackRef
Type: TypeModifiersopt TypeX TypeBackRef 
TypeX: TypeArray TypeStaticArray TypeAssocArray TypePointer TypeFunction TypeIdent TypeClass TypeStruct TypeEnum TypeTypedef TypeDelegate TypeVoid TypeByte TypeUbyte TypeShort TypeUshort TypeInt TypeUint TypeLong TypeUlong TypeCent TypeUcent TypeFloat TypeDouble TypeReal TypeIfloat TypeIdouble TypeIreal TypeCfloat TypeCdouble TypeCreal TypeBool TypeChar TypeWchar TypeDchar TypeNoreturn TypeNull TypeTuple TypeVector
TypeModifiers: Const Wild Wild Const Shared Shared Const Shared Wild Shared Wild Const Immutable
Shared: O
Const: x
Immutable: y
Wild: Ng
TypeArray: A Type
TypeStaticArray: G Number Type
TypeAssocArray: H Type Type
TypePointer: P Type
TypeVector: Nh Type
TypeFunction: TypeFunctionNoReturn Type
TypeFunctionNoReturn: CallConvention FuncAttrsopt Parametersopt ParamClose
CallConvention: F // D U // C W // Windows R // C++ Y // Objective-C
FuncAttrs: FuncAttr FuncAttr FuncAttrs
FuncAttr: FuncAttrPure FuncAttrNothrow FuncAttrRef FuncAttrProperty FuncAttrNogc FuncAttrReturn FuncAttrScope FuncAttrTrusted FuncAttrSafe FuncAttrLive
FuncAttrPure: Na 
FuncAttrNogc: Ni
FuncAttrNothrow: Nb
FuncAttrProperty: Nd
FuncAttrRef: Nc
FuncAttrReturn: Nj
FuncAttrScope: Nl
FuncAttrTrusted: Ne
FuncAttrSafe: Nf
FuncAttrLive: Nm
Parameters: Parameter Parameter Parameters
Parameter: Parameter2 M Parameter2 // scope Nk Parameter2 // return
Parameter2: Type I Type // in J Type // out K Type // ref L Type // lazy
ParamClose: X // variadic T t...) style Y // variadic T t,...) style Z // not variadic
TypeIdent: I QualifiedName
TypeClass: C QualifiedName
TypeStruct: S QualifiedName
TypeEnum: E QualifiedName
TypeTypedef: T QualifiedName
TypeDelegate: D TypeModifiersopt TypeFunction
TypeVoid: v
TypeByte: g
TypeUbyte: h
TypeShort: s
TypeUshort: t
TypeInt: i
TypeUint: k
TypeLong: l
TypeUlong: m
TypeCent: zi
TypeUcent: zk
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
TypeNoreturn: Nn
TypeNull: n
TypeTuple: B Parameters Z

ImportC

EnumDeclaration: enum Identifier : EnumBaseType EnumBody 
EnumBaseType: Type

Editions

Edition: DecimalInteger 
Interpolation Expression Sequence
Modules