D 언어 문법
D 언어 문법 (Grammar)
이 문서는 D 언어 공식 사양(Language Reference)의 Grammar(문법) 챕터 전체를 한국어로 옮긴 번역본이에요. 문법 규칙은 모두 BNF 형태로, 각 규칙의 이름 뒤에 콜론(:)을 붙이고 그 정의가 이어지는 구조랍니다. 규칙 이름 뒤에 낮춰 쓴 opt가 붙으면 그 항목은 생략 가능한 선택 요소를 뜻해요.
본문
이 장에서는 D 언어의 핵심 구문 구조를 차례대로 살펴봐요. 렉시컬 분석기(어휘 분석기)가 소스 텍스트에서 토큰을 만들어 내면, 그 토큰들은 다시 아래의 핵심 구성 요소들로 파싱(구문 분석)됩니다.
Module은 보통DeclDefs(선언 정의들)를 가져요.DeclDef는Declaration(선언)이 될 수 있어요.Declaration에는VarDeclarations,FuncDeclaration, 그리고AggregateDeclaration(예: class, struct 선언)이 포함돼요.VarDeclarations는 하나 이상의 변수를Type과 함께 선언해요.- 각 구체적인
AggregateDeclaration은DeclDef멤버들을 가져요. FuncDeclaration은BlockStatement를 가질 수 있어요.BlockStatement는Statements(문들)를 가질 수 있어요.Statement에는BlockStatement,DeclarationStatement,ExpressionStatement, 그리고 제어 흐름 문(control-flow statements)이 포함돼요.DeclarationStatement는Declaration을 가져요.ExpressionStatement는Expression을 가져요.Expression에는PrimaryExpression,AssignExpression,PostfixExpression이 포함돼요(예: 함수 호출).PrimaryExpression에는Identifier와LiteralExpression이 포함돼요.AssignExpression과PostfixExpression은 각각 적어도 한 종류의Expression을 가져요.- 모든
Expression은Type을 가져요.
모듈 (Modules)
Module:
ModuleDeclaration
ModuleDeclaration opt DeclDefs
DeclDefs:
DeclDef
DeclDef DeclDefs
DeclDef:
AttributeSpecifier
AliasAssign
Declaration
AggregateMember
UnitTest
StaticConstructor
StaticDestructor
SharedStaticConstructor
SharedStaticDestructor
DebugSpecification
VersionSpecification
MixinDeclaration
EmptyDeclaration
AggregateMember:
Constructor
NewDeclaration
Destructor
Postblit
Invariant
AliasThis
EmptyDeclaration:
;
ModuleDeclaration:
ModuleAttributes opt module ModuleFullyQualifiedName Edition opt ;
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
AggregateDeclaration
EnumDeclaration
ImportDeclaration
ConditionalDeclaration
StaticForeachDeclaration
StaticAssert
TemplateDeclaration
TemplateMixinDeclaration
TemplateMixin
AggregateDeclaration:
ClassDeclaration
InterfaceDeclaration
StructDeclaration
UnionDeclaration
VarDeclarations:
StorageClasses opt BasicType TypeSuffixes opt IdentifierInitializers ;
AutoDeclaration
TuplePattern = AssignExpression ;
IdentifierInitializers:
IdentifierInitializer
IdentifierInitializer , IdentifierInitializers
IdentifierInitializer:
Identifier
Identifier TemplateParameters opt = Initializer
BitfieldDeclarator
BitfieldDeclarator = Initializer
BitfieldDeclarator:
: AssignExpression
Identifier : ConditionalExpression
Declarator:
TypeSuffixes opt 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 TemplateParameters opt = Initializer
TuplePattern = AssignExpression
TuplePattern:
( TuplePatternComponents )
TuplePatternComponents:
TuplePatternComponent ,
TuplePatternComponent , TuplePatternComponent
TuplePatternComponent , TuplePatternComponents
TuplePatternComponent:
StorageClasses opt Identifier
StorageClasses opt BasicType TypeSuffixes opt Identifier
StorageClasses opt TuplePattern
AliasDeclaration:
alias StorageClasses opt BasicType TypeSuffixes opt Identifiers ;
alias StorageClasses opt BasicType FuncDeclarator ;
alias AliasAssignments ;
Identifiers:
Identifier
Identifier , Identifiers
AliasAssignments:
AliasAssignment
AliasAssignments , AliasAssignment
AliasAssignment:
Identifier TemplateParameters opt = StorageClasses opt Type
Identifier TemplateParameters opt = FunctionLiteral
Identifier TemplateParameters opt = StorageClasses opt Type Parameters MemberFunctionAttributes opt
AliasAssign:
Identifier = Type
AliasReassignment:
Identifier = StorageClasses opt Type
Identifier = FunctionLiteral
Identifier = StorageClasses opt BasicType Parameters MemberFunctionAttributes opt
타입 (Types)
Type:
TypeCtors opt BasicType TypeSuffixes opt
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 TypeSuffixes opt
TypeSuffix:
*
[ ]
[ AssignExpression ]
[ AssignExpression .. AssignExpression ]
[ Type ]
delegate Parameters MemberFunctionAttributes opt
function Parameters FunctionAttributes opt
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
@ __ctfe
@ nogc
@ live
Property
@ safe
@ system
@ trusted
UserDefinedAttribute
Property:
@ property
DeclarationBlock:
DeclDef
{ DeclDefs opt }
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 ( NamedArgumentList opt )
@ TemplateInstance
@ TemplateInstance ( NamedArgumentList opt )
프래그마 (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 ( TypeCtors opt ) UnaryExpression
ThrowExpression:
throw AssignExpression
PowExpression:
PostfixExpression
PostfixExpression ^^ UnaryExpression
PostfixExpression:
PrimaryExpression
PostfixExpression . Identifier
PostfixExpression . TemplateInstance
PostfixExpression . NewExpression
PostfixExpression ++
PostfixExpression --
PostfixExpression ( NamedArgumentList opt )
TypeCtors opt BasicType ( NamedArgumentList opt )
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
TypeCtor opt ( Type ) . Identifier
( Type ) . TemplateInstance
FundamentalType ( NamedArgumentList opt )
TypeCtor opt ( Type ) ( NamedArgumentList opt )
Typeof
TypeidExpression
IsExpression
( Expression )
SpecialKeyword
RvalueExpression
TraitsExpression
LiteralExpression:
this
super
null
true
false
IntegerLiteral
FloatLiteral
CharacterLiteral
StringLiteral
InterpolationExpressionSequence
ArrayLiteral
AssocArrayLiteral
FunctionLiteral
ArrayLiteral:
[ ArgumentList opt ]
AssocArrayLiteral:
[ KeyValuePairs ]
KeyValuePairs:
KeyValuePair
KeyValuePair , KeyValuePairs
KeyValuePair:
KeyExpression : ValueExpression
KeyExpression:
AssignExpression
ValueExpression:
AssignExpression
FunctionLiteral:
function RefOrAutoRef opt BasicTypeWithSuffixes opt ParameterWithAttributes opt FunctionLiteralBody
delegate RefOrAutoRef opt BasicTypeWithSuffixes opt ParameterWithMemberAttributes opt FunctionLiteralBody
RefOrAutoRef opt ParameterWithMemberAttributes FunctionLiteralBody
BlockStatement
Identifier => AssignExpression
RefOrAutoRef:
ref
auto ref
BasicTypeWithSuffixes:
BasicType TypeSuffixes opt
ParameterWithAttributes:
Parameters FunctionAttributes opt
ParameterWithMemberAttributes:
Parameters MemberFunctionAttributes opt
FunctionLiteralBody:
=> AssignExpression
SpecifiedFunctionBody
AssertExpression:
assert ( AssertArguments )
AssertArguments:
AssignExpression
AssignExpression ,
AssignExpression , AssignExpression
AssignExpression , AssignExpression ,
MixinExpression:
mixin ( ArgumentList )
ImportExpression:
import ( AssignExpression )
NewExpression:
new PlacementExpression opt Type
new PlacementExpression opt Type [ AssignExpression ]
new PlacementExpression opt Type ( NamedArgumentList opt )
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:
StorageClasses opt Declaration
IfStatement:
if ( IfCondition ) ThenStatement
if ( IfCondition ) ThenStatement else ElseStatement
IfCondition:
Expression
IfConditionStorageClasses Identifier = Expression
IfConditionStorageClasses opt 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 Test opt ; Increment opt ) ScopeStatement
Initialize:
;
NoScopeNonEmptyStatement
Test:
Expression
Increment:
Expression
AggregateForeach:
Foreach ( ForeachTypeList ; ForeachAggregate )
ForeachStatement:
AggregateForeach NoScopeNonEmptyStatement
Foreach:
foreach
foreach_reverse
ForeachTypeList:
ForeachType
ForeachType , ForeachTypeList
ForeachType:
ForeachTypeAttributes opt BasicType Declarator
ForeachTypeAttributes opt Identifier
ForeachTypeAttributes opt alias Identifier
ForeachTypeAttributes opt ForeachTuplePattern
ForeachTypeAttributes:
ForeachTypeAttribute
ForeachTypeAttribute ForeachTypeAttributes
ForeachTypeAttribute:
enum
ref
scope
TypeCtor
ForeachAggregate:
Expression
ForeachTuplePattern:
( ForeachTupleComponents )
ForeachTupleComponents:
ForeachTupleComponent ,
ForeachTupleComponent , ForeachTupleComponent
ForeachTupleComponent , ForeachTupleComponents
ForeachTupleComponent:
ForeachTypeAttributes opt Identifier
ForeachTypeAttributes opt BasicType TypeSuffixes opt Identifier
ForeachTypeAttributes opt ForeachTuplePattern
RangeForeach:
Foreach ( ForeachType ; LwrExpression .. UprExpression )
LwrExpression:
Expression
UprExpression:
Expression
ForeachRangeStatement:
RangeForeach ScopeStatement
SwitchStatement:
switch ( IfCondition ) ScopeStatement
CaseStatement:
case ArgumentList : ScopeStatementList opt
DefaultStatement:
default : ScopeStatementList opt
ScopeStatementList:
StatementListNoCaseNoDefault
StatementListNoCaseNoDefault:
StatementNoCaseNoDefault
StatementNoCaseNoDefault StatementListNoCaseNoDefault
StatementNoCaseNoDefault:
EmptyStatement
NonEmptyStatementNoCaseNoDefault
ScopeBlockStatement
CaseRangeStatement:
case FirstExp : .. case LastExp : ScopeStatementList opt
FirstExp:
AssignExpression
LastExp:
AssignExpression
FinalSwitchStatement:
final SwitchStatement
ContinueStatement:
continue Identifier opt ;
BreakStatement:
break Identifier opt ;
ReturnStatement:
return Expression opt ;
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 Identifier opt
FinallyStatement:
finally NoScopeNonEmptyStatement
ScopeGuardStatement:
scope ( exit ) NonEmptyOrScopeBlockStatement
scope ( success ) NonEmptyOrScopeBlockStatement
scope ( failure ) NonEmptyOrScopeBlockStatement
AsmStatement:
asm FunctionAttributes opt { AsmInstructionList opt }
AsmInstructionList:
AsmInstruction ;
AsmInstruction ; AsmInstructionList
MixinStatement:
mixin ( ArgumentList ) ;
배열 (Arrays)
ArrayInitializer:
[ ArrayElementInitializers opt ]
ArrayElementInitializers:
ArrayElementInitializer
ArrayElementInitializer ,
ArrayElementInitializer , ArrayElementInitializers
ArrayElementInitializer:
NonVoidInitializer
AssignExpression : NonVoidInitializer
구조체와 공용체 (Structs and Unions)
StructDeclaration:
struct Identifier ;
struct Identifier AggregateBody
StructTemplateDeclaration
AnonStructDeclaration
AnonStructDeclaration:
struct AggregateBody
AggregateBody:
{ DeclDefs opt }
NewDeclaration:
new ( ) ;
UnionDeclaration:
union Identifier ;
union Identifier AggregateBody
UnionTemplateDeclaration
AnonUnionDeclaration
AnonUnionDeclaration:
union AggregateBody
StructInitializer:
{ StructMemberInitializers opt }
StructMemberInitializers:
StructMemberInitializer
StructMemberInitializer ,
StructMemberInitializer , StructMemberInitializers
StructMemberInitializer:
NonVoidInitializer
Identifier : NonVoidInitializer
Postblit:
this ( this ) MemberFunctionAttributes opt FunctionBody
this ( this ) MemberFunctionAttributes opt MissingFunctionBody
Invariant:
invariant ( ) BlockStatement
invariant BlockStatement
invariant ( AssertArguments ) ;
AliasThis:
alias Identifier this ;
alias this = Identifier ;
클래스 (Classes)
ClassDeclaration:
class Identifier ;
class Identifier BaseClassList opt AggregateBody
ClassTemplateDeclaration
BaseClassList:
: SuperClassOrInterface
: SuperClassOrInterface , Interfaces
SuperClassOrInterface:
BasicType
Interfaces:
Interface
Interface , Interfaces
Interface:
BasicType
Constructor:
this Parameters MemberFunctionAttributes opt FunctionBody
this Parameters MemberFunctionAttributes opt MissingFunctionBody
ConstructorTemplate
Destructor:
~ this ( ) MemberFunctionAttributes opt FunctionBody
~ this ( ) MemberFunctionAttributes opt MissingFunctionBody
StaticConstructor:
static this ( ) MemberFunctionAttributes opt FunctionBody
static this ( ) MemberFunctionAttributes opt MissingFunctionBody
StaticDestructor:
static ~ this ( ) MemberFunctionAttributes opt FunctionBody
SharedStaticConstructor:
shared static this ( ) MemberFunctionAttributes opt FunctionBody
shared static this ( ) MemberFunctionAttributes opt MissingFunctionBody
SharedStaticDestructor:
shared static ~ this ( ) MemberFunctionAttributes opt FunctionBody
shared static ~ this ( ) MemberFunctionAttributes opt MissingFunctionBody
Invariant:
invariant ( ) BlockStatement
invariant BlockStatement
invariant ( AssertArguments ) ;
NewAnonClassExpression:
new PlacementExpression opt class ConstructorArgs opt AnonBaseClassList opt AggregateBody
ConstructorArgs:
( NamedArgumentList opt )
AnonBaseClassList:
SuperClassOrInterface
SuperClassOrInterface , Interfaces
인터페이스 (Interfaces)
InterfaceDeclaration:
interface Identifier ;
interface Identifier BaseInterfaceList opt AggregateBody
InterfaceTemplateDeclaration
BaseInterfaceList:
: Interfaces
열거형 (Enums)
EnumDeclaration:
enum Identifier EnumBody
enum Identifier : EnumBaseType EnumBody
AnonymousEnumDeclaration
EnumBaseType:
Type
EnumBody:
{ EnumMembers }
;
EnumMembers:
EnumMember
EnumMember ,
EnumMember , EnumMembers
EnumMember:
EnumMemberAttributes opt Identifier
EnumMemberAttributes opt Identifier = AssignExpression
EnumMemberAttributes:
EnumMemberAttribute
EnumMemberAttribute EnumMemberAttributes
EnumMemberAttribute:
DeprecatedAttribute
UserDefinedAttribute
@ disable
AnonymousEnumDeclaration:
enum : EnumBaseType { EnumMembers }
enum { AnonymousEnumMembers }
AnonymousEnumMembers:
AnonymousEnumMember
AnonymousEnumMember ,
AnonymousEnumMember , AnonymousEnumMembers
AnonymousEnumMember:
EnumMember
EnumMemberAttributes opt Type Identifier = AssignExpression
함수 (Functions)
FuncDeclaration:
StorageClasses opt BasicType FuncDeclarator FunctionBody
StorageClasses opt BasicType FuncDeclarator MissingFunctionBody
AutoFuncDeclaration
AutoFuncDeclaration:
StorageClasses Identifier FuncDeclaratorSuffix FunctionBody
FuncDeclarator:
TypeSuffixes opt Identifier FuncDeclaratorSuffix
FuncDeclaratorSuffix:
Parameters MemberFunctionAttributes opt
TemplateParameters Parameters MemberFunctionAttributes opt Constraint opt
Parameters:
( ParameterList opt )
ParameterList:
Parameter
Parameter , ParameterList opt
VariadicArgumentsAttributes opt ...
Parameter:
ParameterDeclaration
ParameterDeclaration ...
ParameterDeclaration = AssignExpression
ParameterDeclaration = AssignExpression ...
ParameterAttributes opt ParameterTuplePattern
ParameterAttributes opt ParameterTuplePattern = AssignExpression
ParameterDeclaration:
ParameterAttributes opt BasicType Declarator
ParameterAttributes opt 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 ref opt
scope
shared
FunctionAttribute
FunctionBody:
SpecifiedFunctionBody
ShortenedFunctionBody
SpecifiedFunctionBody:
do opt BlockStatement
FunctionContracts opt InOutContractExpression do opt BlockStatement
FunctionContracts opt InOutStatement do BlockStatement
ShortenedFunctionBody:
InOutContractExpressions opt => AssignExpression ;
MissingFunctionBody:
;
FunctionContracts opt InOutContractExpression ;
FunctionContracts opt 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
ParameterTuplePattern:
( ParameterTupleComponents )
ParameterTupleComponents:
ParameterTupleComponent ,
ParameterTupleComponent , ParameterTupleComponent
ParameterTupleComponent , ParameterTupleComponents
ParameterTupleComponent:
ParameterAttributes opt Identifier
ParameterAttributes opt BasicType TypeSuffixes opt Identifier
ParameterAttributes opt ParameterTuplePattern
MainFunction:
MainReturnDecl main() FunctionBody
MainReturnDecl main(string[] Identifier) FunctionBody
MainReturnDecl:
void
int
noreturn
auto
CMainFunction:
extern (C) MainReturnDecl main(CmainParameters opt) BlockStatement
CmainParameters:
int Identifier, char** Identifier
int Identifier, char** Identifier, char** Identifier
템플릿 (Templates)
TemplateDeclaration:
template Identifier TemplateParameters Constraint opt { DeclDefs opt }
TemplateParameters:
( TemplateParameterList opt )
TemplateParameterList:
TemplateParameter
TemplateParameter ,
TemplateParameter , TemplateParameterList
TemplateInstance:
Identifier TemplateArguments
TemplateArguments:
! ( TemplateArgumentList opt )
! TemplateSingleArgument
TemplateArgumentList:
TemplateArgument
TemplateArgument ,
TemplateArgument , TemplateArgumentList
TemplateSingleArgument:
Identifier
FundamentalType
CharacterLiteral
StringLiteral
InterpolationExpressionSequence
IntegerLiteral
FloatLiteral
true
false
null
this
SpecialKeyword
Vector
TemplateArgument:
Type
AssignExpression
Symbol
Symbol:
SymbolTail
. SymbolTail
SymbolTail:
Identifier
Identifier . SymbolTail
TemplateInstance
TemplateInstance . SymbolTail
TemplateParameter:
TemplateTypeParameter
TemplateValueParameter
TemplateAliasParameter
TemplateSequenceParameter
TemplateThisParameter
TemplateTypeParameter:
Identifier TemplateTypeParameterSpecialization opt TemplateTypeParameterDefault opt
TemplateTypeParameterSpecialization:
: Type
TemplateTypeParameterDefault:
= Type
TemplateThisParameter:
this TemplateTypeParameter
TemplateValueParameter:
BasicType Declarator TemplateValueParameterSpecialization opt TemplateValueParameterDefault opt
TemplateValueParameterSpecialization:
: ConditionalExpression
TemplateValueParameterDefault:
= AssignExpression
= SpecialKeyword
TemplateAliasParameter:
alias Identifier TemplateAliasParameterSpecialization opt TemplateAliasParameterDefault opt
alias BasicType Declarator TemplateAliasParameterSpecialization opt TemplateAliasParameterDefault opt
TemplateAliasParameterSpecialization:
: Type
: ConditionalExpression
TemplateAliasParameterDefault:
= Type
= ConditionalExpression
TemplateSequenceParameter:
Identifier ...
ClassTemplateDeclaration:
class Identifier TemplateParameters ;
class Identifier TemplateParameters Constraint opt BaseClassList opt AggregateBody
class Identifier TemplateParameters BaseClassList opt Constraint opt AggregateBody
InterfaceTemplateDeclaration:
interface Identifier TemplateParameters ;
interface Identifier TemplateParameters Constraint opt BaseInterfaceList opt AggregateBody
interface Identifier TemplateParameters BaseInterfaceList Constraint AggregateBody
StructTemplateDeclaration:
struct Identifier TemplateParameters ;
struct Identifier TemplateParameters Constraint opt AggregateBody
UnionTemplateDeclaration:
union Identifier TemplateParameters ;
union Identifier TemplateParameters Constraint opt AggregateBody
ConstructorTemplate:
this TemplateParameters Parameters MemberFunctionAttributes opt Constraint opt FunctionBody
this TemplateParameters Parameters MemberFunctionAttributes opt Constraint opt MissingFunctionBody
Constraint:
if ( Expression )
템플릿 믹스인 (Template Mixins)
TemplateMixinDeclaration:
mixin template Identifier TemplateParameters Constraint opt { DeclDefs opt }
TemplateMixin:
mixin MixinTemplateName TemplateArguments opt Identifier opt ;
mixin Identifier = MixinTemplateName TemplateArguments opt ;
MixinTemplateName:
. MixinQualifiedIdentifier
MixinQualifiedIdentifier
Typeof . MixinQualifiedIdentifier
MixinQualifiedIdentifier:
Identifier
Identifier . MixinQualifiedIdentifier
TemplateInstance . MixinQualifiedIdentifier
조건부 컴파일 (Conditional Compilation)
ConditionalDeclaration:
Condition DeclarationBlock
Condition DeclarationBlock else DeclarationBlock
Condition : DeclDefs opt
Condition DeclarationBlock else : DeclDefs opt
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 : DeclDefs opt
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 인라인 어셈블러 (D x86 Inline Assembler)
AsmStatement:
asm FunctionAttributes opt { AsmInstructionList opt }
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 FunctionAttributes opt { GccAsmInstructionList }
GccAsmInstructionList:
GccAsmInstruction ;
GccAsmInstruction ; GccAsmInstructionList
GccAsmInstruction:
GccBasicAsmInstruction
GccExtAsmInstruction
GccGotoAsmInstruction
GccBasicAsmInstruction:
GccAsmStringExpression
GccExtAsmInstruction:
GccAsmStringExpression : GccAsmOperands opt
GccAsmStringExpression : GccAsmOperands opt : GccAsmOperands opt
GccAsmStringExpression : GccAsmOperands opt : GccAsmOperands opt : GccAsmClobbers opt
GccGotoAsmInstruction:
GccAsmStringExpression : : GccAsmOperands opt : GccAsmClobbers opt : GccAsmGotoLabels opt
GccAsmStringExpression:
StringLiteral
( ConditionalExpression )
GccAsmOperands:
GccSymbolicName opt GccAsmStringExpression ( AssignExpression )
GccSymbolicName opt 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 TypeModifiers opt 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:
TypeModifiers opt 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 FuncAttrs opt Parameters opt 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 TypeModifiers opt 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
더 알아보기 (Learn more)
- D 사양 구조: 이 Grammar 챕터는 D 언어 사양의 핵심 문법 정의 모음이에요. 각 문법 규칙에 등장하는 용어(예:
Declaration,Expression,Statement)의 의미는 해당 개념을 다루는 별도 챕터(lexical, types, expressions, statements 등)에서 자세히 설명됩니다. - 전체 사양 목차: https://dlang.org/spec/spec.html
- 원문 챕터: https://dlang.org/spec/grammar.html