Browsable C♯ 1.0 Grammar

CC-BY

Grammar extracted by Vadim Zaytsev, see the Grammar Zoo entry for details: csharp/v1.x/iso-23270-2003/extracted
Source used for this grammar: ISO/IEC 23270:2003(E), Information technology — Programming languages — C#, 1st edition, 2003
Source used for this grammar: Vadim Zaytsev, ECMA-334 C# Grammar Recovered, 2005 [Online] [GitHub]

Summary

Syntax

compilation-unit ::=
	using-directives? global-attributes? namespace-member-declarations?
namespace-name ::=
	namespace-or-type-name
type-name ::=
	namespace-or-type-name
namespace-or-type-name ::=
	identifier
	namespace-or-type-name "." identifier
type ::=
	value-type
	reference-type
value-type ::=
	struct-type
	enum-type
struct-type ::=
	type-name
	simple-type
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"
enum-type ::=
	type-name
reference-type ::=
	class-type
	interface-type
	array-type
	delegate-type
class-type ::=
	type-name
	"object"
	"string"
interface-type ::=
	type-name
delegate-type ::=
	type-name
variable-reference ::=
	expression
argument-list ::=
	argument
	argument-list "," argument
argument ::=
	expression
	"ref" variable-reference
	"out" variable-reference
primary-expression ::=
	array-creation-expression
	primary-no-array-creation-expression
primary-no-array-creation-expression ::=
	literal
	simple-name
	parenthesized-expression
	member-access
	invocation-expression
	element-access
	this-access
	base-access
	post-increment-expression
	post-decrement-expression
	object-creation-expression
	delegate-creation-expression
	typeof-expression
	checked-expression
	unchecked-expression
simple-name ::=
	identifier
parenthesized-expression ::=
	"(" expression ")"
member-access ::=
	primary-expression "." identifier
	predefined-type "." identifier
predefined-type ::=
	"bool"
	"byte"
	"char"
	"decimal"
	"double"
	"float"
	"int"
	"long"
	"object"
	"sbyte"
	"short"
	"string"
	"uint"
	"ulong"
	"ushort"
invocation-expression ::=
	primary-expression "(" argument-list? ")"
element-access ::=
	primary-no-array-creation-expression "[" expression-list "]"
expression-list ::=
	expression
	expression-list "," expression
this-access ::=
	"this"
base-access ::=
	"base" "." identifier
	"base" "[" expression-list "]"
post-increment-expression ::=
	primary-expression "++"
post-decrement-expression ::=
	primary-expression "--"
object-creation-expression ::=
	"new" type "(" argument-list? ")"
array-creation-expression ::=
	"new" non-array-type "[" expression-list "]" rank-specifiers? array-initializer?
	"new" array-type array-initializer
delegate-creation-expression ::=
	"new" delegate-type "(" expression ")"
typeof-expression ::=
	"typeof" "(" type ")"
	"typeof" "(" "void" ")"
checked-expression ::=
	"checked" "(" expression ")"
unchecked-expression ::=
	"unchecked" "(" expression ")"
unary-expression ::=
	primary-expression
	"+" unary-expression
	"-" unary-expression
	"!" unary-expression
	"~" unary-expression
	"*" unary-expression
	pre-increment-expression
	pre-decrement-expression
	cast-expression
pre-increment-expression ::=
	"++" unary-expression
pre-decrement-expression ::=
	"--" unary-expression
cast-expression ::=
	"(" type ")" unary-expression
multiplicative-expression ::=
	unary-expression
	multiplicative-expression "*" unary-expression
	multiplicative-expression "/" unary-expression
	multiplicative-expression "%" unary-expression
additive-expression ::=
	multiplicative-expression
	additive-expression "+" multiplicative-expression
	additive-expression "-" multiplicative-expression
shift-expression ::=
	additive-expression
	shift-expression "<<" additive-expression
	shift-expression ">>" additive-expression
relational-expression ::=
	shift-expression
	relational-expression "<" shift-expression
	relational-expression ">" shift-expression
	relational-expression "<=" shift-expression
	relational-expression ">=" shift-expression
	relational-expression "is" type
	relational-expression "as" type
equality-expression ::=
	relational-expression
	equality-expression "==" relational-expression
	equality-expression "!=" relational-expression
and-expression ::=
	equality-expression
	and-expression "&" equality-expression
exclusive-or-expression ::=
	and-expression
	exclusive-or-expression "^" and-expression
inclusive-or-expression ::=
	exclusive-or-expression
	inclusive-or-expression "|" exclusive-or-expression
conditional-and-expression ::=
	inclusive-or-expression
	conditional-and-expression "&&" inclusive-or-expression
conditional-or-expression ::=
	conditional-and-expression
	conditional-or-expression "||" conditional-and-expression
conditional-expression ::=
	conditional-or-expression
	conditional-or-expression "?" expression ":" expression
assignment ::=
	unary-expression assignment-operator expression
assignment-operator ::=
	"="
	"+="
	"-="
	"*="
	"/="
	"%="
	"&="
	"|="
	"^="
	"<<="
	">>="
expression ::=
	conditional-expression
	assignment
constant-expression ::=
	expression
boolean-expression ::=
	expression
statement ::=
	labeled-statement
	declaration-statement
	embedded-statement
embedded-statement ::=
	block
	empty-statement
	expression-statement
	selection-statement
	iteration-statement
	jump-statement
	try-statement
	checked-statement
	unchecked-statement
	lock-statement
	using-statement
block ::=
	"{" statement-list? "}"
statement-list ::=
	statement
	statement-list statement
empty-statement ::=
	";"
labeled-statement ::=
	identifier ":" statement
declaration-statement ::=
	local-variable-declaration ";"
	local-constant-declaration ";"
local-variable-declaration ::=
	type local-variable-declarators
local-variable-declarators ::=
	local-variable-declarator
	local-variable-declarators "," local-variable-declarator
local-variable-declarator ::=
	identifier
	identifier "=" local-variable-initializer
local-variable-initializer ::=
	expression
	array-initializer
local-constant-declaration ::=
	"const" type constant-declarators
constant-declarators ::=
	constant-declarator
	constant-declarators "," constant-declarator
constant-declarator ::=
	identifier "=" constant-expression
expression-statement ::=
	statement-expression ";"
statement-expression ::=
	invocation-expression
	object-creation-expression
	assignment
	post-increment-expression
	post-decrement-expression
	pre-increment-expression
	pre-decrement-expression
selection-statement ::=
	if-statement
	switch-statement
if-statement ::=
	"if" "(" boolean-expression ")" embedded-statement
	"if" "(" boolean-expression ")" embedded-statement "else" embedded-statement
switch-statement ::=
	"switch" "(" expression ")" switch-block
switch-block ::=
	"{" switch-sections? "}"
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" constant-expression ":"
	"default" ":"
iteration-statement ::=
	while-statement
	do-statement
	for-statement
	foreach-statement
while-statement ::=
	"while" "(" boolean-expression ")" embedded-statement
do-statement ::=
	"do" embedded-statement "while" "(" boolean-expression ")" ";"
for-statement ::=
	"for" "(" for-initializer? ";" for-condition? ";" for-iterator? ")" embedded-statement
for-initializer ::=
	local-variable-declaration
	statement-expression-list
for-condition ::=
	boolean-expression
for-iterator ::=
	statement-expression-list
statement-expression-list ::=
	statement-expression
	statement-expression-list "," statement-expression
foreach-statement ::=
	"foreach" "(" type identifier "in" expression ")" embedded-statement
jump-statement ::=
	break-statement
	continue-statement
	goto-statement
	return-statement
	throw-statement
break-statement ::=
	"break" ";"
continue-statement ::=
	"continue" ";"
goto-statement ::=
	"goto" identifier ";"
	"goto" "case" constant-expression ";"
	"goto" "default" ";"
return-statement ::=
	"return" expression? ";"
throw-statement ::=
	"throw" expression? ";"
try-statement ::=
	"try" block catch-clauses
	"try" block finally-clause
	"try" block catch-clauses finally-clause
catch-clauses ::=
	specific-catch-clauses general-catch-clause?
	specific-catch-clauses? general-catch-clause
specific-catch-clauses ::=
	specific-catch-clause
	specific-catch-clauses specific-catch-clause
specific-catch-clause ::=
	"catch" "(" class-type identifier? ")" block
general-catch-clause ::=
	"catch" block
finally-clause ::=
	"finally" block
checked-statement ::=
	"checked" block
unchecked-statement ::=
	"unchecked" block
lock-statement ::=
	"lock" "(" expression ")" embedded-statement
using-statement ::=
	"using" "(" resource-acquisition ")" embedded-statement
resource-acquisition ::=
	local-variable-declaration
	expression
namespace-declaration ::=
	"namespace" qualified-identifier namespace-body ";"?
qualified-identifier ::=
	identifier
	qualified-identifier "." identifier
namespace-body ::=
	"{" using-directives? namespace-member-declarations? "}"
using-directives ::=
	using-directive
	using-directives using-directive
using-directive ::=
	using-alias-directive
	using-namespace-directive
using-alias-directive ::=
	"using" identifier "=" namespace-or-type-name ";"
using-namespace-directive ::=
	"using" namespace-name ";"
namespace-member-declarations ::=
	namespace-member-declaration
	namespace-member-declarations namespace-member-declaration
namespace-member-declaration ::=
	namespace-declaration
	type-declaration
type-declaration ::=
	class-declaration
	struct-declaration
	interface-declaration
	enum-declaration
	delegate-declaration
class-declaration ::=
	attributes? class-modifiers? "class" identifier class-base? class-body ";"?
class-modifiers ::=
	class-modifier
	class-modifiers class-modifier
class-modifier ::=
	"new"
	"public"
	"protected"
	"internal"
	"private"
	"abstract"
	"sealed"
class-base ::=
	":" class-type
	":" interface-type-list
	":" class-type "," interface-type-list
interface-type-list ::=
	interface-type
	interface-type-list "," interface-type
class-body ::=
	"{" class-member-declarations? "}"
class-member-declarations ::=
	class-member-declaration
	class-member-declarations class-member-declaration
class-member-declaration ::=
	constant-declaration
	field-declaration
	method-declaration
	property-declaration
	event-declaration
	indexer-declaration
	operator-declaration
	constructor-declaration
	destructor-declaration
	static-constructor-declaration
	type-declaration
constant-declaration ::=
	attributes? constant-modifiers? "const" type constant-declarators ";"
constant-modifiers ::=
	constant-modifier
	constant-modifiers constant-modifier
constant-modifier ::=
	"new"
	"public"
	"protected"
	"internal"
	"private"
field-declaration ::=
	attributes? field-modifiers? type variable-declarators ";"
field-modifiers ::=
	field-modifier
	field-modifiers field-modifier
field-modifier ::=
	"new"
	"public"
	"protected"
	"internal"
	"private"
	"static"
	"readonly"
	"volatile"
variable-declarators ::=
	variable-declarator
	variable-declarators "," variable-declarator
variable-declarator ::=
	identifier
	identifier "=" variable-initializer
method-declaration ::=
	method-header method-body
method-header ::=
	attributes? method-modifiers? return-type member-name "(" formal-parameter-list? ")"
method-modifiers ::=
	method-modifier
	method-modifiers method-modifier
method-modifier ::=
	"new"
	"public"
	"protected"
	"internal"
	"private"
	"static"
	"virtual"
	"sealed"
	"override"
	"abstract"
	"extern"
return-type ::=
	type
	"void"
member-name ::=
	identifier
	interface-type "." identifier
method-body ::=
	block
	";"
formal-parameter-list ::=
	fixed-parameters
	fixed-parameters "," parameter-array
	parameter-array
fixed-parameters ::=
	fixed-parameter
	fixed-parameters "," fixed-parameter
fixed-parameter ::=
	attributes? parameter-modifier? type identifier
parameter-modifier ::=
	"ref"
	"out"
parameter-array ::=
	attributes? "params" array-type identifier
property-declaration ::=
	attributes? property-modifiers? type member-name "{" accessor-declarations "}"
property-modifiers ::=
	property-modifier
	property-modifiers property-modifier
property-modifier ::=
	"new"
	"public"
	"protected"
	"internal"
	"private"
	"static"
	"virtual"
	"sealed"
	"override"
	"abstract"
	"extern"
accessor-declarations ::=
	get-accessor-declaration set-accessor-declaration?
	set-accessor-declaration get-accessor-declaration?
get-accessor-declaration ::=
	attributes? "get" accessor-body
set-accessor-declaration ::=
	attributes? "set" accessor-body
accessor-body ::=
	block
	";"
event-declaration ::=
	attributes? event-modifiers? "event" type variable-declarators ";"
	attributes? event-modifiers? "event" type member-name "{" event-accessor-declarations "}"
event-modifiers ::=
	event-modifier
	event-modifiers event-modifier
event-modifier ::=
	"new"
	"public"
	"protected"
	"internal"
	"private"
	"static"
	"virtual"
	"sealed"
	"override"
	"abstract"
	"extern"
event-accessor-declarations ::=
	add-accessor-declaration remove-accessor-declaration
	remove-accessor-declaration add-accessor-declaration
add-accessor-declaration ::=
	attributes? "add" block
remove-accessor-declaration ::=
	attributes? "remove" block
indexer-declaration ::=
	attributes? indexer-modifiers? indexer-declarator "{" accessor-declarations "}"
indexer-modifiers ::=
	indexer-modifier
	indexer-modifiers indexer-modifier
indexer-modifier ::=
	"new"
	"public"
	"protected"
	"internal"
	"private"
	"virtual"
	"sealed"
	"override"
	"abstract"
	"extern"
indexer-declarator ::=
	type "this" "[" formal-parameter-list "]"
	type interface-type "." "this" "[" formal-parameter-list "]"
operator-declaration ::=
	attributes? operator-modifiers operator-declarator operator-body
operator-modifiers ::=
	operator-modifier
	operator-modifiers operator-modifier
operator-modifier ::=
	"public"
	"static"
	"extern"
operator-declarator ::=
	unary-operator-declarator
	binary-operator-declarator
	conversion-operator-declarator
unary-operator-declarator ::=
	type "operator" overloadable-unary-operator "(" type identifier ")"
overloadable-unary-operator ::=
	"+"
	"-"
	"!"
	"~"
	"++"
	"--"
	"true"
	"false"
binary-operator-declarator ::=
	type "operator" overloadable-binary-operator "(" type identifier "," type identifier ")"
overloadable-binary-operator ::=
	"+"
	"-"
	"*"
	"/"
	"%"
	"&"
	"|"
	"^"
	"<<"
	">>"
	"=="
	"!="
	">"
	"<"
	">="
	"<="
conversion-operator-declarator ::=
	"implicit" "operator" type "(" type identifier ")"
	"explicit" "operator" type "(" type identifier ")"
operator-body ::=
	block
	";"
constructor-declaration ::=
	attributes? constructor-modifiers? constructor-declarator constructor-body
constructor-modifiers ::=
	constructor-modifier
	constructor-modifiers constructor-modifier
constructor-modifier ::=
	"public"
	"protected"
	"internal"
	"private"
	"extern"
constructor-declarator ::=
	identifier "(" formal-parameter-list? ")" constructor-initializer?
constructor-initializer ::=
	":" "base" "(" argument-list? ")"
	":" "this" "(" argument-list? ")"
constructor-body ::=
	block
	";"
static-constructor-declaration ::=
	attributes? static-constructor-modifiers identifier "(" ")" static-constructor-body
static-constructor-modifiers ::=
	"extern"? "static"
	"static" "extern"?
static-constructor-body ::=
	block
	";"
destructor-declaration ::=
	attributes? "extern"? "~" identifier "(" ")" destructor-body
destructor-body ::=
	block
	";"
struct-declaration ::=
	attributes? struct-modifiers? "struct" identifier struct-interfaces? struct-body ";"?
struct-modifiers ::=
	struct-modifier
	struct-modifiers struct-modifier
struct-modifier ::=
	"new"
	"public"
	"protected"
	"internal"
	"private"
struct-interfaces ::=
	":" interface-type-list
struct-body ::=
	"{" struct-member-declarations? "}"
struct-member-declarations ::=
	struct-member-declaration
	struct-member-declarations struct-member-declaration
struct-member-declaration ::=
	constant-declaration
	field-declaration
	method-declaration
	property-declaration
	event-declaration
	indexer-declaration
	operator-declaration
	constructor-declaration
	static-constructor-declaration
	type-declaration
array-type ::=
	non-array-type rank-specifiers
non-array-type ::=
	type
rank-specifiers ::=
	rank-specifier
	rank-specifiers rank-specifier
rank-specifier ::=
	"[" dim-separators? "]"
dim-separators ::=
	","
	dim-separators ","
array-initializer ::=
	"{" variable-initializer-list? "}"
	"{" variable-initializer-list "," "}"
variable-initializer-list ::=
	variable-initializer
	variable-initializer-list "," variable-initializer
variable-initializer ::=
	expression
	array-initializer
interface-declaration ::=
	attributes? interface-modifiers? "interface" identifier interface-base? interface-body ";"?
interface-modifiers ::=
	interface-modifier
	interface-modifiers interface-modifier
interface-modifier ::=
	"new"
	"public"
	"protected"
	"internal"
	"private"
interface-base ::=
	":" interface-type-list
interface-body ::=
	"{" interface-member-declarations? "}"
interface-member-declarations ::=
	interface-member-declaration
	interface-member-declarations interface-member-declaration
interface-member-declaration ::=
	interface-method-declaration
	interface-property-declaration
	interface-event-declaration
	interface-indexer-declaration
interface-method-declaration ::=
	attributes? "new"? return-type identifier "(" formal-parameter-list? ")" ";"
interface-property-declaration ::=
	attributes? "new"? type identifier "{" interface-accessors "}"
interface-accessors ::=
	attributes? "get" ";"
	attributes? "set" ";"
	attributes? "get" ";" attributes? "set" ";"
	attributes? "set" ";" attributes? "get" ";"
interface-event-declaration ::=
	attributes "new"? "event" type identifier ";"
interface-indexer-declaration ::=
	attributes "new"? type "this" "[" formal-parameter-list "]" "{" interface-accessors "}"
enum-declaration ::=
	attributes? enum-modifiers? "enum" identifier enum-base? enum-body ";"?
enum-base ::=
	":" integral-type
enum-body ::=
	"{" enum-member-declarations? "}"
	"{" enum-member-declarations "," "}"
enum-modifiers ::=
	enum-modifier
	enum-modifiers enum-modifier
enum-modifier ::=
	"new"
	"public"
	"protected"
	"internal"
	"private"
enum-member-declarations ::=
	enum-member-declaration
	enum-member-declarations "," enum-member-declaration
enum-member-declaration ::=
	attributes? identifier
	attributes? identifier "=" constant-expression
delegate-declaration ::=
	attributes? delegate-modifiers? "delegate" type identifier "(" formal-parameter-list? ")" ";"
delegate-modifiers ::=
	delegate-modifier
	delegate-modifiers delegate-modifier
delegate-modifier ::=
	"new"
	"public"
	"protected"
	"internal"
	"private"
global-attributes ::=
	global-attribute-sections
global-attribute-sections ::=
	global-attribute-section
	global-attribute-sections global-attribute-section
global-attribute-section ::=
	"[" global-attribute-target-specifier attribute-list "]"
	"[" global-attribute-target-specifier attribute-list "," "]"
global-attribute-target-specifier ::=
	global-attribute-target ":"
global-attribute-target ::=
	"assembly"
attributes ::=
	attribute-sections
attribute-sections ::=
	attribute-section
	attribute-sections attribute-section
attribute-section ::=
	"[" attribute-target-specifier? attribute-list "]"
	"[" attribute-target-specifier? attribute-list "," "]"
attribute-target-specifier ::=
	attribute-target ":"
attribute-target ::=
	"field"
	"event"
	"method"
	"module"
	"param"
	"property"
	"return"
	"type"
attribute-list ::=
	attribute
	attribute-list "," attribute
attribute ::=
	attribute-name attribute-arguments?
attribute-name ::=
	type-name
attribute-arguments ::=
	"(" positional-argument-list? ")"
	"(" positional-argument-list "," named-argument-list ")"
	"(" named-argument-list ")"
positional-argument-list ::=
	positional-argument
	positional-argument-list "," positional-argument
positional-argument ::=
	attribute-argument-expression
named-argument-list ::=
	named-argument
	named-argument-list "," named-argument
named-argument ::=
	identifier "=" attribute-argument-expression
attribute-argument-expression ::=
	expression

GrammarLabMaintained by Dr. Vadim Zaytsev a.k.a. @grammarware. Last updated in September 2015. []