D 언어 문법

D 언어 문법 (Grammar)

이 문서는 D 언어 공식 사양(Language Reference)의 Grammar(문법) 챕터 전체를 한국어로 옮긴 번역본이에요. 문법 규칙은 모두 BNF 형태로, 각 규칙의 이름 뒤에 콜론(:)을 붙이고 그 정의가 이어지는 구조랍니다. 규칙 이름 뒤에 낮춰 쓴 opt가 붙으면 그 항목은 생략 가능한 선택 요소를 뜻해요.

출처: https://dlang.org/spec/grammar.html

본문

이 장에서는 D 언어의 핵심 구문 구조를 차례대로 살펴봐요. 렉시컬 분석기(어휘 분석기)가 소스 텍스트에서 토큰을 만들어 내면, 그 토큰들은 다시 아래의 핵심 구성 요소들로 파싱(구문 분석)됩니다.

  • Module은 보통 DeclDefs(선언 정의들)를 가져요.
  • DeclDefDeclaration(선언)이 될 수 있어요.
  • Declaration에는 VarDeclarations, FuncDeclaration, 그리고 AggregateDeclaration(예: class, struct 선언)이 포함돼요.
  • VarDeclarations는 하나 이상의 변수를 Type과 함께 선언해요.
  • 각 구체적인 AggregateDeclarationDeclDef 멤버들을 가져요.
  • FuncDeclarationBlockStatement를 가질 수 있어요.
  • BlockStatementStatements(문들)를 가질 수 있어요.
  • Statement에는 BlockStatement, DeclarationStatement, ExpressionStatement, 그리고 제어 흐름 문(control-flow statements)이 포함돼요.
  • DeclarationStatementDeclaration을 가져요.
  • ExpressionStatementExpression을 가져요.
  • Expression에는 PrimaryExpression, AssignExpression, PostfixExpression이 포함돼요(예: 함수 호출).
  • PrimaryExpression에는 IdentifierLiteralExpression이 포함돼요.
  • AssignExpressionPostfixExpression은 각각 적어도 한 종류의 Expression을 가져요.
  • 모든 ExpressionType을 가져요.

모듈 (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