For comments/corrections/suggestions
A# Grammar
This file was generated directly from an LALR grammar. It was
derived from the existing specifications for C#, Version 1.0
and Generics, Version 0.21. Asml Extensions are in red.
1 Lexical Grammar
1.1 Macros
1.1.1 Line terminators (A.1.1)
1.1.2 Whitespace (A.1.2)
1.1.3 Unicode character escape sequence (A.1.5)
1.1.4 Identifier (A.1.6)
1.1.5 Integer literal (A.1.8)
1.1.6 Real_literal (A.1.8)
1.1.7 Character_literal (A.1.8)
1.1.8 String_literal (A.1.8)
1.2 CSharp Scanner
1.3 Comments (A.1.3)
1.4 Documentation
1.5 Pre-Processing
1.6 Keywords
2 Syntactical Grammar
2.1 Literals (A 1.8)
2.2 Names
2.3 Empty
2.4 Types
2.4.1 Predefined Types
2.4.2 Type Expressions
2.4.3 Type Paramater
2.5 Expressions
2.5.1 Arrays (A.12)
2.5.2 Argument Lists
2.5.3 Simple Expression (also used for types)
2.5.4 Primary Expression
2.5.5 Member Access
2.5.6 Invocation Expression
2.5.7 Parenthesized Expression
2.5.8 Element Access or Filter Expression
2.5.9 This and Base Access
2.5.10 Post Increment
2.5.11 Object or Delegate Creation Expression
2.5.12 Data creation Expression
2.5.13 Array Creation expr
2.5.14 Typeof, Checked and Unchecked Expression
2.5.15 Cast Expression
2.5.16 Not and Complement Expression
2.5.17 Pre-Increment and Post-Increment
2.5.18 Unary Expression
2.5.19 Arithmetic and Relational exprs
2.5.20 Conditional Expression
2.5.21 Assignments
2.5.22 Expressions (Top Level)
2.5.23 Expression List
2.6 Statements
2.6.1 Expression Statements
2.6.2 Selection Statements
2.6.3 Iteration Statements
2.6.4 While and until Statements
2.6.5 For Statements
2.6.6 Foreach Statements
2.6.7 Choose Statements
2.6.8 Parallel and Transacted
2.6.9 Jump Statements
2.6.10 Exception Handling Statements
2.6.11 Checked and Unchecked Statements
2.6.12 Lock and Using Statements
2.6.13 Assertion Statements
2.6.14 Labelled Statement
2.6.15 Empty Statement
2.6.16 Blocks
2.6.17 Embedded Statements
2.6.18 Local Declaration
2.6.19 Statements (Top Level)
2.7 Declarations
2.7.1 Patterns and Bindings
2.7.2 Attributes
2.7.3 Modifiers
2.7.4 Constants
2.7.5 Fields
2.7.6 Methods
2.7.7 Properties
2.7.8 Type Abbrevations
2.8 Classes (A.2.6)
2.8.1 Events
2.8.2 Indexers
2.8.3 Operators
2.8.4 Constructors
2.8.5 Destructors
2.9 Structs (A.2.7)
2.10 Interfaces (A.2.9)
2.11 Enums (A.2.10)
2.12 Delegates (A.2.11)
2.13 Invariants
2.14 Compilation Unit
1 Lexical Grammar
1.1 Macros
1.1.1 Line terminators (A.1.1)
1.1.2 Whitespace (A.1.2)
1.1.3 Unicode character escape sequence (A.1.5)
1.1.4 Identifier (A.1.6)
1.1.5 Integer literal (A.1.8)
1.1.6 Real_literal (A.1.8)
1.1.7 Character_literal (A.1.8)
1.1.8 String_literal (A.1.8)
1.2 CSharp Scanner
csharp_scanner'{whitespace}+':
'real_literal'
'{real_literal}'
'regular_string_literal'
'{regular_string_literal}'
'verbatim_string_literal'
'{verbatim_string_literal}'
'character_literal'
'{character_literal}'
'identifier'
'{identifier}'
'identifier'
'\@{identifier}|\@'
'/\*' -> push delimited_comment_scanner
'///' -> push documentation_comment_scanner
'//' -> push single_line_comment_scanner
'#' -> push preprocessing_directive_scanner
'['
']'
'('
')'
'{'
'}'
'*'
','
':'
'='
';'
'?'
'.'
'..'
'&'
'+'
'-'
'~'
'!'
'/'
'%'
'|'
'/'
'<'
'<<'
'>'
'<='
'>='
'=='
'!='
'^'
'&&'
'||'
'++'
'--'
'*='
'/='
'%='
'+='
'-='
'<<='
'>>='
'&='
'^='
'|='
'->'
'==>'
'<==>'
1.3 Comments (A.1.3)
delimited_comment_scanner'.':
'{newline}'
'\*/' -> pop
single_line_comment_scanner'.':
'{newline}' -> pop
1.4 Documentation
documentation_comment_scanner'.*':
'{newline}' -> pop
1.5 Pre-Processing
preprocessing_directive_scanner'.':
PIDENTIFIER,'pre_identifier'
'{identifier}'
'pre_line'
'line'
'pre_warning'
'warning'
'pre_error'
'error'
'pre_define'
'define'
'pre_undef'
'undef'
'pre_if'
'if'
'pre_elif'
'elif'
'pre_else'
'else'
'pre_endif'
'endif'
'pre_and'
'&&'
'pre_or'
'\|\|'
'pre_not'
'!'
'pre_true'
'true'
'pre_false'
'false'
'pre_oparen'
'\('
'pre_cparen'
'\)'
'pre_eq'
'=='
'pre_neq'
'!='
'pre_integer_literal'
'{integer_literal}'
'pre_string_literal'
'{regular_string_literal}'
'[ \t]+'
'{newline}' -> pop
1.6 Keywords
'abstract'
'allpublic'
'as'
'assert'
'base'
'bool'
'break'
'byte'
'case'
'catch'
'char'
'checked'
'choose'
'choose1'
'class'
'const'
'contract'
'continue'
'decimal'
'default'
'delegate'
'do'
'double'
'else'
'ensure'
'enum'
'enumof'
'event'
'explicit'
'event'
'extern'
'false'
'finally'
'float'
'for'
'foreach'
'goto'
'if'
'ifnone'
'implicit'
'in'
'int'
'interface'
'internal'
'invariant'
'is'
'let'
'lock'
'long'
'namespace'
'new'
'notin'
'null'
'object'
'operator'
'out'
'override'
'parallel'
'params'
'private'
'primitive'
'protected'
'public'
'readonly'
'structure'
'ref'
'require'
'return'
'sbyte'
'sealed'
'short'
'static'
'string'
'struct'
'switch'
'this'
'throw'
'throws'
'transaction'
'true'
'try'
'type'
'typeof'
'uint'
'ulong'
'unchecked'
'ushort'
'using'
'valueclass'
'var'
'virtual'
'void'
'volatile'
'while'
'where'
2 Syntactical Grammar
startstart:
compilation-unit
2.1 Literals (A 1.8)
literal:
true
false
integer-literal
real-literal
character-literal
regular-string-literal
verbatim-string-literal
null
2.2 Names
name:
qualified-name
simple-name
simple-name:
identifier
identifier < simple-expr-list >
simple-expr-list:
simple-expr
simple-expr-list , simple-expr
qualified-name:
name . simple-name
2.3 Empty
empty:
2.4 Types
2.4.1 Predefined Types
predefined-type:
simple-type
predefined-class-type
void
simple-type:
numeric-type
bool
numeric-type:
integral-type
floating-point-type
decimal
integral-type:
sbyte
byte
short
ushort
int
uint
long
ulong
char
floating-point-type:
float
double
predefined-class-type:
object
string
2.4.2 Type Expressions
type:
simple-expr
primary-type:
type
2.4.3 Type Paramater
type-parameters:
type-parameter
type-parameters , type-parameter
type-parameter-list:
< type-parameters >
type-parameter:
attributesopt identifier
type-param-cons-clauses:
type-param-cons-clause
type-param-cons-clauses type-param-cons-clause
type-param-cons-clause:
where type-parameter : type-param-cons-list
type-param-cons-list:
type-param-cons
type-param-cons-list , type-param-cons
type-param-cons:
simple-expr
new ( )
2.5 Expressions
2.5.1 Arrays (A.12)
dim-separators:
,
dim-separators ,
rank-specifier:
[ dim-separatorsopt ]
rank-specifiers:
rank-specifier
rank-specifiers rank-specifier
variable-initializer:
expr
array-initializer
variable-initializers:
variable-initializer
variable-initializers , variable-initializer
array-initializer:
{ variable-initializersopt }
{ variable-initializers , }
2.5.2 Argument Lists
variable-ref:
expr
argument:
expr
ref variable-ref
out variable-ref
argument-list:
argument
argument-list , argument
2.5.3 Simple Expression (also used for types)
simple-expr:
simple-expr rank-specifiers
simple-expr [ expr-list ]
simple-no-rank-expr
simple-no-rank-expr:
name
predefined-type
< additive-expr-list , additive-expr >
simple-expr !
additive-expr-list:
additive-expr
additive-expr-list , additive-expr
2.5.4 Primary Expression
primary-expr:
array-creation-expr
no-array-creation-expr0
no-array-creation-expr0:
parenthesized-expr
no-array-creation-expr
no-array-creation-expr:
literal
simple-expr
member-access
invocation-expr
element-access-or-filter-expr
this-access
base-access
post-increment-expr
post-decrement-expr
object-or-delegate-creation-expr
typeof-expr
enumof-expr
checked-expr
unchecked-expr
comprehension
anonymous-method-expr
( block )
2.5.5 Member Access
2.5.6 Invocation Expression
invocation-expr:
no-array-creation-expr ( argument-listopt )
2.5.7 Parenthesized Expression
parenthesized-expr:
( expr )
2.5.8 Element Access or Filter Expression
element-access-or-filter-expr:
no-array-creation-expr0 [ expr-list ]
2.5.9 This and Base Access
this-access:
this
base-access:
base . identifier
base [ expr-list ]
2.5.10 Post Increment
post-increment-expr:
no-array-creation-expr ++
post-decrement-expr:
no-array-creation-expr --
2.5.11 Object or Delegate Creation Expression
object-or-delegate-creation-expr:
new simple-no-rank-expr ( argument-listopt )
2.5.12 Data creation Expression
comprehension:
simple-expr { }
simple-expr { expr .. expr }
simple-expr { generator-expr binding-list ifnone-expropt }
simple-expr { binding-list ifnone-expropt }
ifnone-expr:
ifnone expr
generator-expr:
expr :
2.5.13 Array Creation expr
array-creation-expr:
new simple-no-rank-expr [ expr-list ] rank-specifiersopt array-initializeropt
new simple-no-rank-expr [ dim-separatorsopt ] rank-specifiersopt array-initializer
2.5.14 Typeof, Checked and Unchecked Expression
typeof-expr:
typeof ( expr )
enumof-expr:
enumof ( expr )
checked-expr:
checked ( expr )
unchecked-expr:
unchecked ( expr )
anonymous-method-expr:
delegate ( formal-parametersopt ) block
delegate block
2.5.15 Cast Expression
cast-expr:
( expr ) primary-expr
2.5.16 Not and Complement Expression
unary-expr-not-plusminus:
primary-expr
! unary-expr
~ unary-expr
cast-expr
2.5.17 Pre-Increment and Post-Increment
pre-increment-expr:
++ unary-expr
pre-decrement-expr:
-- unary-expr
2.5.18 Unary Expression
unary-expr:
unary-expr-not-plusminus
+ unary-expr
- unary-expr
pre-increment-expr
pre-decrement-expr
2.5.19 Arithmetic and Relational exprs
multiplicative-expr:
unary-expr
multiplicative-expr * unary-expr
multiplicative-expr / unary-expr
multiplicative-expr % unary-expr
additive-expr:
multiplicative-expr
additive-expr + multiplicative-expr
additive-expr - multiplicative-expr
shift-expr:
additive-expr
shift-expr << additive-expr
shift-expr > > additive-expr
shift-expr > additive-expr
relational-expr:
relational-expr < shift-expr
relational-expr > shift-expr
relational-expr <= shift-expr
relational-expr >= shift-expr
relational-expr is simple-expr
relational-expr as simple-expr
mapsto-expr:
relational-expr
relational-expr -> mapsto-expr
equality-expr:
mapsto-expr
equality-expr in mapsto-expr
equality-expr notin mapsto-expr
equality-expr == mapsto-expr
equality-expr != mapsto-expr
and-expr:
equality-expr
and-expr & equality-expr
exclusive-or-expr:
and-expr
exclusive-or-expr ^ and-expr
inclusive-or-expr:
exclusive-or-expr
inclusive-or-expr | exclusive-or-expr
2.5.20 Conditional Expression
conditional-and-expr:
inclusive-or-expr
conditional-and-expr && inclusive-or-expr
conditional-or-expr:
conditional-and-expr
conditional-or-expr || conditional-and-expr
conditional-implies-expr:
conditional-or-expr
conditional-implies-expr ==> conditional-or-expr
conditional-iff-expr:
conditional-implies-expr
conditional-iff-expr <==> conditional-implies-expr
conditional-expr:
conditional-iff-expr
conditional-iff-expr ? expr : expr
2.5.21 Assignments
assignment:
relational-expr assignment-operator expr
assignment-operator:
=
+=
-=
*=
/=
%=
^=
|=
&=
>>=
<<=
2.5.22 Expressions (Top Level)
expr:
conditional-expr
assignment
constant-expression:
expr
boolean-expr:
expr
2.5.23 Expression List
expr-list:
expr
expr-list , expr
2.6 Statements
2.6.1 Expression Statements
statement-expression:
expr
expression-statement:
expr semicolon
2.6.2 Selection Statements
selection-statement:
if-statement
switch-statement
if-statement:
if ( expr ) embedded-statement else embedded-statement
if ( expr ) embedded-statement
switch-statement:
switch ( expr ) switch-block
switch-block:
{ switch-sectionsopt }
switch-sections:
switch-section
switch-sections switch-section
switch-section:
switch-labels statement-list
switch-labels:
switch-label
switch-labels switch-label
switch-label:
case type simple-expr where-clauseopt :
case additive-expr as type where-clauseopt :
case additive-expr where-clauseopt :
default :
2.6.3 Iteration Statements
iteration-statement:
while-statement
do-statement
for-statement
foreach-statement
choose-statement
2.6.4 While and until Statements
while-statement:
while-sel ( boolean-expr ) embedded-statement
do-statement:
do embedded-statement while ( boolean-expr ) semicolon
while-sel:
while
2.6.5 For Statements
for-statement:
for ( for-initializeropt semicolon for-conditionopt semicolon for-iteratoropt ) embedded-statement
for-initializer:
local-variable-decl
statement-expression-list
for-condition:
boolean-expr
for-iterator:
statement-expression-list
statement-expression-list:
statement-expression
statement-expression-list , statement-expression
2.6.6 Foreach Statements
foreach-statement:
foreach-sel parallelopt ( binding-list ) embedded-statement
foreach-sel:
foreach
2.6.7 Choose Statements
choose-statement:
choose ( binding-list ) embedded-statement
choose ( binding-list ) embedded-statement else embedded-statement
choose1 ( binding-list ) embedded-statement
choose1 ( binding-list ) embedded-statement else embedded-statement
2.6.8 Parallel and Transacted
parallel-statement:
parallel embedded-statement
transaction-statement:
transaction embedded-statement
2.6.9 Jump Statements
jump-statement:
break-statement
continue-statement
goto-statement
return-statement
throw-statement
break-statement:
break semicolon
continue-statement:
continue semicolon
goto-statement:
goto identifier semicolon
goto default semicolon
goto case literal semicolon
return-statement:
return expr semicolon
return semicolon
semicolon:
;
2.6.10 Exception Handling Statements
throw-statement:
throw expropt semicolon
try-statement:
try-sel block catch-clauses
try-sel block finally-clause
try-sel block catch-clauses finally-clause
try-sel:
try
catch-clauses:
catch-clause
catch-clauses catch-clause
catch-clause:
catch ( pattern ) block
catch block
finally-clause:
finally block
2.6.11 Checked and Unchecked Statements
checked-statement:
checked block
unchecked-statement:
unchecked block
2.6.12 Lock and Using Statements
lock-statement:
lock ( expr ) embedded-statement
using-statement:
using ( resource-acquisition ) embedded-statement
resource-acquisition:
local-variable-decl
expr
2.6.13 Assertion Statements
assert
invariant
assertion-statement:
assertion-modifier expr expr-if-labelopt semicolon
throws-statement:
throws expropt expr-if-labelopt throws-exception-listopt semicolon
2.6.14 Labelled Statement
labeled-statement:
identifier : statement
2.6.15 Empty Statement
empty-statement:
;
2.6.16 Blocks
block:
{ }
{ statement-list }
statement-list:
statement
statement-list statement
2.6.17 Embedded Statements
embedded-statement:
block
empty-statement
expression-statement
selection-statement
iteration-statement
jump-statement
try-statement
checked-statement
unchecked-statement
lock-statement
using-statement
assertion-statement
throws-statement
parallel-statement
transaction-statement
2.6.18 Local Declaration
decl-statement:
local-variable-decl semicolon
local-variable-decl:
local-variable-mod variable-declarators
local-variable-mod:
var
let
const
readonly
2.6.19 Statements (Top Level)
statement:
labeled-statement
embedded-statement
decl-statement
2.7 Declarations
2.7.1 Patterns and Bindings
pattern-nodecl:
simple-expr
pattern:
type pattern
pattern-nodecl
where-clause:
where conditional-expr
binding:
expr
expr identifier = expr
expr identifier in expr
binding-list:
bindings
bindings:
binding
bindings , binding
2.7.2 Attributes
attributes:
attribute-section
attributes attribute-section
attribute-section:
[ attribute-list ]
attribute-list:
attribute
attribute-list , attribute
attribute:
attribute-name
attribute-name ( attribute-arguments )
attribute-target attribute-name
attribute-target attribute-name ( attribute-arguments )
attribute-name:
name
attribute-target:
attribute-target-name :
attribute-target-name:
identifier
namespace
event
return
type0
attribute-arguments:
empty
positional-argument-list
positional-argument-list , named-argument-list
named-argument-list
positional-argument-list:
positional-argument
positional-argument-list , positional-argument
positional-argument:
conditional-expr
named-argument-list:
named-argument
named-argument-list , named-argument
named-argument:
identifier = expr
parameter-modifier:
empty
ref
out
readonly
params
formal-parameter:
attributesopt formal-parameter1
formal-parameter1:
transactedopt parameter-modifier simple-expr identifier
formal-parameters:
formal-parameter
formal-parameters , formal-parameter
2.7.3 Modifiers
modifiers:
modifier
modifiers modifier
modifier:
abstract
extern
internal
override
private
protected
public
sealed
static
allpublic
virtual
volatile
new
2.7.4 Constants
2.7.5 Fields
variable-declarators:
variable-declarator
variable-declarators , variable-declarator
variable-declarator:
identifier
pattern-nodecl = variable-initializer
field-decl:
attributesopt modifiersopt simple-expr variable-declarators semicolon
attributesopt modifiersopt field-variable-mod simple-expr variable-declarators semicolon
attributesopt modifiersopt field-variable-mod variable-declarators semicolon
field-variable-mod:
const
readonly
var
primitive
2.7.6 Methods
method-decl:
method-header method-body
method-header:
attributesopt modifiersopt simple-expr name ( formal-parametersopt ) type-param-cons-clausesopt
method-body:
method-contractopt block
method-contract
;
method-contract:
method-conditions
method-conditions:
method-condition
method-conditions method-condition
method-condition:
let variable-declarators semicolon
let type variable-declarators semicolon
require expr expr-if-labelopt semicolon
ensure expr expr-if-labelopt semicolon
throws-statement
throws-exception-list:
, expr-list
2.7.7 Properties
property-decl:
attributesopt modifiersopt simple-expr name { accessor-decls }
accessor-decls:
accessor-decl
accessor-decl accessor-decl
accessor-decl:
attributesopt modifiersopt accessor-name method-body
accessor-name:
identifier
2.7.8 Type Abbrevations
type-alias:
attributesopt modifiersopt type0 identifier type-parameter-listopt type-param-cons-clausesopt = type constraintopt semicolon
attributesopt modifiersopt type0 identifier type-parameter-listopt type-param-cons-clausesopt semicolon
constraint:
where boolean-expr
2.8 Classes (A.2.6)
class-decl:
attributesopt modifiersopt class-or-valueclass identifier type-parameter-listopt class-baseopt type-param-cons-clausesopt class-body commaopt
class-or-valueclass:
class
valueclass
structure
case
class-base:
: name
: predefined-class-type
: name , interface-types
: predefined-class-type , interface-types
interface-types:
name
interface-types , name
class-body:
{ class-member-declsopt }
class-member-decls:
class-member-decl
class-member-decls class-member-decl
class-member-decl:
field-decl
method-decl
property-decl
event-decl
indexer-decl
class-decl
struct-decl
operator-decl
constructor-decl
destructor-decl
type-alias
invariant-decl
enum-decl
delegate-decl
interface-decl
default-decl
2.8.1 Events
event-decl:
attributesopt modifiersopt event type variable-declarators semicolon
attributesopt modifiersopt event type member-name { accessor-decls }
member-name:
name
2.8.2 Indexers
indexer-decl:
attributesopt modifiersopt simple-expr name-dotopt this [ formal-parameters ] { accessor-decls }
name-dot:
name .
2.8.3 Operators
operator-decl:
attributesopt modifiersopt primary-type operator overloadable-operator-sel op-type-paramsopt ( operator-param second-paramopt ) type-param-cons-clausesopt method-body
op-type-params:
< type-parameters >
operator-decl:
attributesopt modifiersopt implicit-or-explicit op-type-paramsopt operator primary-type ( operator-param ) type-param-cons-clausesopt method-body
operator-param:
parameter-modifier type identifier
overloadable-operator-sel:
overloadable-operator
overloadable-operator:
-
!
~
++
--
true
false
*
/
%
&
|
^
<<
==
!=
>
<
>=
<=
in
notin
implicit-or-explicit:
implicit
explicit
2.8.4 Constructors
constructor-decl:
attributesopt modifiersopt identifier ( formal-parametersopt ) constructor-initializeropt method-body
constructor-initializer:
: base ( argument-listopt )
: this ( argument-listopt )
2.8.5 Destructors
destructor-decl:
attributesopt modifiersopt ~ identifier ( ) block
2.9 Structs (A.2.7)
struct-decl:
attributesopt modifiersopt struct identifier type-parameter-listopt struct-interfacesopt type-param-cons-clausesopt struct-body commaopt
struct-interfaces:
: interface-types
struct-body:
{ struct-member-declsopt }
struct-member-decls:
struct-member-decl
struct-member-decls struct-member-decl
struct-member-decl:
field-decl
method-decl
property-decl
event-decl
indexer-decl
operator-decl
constructor-decl
type-alias
invariant-decl
class-decl
enum-decl
delegate-decl
2.10 Interfaces (A.2.9)
interface-decl:
attributesopt modifiersopt interface identifier type-parameter-listopt interface-baseopt type-param-cons-clausesopt interface-body commaopt
interface-base:
: interface-types
interface-body:
{ interface-member-declsopt }
interface-member-decls:
interface-member-decl
interface-member-decls interface-member-decl
interface-member-decl:
interface-method-decl
interface-property-decl
interface-event-decl
indexer-decl
interface-method-decl:
method-decl
interface-property-decl:
property-decl
interface-event-decl:
event-decl
interface-member-decl:
invariant-decl
field-decl
2.11 Enums (A.2.10)
enum-decl:
attributesopt modifiersopt enum identifier enum-baseopt enum-body commaopt
enum-base:
: integral-type
enum-body:
{ enum-member-declsopt }
{ enum-member-decls , }
enum-member-decls:
enum-member-decl
enum-member-decls , enum-member-decl
enum-member-decl:
attributesopt identifier
attributesopt identifier = constant-expression
2.12 Delegates (A.2.11)
delegate-decl:
attributesopt modifiersopt delegate type identifier type-parameter-listopt ( formal-parametersopt ) type-param-cons-clausesopt semicolon
2.13 Invariants
invariant-decl:
attributesopt modifiersopt invariant expr expr-if-labelopt semicolon
expr-if-label:
: expr
2.14 Compilation Unit
compilation-unit:
using-directivesopt attributesopt
using-directivesopt namespace-member-decls
namespace-decl:
attributesopt namespace namespace-name namespace-body commaopt
namespace-body:
{ using-directivesopt namespace-member-declsopt }
semicolon using-directivesopt
namespace-name:
name
namespace-member-decls:
namespace-member-decls namespace-member-decl
namespace-member-decl
namespace-member-decl:
namespace-decl
type-decl
using-directives:
using-directive
using-directives using-directive
using-directive:
using-alias-directive
using-namespace-directive
using-alias-directive:
using allpublicopt identifier = namespace-name semicolon
using-namespace-directive:
using allpublicopt namespace-name semicolon
type-decl:
class-decl
method-decl
operator-decl
field-decl
property-decl
invariant-decl
struct-decl
interface-decl
enum-decl
delegate-decl
default-decl
type-alias
default-decl:
default modifier ;