``0Lexical` EndOfFile : physicalEndOfTheFile | `\u0000` | `\u001A` EndOfLine : `\u000D` | `\u000A` | `\u000D` `\u000A` | EndOfFile WhiteSpace : Space | Space WhiteSpace Space : `\u0020` | `\u0009` | `\u000B` | `\u000C` | EndOfLine | Comment Comment : `/*` Characters `*/` | `//` Characters EndOfLine | `/+` Characters `+/` Identifier : IdentiferStart | IdentiferStart IdentifierChars IdentifierChars : IdentiferChar | IdentiferChar IdentifierChars IdentifierStart : `_` | Letter IdentifierChar : IdentiferStart | Digit StringLiteral : SingleQuotedString | DoubleQuotedString | EscapeSequence SingleQuotedString : `'` SingleQuotedCharacters `'` SingleQuotedCharacter : Character | EndOfLine DoubleQuotedString : `"` DoubleQuotedCharacters `"` DoubleQuotedCharacter : Character | EscapeSequence | EndOfLine EscapeSequence : `\'` | `\"` | `\?` | `\\` | `\a` | `\b` | `\f` | `\n` | `\r` | `\t` | `\v` | `\` EndOfFile | `\x` HexDigit HexDigit | `\` OctalDigit | `\` OctalDigit OctalDigit | `\` OctalDigit OctalDigit OctalDigit | `\u` HexDigit HexDigit HexDigit HexDigit IntegerLiteral : Integer | Integer IntegerSuffix Integer : Decimal | Binary | Octal | Hexadecimal | HexadecimalH IntegerSuffix : `l` | `L` | `u` | `U` | `lu` | `Lu` | `lU` | `LU` | `ul` | `uL` | `Ul` | `UL` Decimal : `0` | NonZeroDigit | NonZeroDigit Decimal Binary : `0b` BinaryDigits | `0B` BinaryDigits Octal : `0` OctalDigits Hexadecimal : `0x` HexDigits | `0X` HexDigits HexadecimalH : HexDigits `h` | HexDigits `H` FloatLiteral : Float | Float FloatSuffix | Float ImaginarySuffix | Float FloatSuffix ImaginarySuffix Float : DecimalFloat | HexFloat FloatSuffix : `f` | `F` | `l` | `L` ImaginarySuffix : `i` | `I` Keyword : `abstract` | `alias` | `align` | `asm` | `assert` | `auto` | `bit` | `body` | `break` | `byte` | `case` | `cast` | `catch` | `cent` | `char` | `class` | `complex` | `const` | `continue` | `debug` | `default` | `delegate` | `delete` | `deprecated` | `do` | `double` | `else` | `enum` | `export` | `extended` | `extern` | `false` | `final` | `finally` | `float` | `for` | `super` | `null` | `new` | `short` | `int` | `long` | `imaginary` | `if` | `switch` | `synchronized` | `return` | `goto` | `struct` | `interface` | `import` | `static` | `override` | `in` | `out` | `inout` | `private` | `protected` | `public` | `invariant` | `this` | `throw` | `true` | `try` | `typedef` | `ubyte` | `ucent` | `uint` | `ulong` | `union` | `ushort` | `version` | `void` | `volatile` | `wchar` | `while` | `with` Token : Identifier | StringLiteral | IntegerLiteral | FloatLiteral | Keyword | `/` | `/=` | `.` | `..` | `...` | `&` | `&=` | `&&` | `|` | `|=` | `||` | `-` | `-=` | `--` | `+` | `+=` | `++` | `<` | `<=` | `<<` | `<<=` | `<>` | `<>=` | `>` | `>=` | `>>=` | `>>>=` | `>>` | `>>>` | `!` | `!=` | `!==` | `!<>` | `!<>=` | `!<` | `!<=` | `!>` | `!>=` | `(` | `)` | `[` | `]` | `{` | `}` | `?` | `,` | `;` | `:` | `$` | `=` | `==` | `===` | `*` | `*=` | `%` | `%=` | `^` | `^=` | `~` | `~=` Pragma : `#line` Integer EndOfLine | `#line` Integer Filespec EndOfLine Filespec : `"` Characters `"` ``0Modules` Module : ModuleDeclaration DeclDefs | DeclDefs DeclDefs : DeclDef | DeclDef DeclDefs DeclDef : AttributeSpecifier | ImportDeclaration | EnumDeclaration | ClassDeclaration | InterfaceDeclaration | AggregateDeclaration | Declaration | Constructor | Destructor | Invariant | Unittest | StaticConstructor | StaticDestructor | DebugSpecification | VersionSpecification | `;` ModuleDeclaration : `module` ModuleName `;` ModuleName : Identifier | ModuleName `.` Identifier ImportDeclaration : `import` ModuleNameList `;` ModuleNameList : ModuleName | ModuleName `,` ModuleNameList ``0Declarations` Declaration : `typedef` Decl | `alias` Decl | Decl Decl : `const` Decl | `static` Decl | `final` Decl | `synchronized` Decl | `deprecated` Decl | BasicType BasicType2 Declarators `;` | BasicType BasicType2 FunctionDeclarator Declarators : Declarator | Declarator `,` Declarators BasicType : `void` | `bit` | `byte` | `ubyte` | `short` | `ushort` | `int` | `uint` | `long` | `ulong` | `cent` | `ucent` | `float` | `double` | `extended` | `imaginary` | `complex` | `char` | `wchar` ``0Properties` IntegralProperty : `.init` | `.size` | `.max` | `.min` | `.sign` FloatingPointProperty : `.init` | `.size` | `.infinity` | `.nan` | `.sign` | `.isnan` | `.isinfinite` | `.isnormal` | `.digits` | `.epsilon` | `.mantissa` | `.maxExp` | `.max` | `.min` EnumProperties : `.min` | `.max` | `.size` ``0Attributes` AttributeSpecifier : Attribute `:` | Attribute DeclDefBlock AttributeElseSpecifier : AttributeElse `:` | AttributeElse DeclDefBlock | AttributeElse DeclDefBlock `else` DeclDefBlock Attribute : LinkageAttribute | AlignAttribute | `deprecated` | `private` | `protected` | `public` | `export` | `static` | `final` | `override` | `abstract` | `const` | `auto` AttributeElse : DebugAttribute | VersionAttribute DeclDefBlock : DeclDef | `{` `}` | `{` DeclDefs `}` LinkageAttribute : `extern` | `extern` `(` LinkageType `)` LinkageType : `C` | `D` | `Windows` | `Pascal` AlignAttribute : `align` | `align` `(` Integer `)` DebugAttribute : `debug` | `debug` `(` Integer `)` | `debug` `(` Identifier `)` ``0Expressions` Expression : AssignExpression | AssignExpression `,` Expression AssignExpression : ConditionalExpression | ConditionalExpression `=` AssignExpression | ConditionalExpression `+=` AssignExpression | ConditionalExpression `-=` AssignExpression | ConditionalExpression `*=` AssignExpression | ConditionalExpression `/=` AssignExpression | ConditionalExpression `%=` AssignExpression | ConditionalExpression `&=` AssignExpression | ConditionalExpression `|=` AssignExpression | ConditionalExpression `^=` AssignExpression | ConditionalExpression `~=` AssignExpression | ConditionalExpression `<<=` AssignExpression | ConditionalExpression `>>=` AssignExpression | ConditionalExpression `>>>=` AssignExpression ConditionalExpression : OrOrExpression | OrOrExpression `?` Expression `:` ConditionalExpression OrOrExpression : AndAndExpression | AndAndExpression `||` AndAndExpression AndAndExpression : OrExpression | OrExpression `&&` OrExpression OrExpression : XorExpression | XorExpression `|` XorExpression XorExpression : AndExpression | AndExpression `^` AndExpression AndExpression : EqualExpression | EqualExpression `&` EqualExpression EqualExpression : RelExpression | RelExpression `==` RelExpression | RelExpression `!=` RelExpression | RelExpression `===` RelExpression | RelExpression `!==` RelExpression RelExpression : ShiftExpression | ShiftExpression `<` ShiftExpression | ShiftExpression `<=` ShiftExpression | ShiftExpression `>` ShiftExpression | ShiftExpression `>=` ShiftExpression | ShiftExpression `!<>=` ShiftExpression | ShiftExpression `!<>` ShiftExpression | ShiftExpression `<>` ShiftExpression | ShiftExpression `<>=` ShiftExpression | ShiftExpression `!>` ShiftExpression | ShiftExpression `!>=` ShiftExpression | ShiftExpression `!<` ShiftExpression | ShiftExpression `!<=` ShiftExpression | ShiftExpression `in` ShiftExpression ShiftExpression : AddExpression | AddExpression `<<` AddExpression | AddExpression `>>` AddExpression | AddExpression `>>>` AddExpression AddExpression : MulExpression | MulExpression `+` MulExpression | MulExpression `-` MulExpression | MulExpression `~` MulExpression MulExpression : UnaryExpression | UnaryExpression `*` UnaryExpression | UnaryExpression `/` UnaryExpression | UnaryExpression `%` UnaryExpression UnaryExpression : PostfixExpression | `&` UnaryExpression | `++` UnaryExpression | `--` UnaryExpression | `*` UnaryExpression | `-` UnaryExpression | `+` UnaryExpression | `!` UnaryExpression | `~` UnaryExpression | `delete` UnaryExpression | NewExpression | `(` Type `)` UnaryExpression | `(` Type `)` `.` Identifier PostfixExpression : PrimaryExpression | PostfixExpression `.` Identifier | PostfixExpression `++` | PostfixExpression `--` | PostfixExpression `(` ArgumentList `)` | PostfixExpression `[` Expression `]` PrimaryExpression : Identifier | `this` | `super` | `null` | `true` | `false` | NumericLiteral | StringLiteral | AssertExpression | Type `.` Identifier AssertExpression : `assert (` Expression `)` ArgumentList : AssignExpression | AssignExpression `,` ArgumentList NewExpression : `new` BasicType Stars `[` AssignExpression `]` Declarator | `new` BasicType Stars `(` ArgumentList `)` | `new` BasicType Stars | `new` `(` ArgumentList `)` BasicType Stars `[` AssignExpression `]` Declarator | `new` `(` ArgumentList `)` BasicType Stars `(` ArgumentList `)` | `new` `(` ArgumentList `)` BasicType Stars Stars : nothing | `*` | `*` Stars ``0Statements` Statement : LabeledStatement | BlockStatement | ExpressionStatement | DeclarationStatement | IfStatement | DebugStatement | VersionStatement | WhileStatement | DoWhileStatement | ForStatement | SwitchStatement | CaseStatement | DefaultStatement | ContinueStatement | BreakStatement | ReturnStatement | GotoStatement | WithStatement | SynchronizeStatement | TryStatement | ThrowStatement | AsmStatement LabelledStatement : Identifier `:` Statement BlockStatement : `{` `}` | `{` StatementList `}` StatementList : Statement | Statement StatementList ExpressionStatement : Expression `;` DeclarationStatement : Type IdentifierList `;` IdentifierList : Variable | Variable `,` IdentifierList Variable : Identifier | Identifier `=` AssignmentExpression IfStatement : `if (` Expression `)` Statement | `if (` Expression `)` Statement `else` Statement WhileStatement : `while` `(` Expression `)` Statement DoStatement : `do` Statement ` while (` Expression `)` ForStatement : `for` `(`Initialize`;` Test`;` Increment`)` Statement Initialize : empty | Expression | Declaration Test : empty | Expression Increment : empty | Expression SwitchStatement : `switch` `(` Expression `)` BlockStatement CaseStatement : `case` Expression `:` Statement DefaultStatement : `default:` Statement ContinueStatement : `continue;` | `continue` Identifier `;` BreakStatement : `break;` | `break` Identifier `;` ReturnStatement : `return;` | `return` Expression `;` GotoStatement : `goto` Identifier `;` WithStatement : `with` `(` Expression `)` BlockStatement SynchronizeStatement : `synchronized` Statement | `synchronized (` Expression `)` Statement TryStatement : `try` BlockStatement Catches | `try` BlockStatement Catches `finally` BlockStatement | `try` BlockStatement `finally` BlockStatement Catches : LastCatch | Catch | Catch Catches LastCatch : `catch` BlockStatement Catch : `catch` `(` Parameter `)` BlockStatement ThrowStatement : `throw` Expression `;` AsmStatement : `asm` `{` `}` | `asm` `{` AsmInstructionList `}` AsmInstructionList : AsmInstruction `;` | AsmInstruction `;` AsmInstructionList ``0Structs, Unions, Enums` AggregateDeclaration : Tag `{` DeclDefs `}` | Tag Identifier `{` DeclDefs `}` | Tag Identifier `;` Tag : `struct` | `union` EnumDeclaration : `enum` identifier `{` EnumMembers `}` | `enum` `{` EnumMembers `}` | `enum` identifier `;` EnumMembers : EnumMember | EnumMember `,` | EnumMember `,` EnumMembers EnumMember : Identifier | Identifier `=` Expression ``0Classes` ClassDeclaration : `class` Identifier [SuperClass {`,` InterfaceClass }] ClassBody SuperClass : `:` Identifier InterfaceClass : Identifier ClassBody : `{` Declarations `}` ``0Interfaces` InterfaceDeclaration : `interface` Identifier InterfaceBody | `interface` Identifier `:` SuperInterfaces InterfaceBody SuperInterfaces : Identifier | Identifier `,` SuperInterfaces InterfaceBody : `{` DeclDefs `}` ``0Templates` TemplateDeclaration : `template` TemplateIdentifier `(` TemplateParameterList `)` `{` DeclDefs `}` TemplateIdentifier : Identifier TemplateParameterList : TemplateParameter | TemplateParameter `,` TemplateParameterList TemplateParameter : TypeParameter | ValueParameter TypeParameter : Identifier | Identifier `:` Type ValueParameter : Declaration | Declaration `:` AssignExpression TemplateInstance : `instance` TemplateIdentifer `(` TemplateArgumentList `)` TemplateAliasDeclaration : TemplateInstance AliasIdentifier `;` AliasIdentifier : Identifier TemplateArgumentList : TemplateArgument | TemplateArgument `,` TemplateArgumentList TemplateArgument : Type | AssignExpression