diff --git a/topics/extraction/bnf2bgf/pdf2lll.py b/topics/extraction/bnf2bgf/pdf2lll.py index 2e31de44..31e186a3 100644 --- a/topics/extraction/bnf2bgf/pdf2lll.py +++ b/topics/extraction/bnf2bgf/pdf2lll.py @@ -241,7 +241,7 @@ def massageGrammar(): grammar['keyword'] = [] for kw in knownTerminals: if kw.isalpha(): - grammar['keyword'].append(kw) + grammar['keyword'].append(quote(kw)) return if __name__ == "__main__": diff --git a/topics/grammars/c/iso-9899-1999/Makefile b/topics/grammars/c/iso-9899-1999/Makefile index 446e6771..7a0c2e98 100644 --- a/topics/grammars/c/iso-9899-1999/Makefile +++ b/topics/grammars/c/iso-9899-1999/Makefile @@ -10,4 +10,4 @@ clean: test: make build - ../../../../shared/tools/gdts iso-is-grammar.bgf extracted-grammar.bgf + ../../../../shared/tools/gdt iso-is-grammar.bgf extracted-grammar.bgf diff --git a/topics/grammars/c/iso-9899-1999/extracted-grammar.bgf b/topics/grammars/c/iso-9899-1999/extracted-grammar.bgf index 4fa56ba4..0fba3865 100644 --- a/topics/grammars/c/iso-9899-1999/extracted-grammar.bgf +++ b/topics/grammars/c/iso-9899-1999/extracted-grammar.bgf @@ -1,2474 +1,2473 @@ - - - - primary-expression - - - - identifier - - - constant - - - string-literal - - - - - ( - - - expression - - - ) - - - - - - - - postfix-expression - - - - primary-expression - - - - - postfix-expression - - - [ - - - expression - - - ] - - - - - - - postfix-expression - - - ( - - - - - argument-expression-list - - - - - ) - - - - - - - postfix-expression - - - . - - - identifier - - - - - - - postfix-expression - - - -> - - - identifier - - - - - - - postfix-expression - - - ++ - - - - - - - postfix-expression - - - -- - - - - - - - ( - - - type-name - - - ) - - - { - - - initializer-list - - - } - - - - - - - ( - - - type-name - - - ) - - - { - - - initializer-list - - - , - - - } - - - - - - - - argument-expression-list - - - - assignment-expression - - - - - argument-expression-list - - - , - - - assignment-expression - - - - - - - - unary-expression - - - - postfix-expression - - - - - ++ - - - unary-expression - - - - - - - -- - - - unary-expression - - - - - - - unary-operator - - - cast-expression - - - - - - - sizeof - - - unary-expression - - - - - - - sizeof - - - ( - - - type-name - - - ) - - - - - - - - unary-operator - - - - & - - - * - - - + - - - - - - - ~ - - - ! - - - - - - cast-expression - - - - unary-expression - - - - - ( - - - type-name - - - ) - - - cast-expression - - - - - - - - multiplicative-expression - - - - cast-expression - - - - - multiplicative-expression - - - * - - - cast-expression - - - - - - - multiplicative-expression - - - / - - - cast-expression - - - - - - - multiplicative-expression - - - % - - - cast-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 - - - - - - - - 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 - - - - - - - - logical-AND-expression - - - - inclusive-OR-expression - - - - - logical-AND-expression - - - && - - - inclusive-OR-expression - - - - - - - - logical-OR-expression - - - - logical-AND-expression - - - - - logical-OR-expression - - - || - - - logical-AND-expression - - - - - - - - conditional-expression - - - - logical-OR-expression - - - - - logical-OR-expression - - - ? - - - expression - - - : - - - conditional-expression - - - - - - - - assignment-expression - - - - conditional-expression - - - - - unary-expression - - - assignment-operator - - - assignment-expression - - - - - - - - assignment-operator - - - - = - - - *= - - - /= - - - %= - - - += - - - -= - - - <<= - - - >>= - - - &= - - - ^= - - - |= - - - - - - expression - - - - assignment-expression - - - - - expression - - - , - - - assignment-expression - - - - - - - - constant-expression - - conditional-expression - - - - declaration - - - - declaration-specifiers - - - - - init-declarator-list - - - - - ; - - - - - - declaration-specifiers - - - - - - storage-class-specifier - - - - - declaration-specifiers - - - - - - - - - type-specifier - - - - - declaration-specifiers - - - - - - - - - type-qualifier - - - - - declaration-specifiers - - - - - - - - - function-specifier - - - - - declaration-specifiers - - - - - - - - - - init-declarator-list - - - - init-declarator - - - - - init-declarator-list - - - , - - - init-declarator - - - - - - - - init-declarator - - - - declarator - - - - - declarator - - - = - - - initializer - - - - - - - - storage-class-specifier - - - - typedef - - - extern - - - static - - - auto - - - register - - - - - - type-specifier - - - - void - - - char - - - short - - - int - - - long - - - float - - - double - - - signed - - - unsigned - - - _Bool - - - _Complex - - - _Imaginary - - - struct-or-union-specifier - - - enum-specifier - - - typedef-name - - - - - - struct-or-union-specifier - - - - - - struct-or-union - - - - - identifier - - - - - { - - - struct-declaration-list - - - } - - - - - - - struct-or-union - - - identifier - - - - - - - - struct-or-union - - - - struct - - - union - - - - - - struct-declaration-list - - - - struct-declaration - - - - - struct-declaration-list - - - struct-declaration - - - - - - - - struct-declaration - - - - specifier-qualifier-list - - - struct-declarator-list - - - ; - - - - - - specifier-qualifier-list - - - - - - type-specifier - - - - - specifier-qualifier-list - - - - - - - - - type-qualifier - - - - - specifier-qualifier-list - - - - - - - - - - struct-declarator-list - - - - struct-declarator - - - - - struct-declarator-list - - - , - - - struct-declarator - - - - - - - - struct-declarator - - - - declarator - - - - - - - declarator - - - - - : - - - constant-expression - - - - - - - - enum-specifier - - - - - - enum - - - - - identifier - - - - - { - - - enumerator-list - - - } - - - - - - - enum - - - - - identifier - - - - - { - - - enumerator-list - - - , - - - } - - - - - - - enum - - - identifier - - - - - - - - enumerator-list - - - - enumerator - - - - - enumerator-list - - - , - - - enumerator - - - - - - - - enumerator - - - - enumeration-constant - - - - - enumeration-constant - - - = - - - constant-expression - - - - - - - - type-qualifier - - - - const - - - restrict - - - volatile - - - - - - function-specifier - - inline - - - - declarator - - - - - - pointer - - - - - direct-declarator - - - - - - direct-declarator - - - - identifier - - - - - ( - - - declarator - - - ) - - - - - - - direct-declarator - - - [ - - - - - type-qualifier-list - - - - - - - assignment-expression - - - - - ] - - - - - - - direct-declarator - - - [ - - - static - - - - - type-qualifier-list - - - - - assignment-expression - - - ] - - - - - - - direct-declarator - - - [ - - - type-qualifier-list - - - static - - - assignment-expression - - - ] - - - - - - - direct-declarator - - - [ - - - - - type-qualifier-list - - - - - * - - - ] - - - - - - - direct-declarator - - - ( - - - parameter-type-list - - - ) - - - - - - - direct-declarator - - - ( - - - - - identifier-list - - - - - ) - - - - - - - - pointer - - - - - - * - - - - - type-qualifier-list - - - - - - - - - * - - - - - type-qualifier-list - - - - - pointer - - - - - - - - type-qualifier-list - - - - type-qualifier - - - - - type-qualifier-list - - - type-qualifier - - - - - - - - parameter-type-list - - - - parameter-list - - - - - parameter-list - - - , - - - ... - - - - - - - - parameter-list - - - - parameter-declaration - - - - - parameter-list - - - , - - - parameter-declaration - - - - - - - - parameter-declaration - - - - - - declaration-specifiers - - - declarator - - - - - - - declaration-specifiers - - - - - abstract-declarator - - - - - - - - - - identifier-list - - - - identifier - - - - - identifier-list - - - , - - - identifier - - - - - - - - type-name - - - - specifier-qualifier-list - - - - - abstract-declarator - - - - - - - - abstract-declarator - - - - pointer - - - - - - - pointer - - - - - direct-abstract-declarator - - - - - - - - direct-abstract-declarator - - - - - - ( - - - abstract-declarator - - - ) - - - - - - - - - direct-abstract-declarator - - - - - [ - - - - - assignment-expression - - - - - ] - - - - - - - - - direct-abstract-declarator - - - - - [ - - - * - - - ] - - - - - - - - - direct-abstract-declarator - - - - - ( - - - - - parameter-type-list - - - - - ) - - - - - - - - typedef-name - - identifier - - - - initializer - - - - assignment-expression - - - - - { - - - initializer-list - - - } - - - - - - - { - - - initializer-list - - - , - - - } - - - - - - - - initializer-list - - - - - - - - designation - - - - - initializer - - - - - - - initializer-list - - - , - - - - - designation - - - - - initializer - - - - - - - - designation - - - - designator-list - - - = - - - - - - designator-list - - - - designator - - - - - designator-list - - - designator - - - - - - - - designator - - - - - - [ - - - constant-expression - - - ] - - - - - - - . - - - identifier - - - - - - - - statement - - - - labeled-statement - - - compound-statement - - - expression-statement - - - selection-statement - - - iteration-statement - - - jump-statement - - - - - - labeled-statement - - - - - - identifier - - - : - - - statement - - - - - - - case - - - constant-expression - - - : - - - statement - - - - - - - default - - - : - - - statement - - - - - - - - compound-statement - - - - { - - - - - block-item-list - - - - - } - - - - - - block-item-list - - - - block-item - - - - - block-item-list - - - block-item - - - - - - - - block-item - - - - declaration - - - statement - - - - - - expression-statement - - - - - - expression - - - - - ; - - - - - - selection-statement - - - - - - if - - - ( - - - expression - - - ) - - - statement - - - - - - - if - - - ( - - - expression - - - ) - - - statement - - - else - - - statement - - - - - - - switch - - - ( - - - expression - - - ) - - - statement - - - - - - - - iteration-statement - - - - - - while - - - ( - - - expression - - - ) - - - statement - - - - - - - do - - - statement - - - while - - - ( - - - expression - - - ) - - - ; - - - - - - - for - - - ( - - - - - expression - - - - - ; - - - - - expression - - - - - ; - - - - - expression - - - - - ) - - - statement - - - - - - - for - - - ( - - - declaration - - - - - expression - - - - - ; - - - - - expression - - - - - ) - - - statement - - - - - - - - jump-statement - - - - - - goto - - - identifier - - - ; - - - - - - - continue - - - ; - - - - - - - break - - - ; - - - - - - - return - - - - - expression - - - - - ; - - - - - - - - translation-unit - - - - external-declaration - - - - - translation-unit - - - external-declaration - - - - - - - - external-declaration - - - - function-definition - - - declaration - - - - - - function-definition - - - - declaration-specifiers - - - declarator - - - - - declaration-list - - - - - compound-statement - - - - - - declaration-list - - - - declaration - - - - - declaration-list - - - declaration - - - - - - - - keyword - - - - auto - - - break - - - case - - - char - - - const - - - continue - - - default - - - do - - - double - - - else - - - enum - - - extern - - - float - - - for - - - goto - - - if - - - inline - - - int - - - long - - - register - - - restrict - - - return - - - short - - - signed - - - sizeof - - - static - - - struct - - - switch - - - typedef - - - union - - - unsigned - - - void - - - volatile - - - while - - - - - \ No newline at end of file + + + primary-expression + + + + identifier + + + constant + + + string-literal + + + + + ( + + + expression + + + ) + + + + + + + + postfix-expression + + + + primary-expression + + + + + postfix-expression + + + [ + + + expression + + + ] + + + + + + + postfix-expression + + + ( + + + + + argument-expression-list + + + + + ) + + + + + + + postfix-expression + + + . + + + identifier + + + + + + + postfix-expression + + + -> + + + identifier + + + + + + + postfix-expression + + + ++ + + + + + + + postfix-expression + + + -- + + + + + + + ( + + + type-name + + + ) + + + { + + + initializer-list + + + } + + + + + + + ( + + + type-name + + + ) + + + { + + + initializer-list + + + , + + + } + + + + + + + + argument-expression-list + + + + assignment-expression + + + + + argument-expression-list + + + , + + + assignment-expression + + + + + + + + unary-expression + + + + postfix-expression + + + + + ++ + + + unary-expression + + + + + + + -- + + + unary-expression + + + + + + + unary-operator + + + cast-expression + + + + + + + sizeof + + + unary-expression + + + + + + + sizeof + + + ( + + + type-name + + + ) + + + + + + + + unary-operator + + + + & + + + * + + + + + + + - + + + ~ + + + ! + + + + + + cast-expression + + + + unary-expression + + + + + ( + + + type-name + + + ) + + + cast-expression + + + + + + + + multiplicative-expression + + + + cast-expression + + + + + multiplicative-expression + + + * + + + cast-expression + + + + + + + multiplicative-expression + + + / + + + cast-expression + + + + + + + multiplicative-expression + + + % + + + cast-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 + + + + + + + + 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 + + + + + + + + logical-AND-expression + + + + inclusive-OR-expression + + + + + logical-AND-expression + + + && + + + inclusive-OR-expression + + + + + + + + logical-OR-expression + + + + logical-AND-expression + + + + + logical-OR-expression + + + || + + + logical-AND-expression + + + + + + + + conditional-expression + + + + logical-OR-expression + + + + + logical-OR-expression + + + ? + + + expression + + + : + + + conditional-expression + + + + + + + + assignment-expression + + + + conditional-expression + + + + + unary-expression + + + assignment-operator + + + assignment-expression + + + + + + + + assignment-operator + + + + = + + + *= + + + /= + + + %= + + + += + + + -= + + + <<= + + + >>= + + + &= + + + ^= + + + |= + + + + + + expression + + + + assignment-expression + + + + + expression + + + , + + + assignment-expression + + + + + + + + constant-expression + + conditional-expression + + + + declaration + + + + declaration-specifiers + + + + + init-declarator-list + + + + + ; + + + + + + declaration-specifiers + + + + + + storage-class-specifier + + + + + declaration-specifiers + + + + + + + + + type-specifier + + + + + declaration-specifiers + + + + + + + + + type-qualifier + + + + + declaration-specifiers + + + + + + + + + function-specifier + + + + + declaration-specifiers + + + + + + + + + + init-declarator-list + + + + init-declarator + + + + + init-declarator-list + + + , + + + init-declarator + + + + + + + + init-declarator + + + + declarator + + + + + declarator + + + = + + + initializer + + + + + + + + storage-class-specifier + + + + typedef + + + extern + + + static + + + auto + + + register + + + + + + type-specifier + + + + void + + + char + + + short + + + int + + + long + + + float + + + double + + + signed + + + unsigned + + + _Bool + + + _Complex + + + _Imaginary + + + struct-or-union-specifier + + + enum-specifier + + + typedef-name + + + + + + struct-or-union-specifier + + + + + + struct-or-union + + + + + identifier + + + + + { + + + struct-declaration-list + + + } + + + + + + + struct-or-union + + + identifier + + + + + + + + struct-or-union + + + + struct + + + union + + + + + + struct-declaration-list + + + + struct-declaration + + + + + struct-declaration-list + + + struct-declaration + + + + + + + + struct-declaration + + + + specifier-qualifier-list + + + struct-declarator-list + + + ; + + + + + + specifier-qualifier-list + + + + + + type-specifier + + + + + specifier-qualifier-list + + + + + + + + + type-qualifier + + + + + specifier-qualifier-list + + + + + + + + + + struct-declarator-list + + + + struct-declarator + + + + + struct-declarator-list + + + , + + + struct-declarator + + + + + + + + struct-declarator + + + + declarator + + + + + + + declarator + + + + + : + + + constant-expression + + + + + + + + enum-specifier + + + + + + enum + + + + + identifier + + + + + { + + + enumerator-list + + + } + + + + + + + enum + + + + + identifier + + + + + { + + + enumerator-list + + + , + + + } + + + + + + + enum + + + identifier + + + + + + + + enumerator-list + + + + enumerator + + + + + enumerator-list + + + , + + + enumerator + + + + + + + + enumerator + + + + enumeration-constant + + + + + enumeration-constant + + + = + + + constant-expression + + + + + + + + type-qualifier + + + + const + + + restrict + + + volatile + + + + + + function-specifier + + inline + + + + declarator + + + + + + pointer + + + + + direct-declarator + + + + + + direct-declarator + + + + identifier + + + + + ( + + + declarator + + + ) + + + + + + + direct-declarator + + + [ + + + + + type-qualifier-list + + + + + + + assignment-expression + + + + + ] + + + + + + + direct-declarator + + + [ + + + static + + + + + type-qualifier-list + + + + + assignment-expression + + + ] + + + + + + + direct-declarator + + + [ + + + type-qualifier-list + + + static + + + assignment-expression + + + ] + + + + + + + direct-declarator + + + [ + + + + + type-qualifier-list + + + + + * + + + ] + + + + + + + direct-declarator + + + ( + + + parameter-type-list + + + ) + + + + + + + direct-declarator + + + ( + + + + + identifier-list + + + + + ) + + + + + + + + pointer + + + + + + * + + + + + type-qualifier-list + + + + + + + + + * + + + + + type-qualifier-list + + + + + pointer + + + + + + + + type-qualifier-list + + + + type-qualifier + + + + + type-qualifier-list + + + type-qualifier + + + + + + + + parameter-type-list + + + + parameter-list + + + + + parameter-list + + + , + + + ... + + + + + + + + parameter-list + + + + parameter-declaration + + + + + parameter-list + + + , + + + parameter-declaration + + + + + + + + parameter-declaration + + + + + + declaration-specifiers + + + declarator + + + + + + + declaration-specifiers + + + + + abstract-declarator + + + + + + + + + + identifier-list + + + + identifier + + + + + identifier-list + + + , + + + identifier + + + + + + + + type-name + + + + specifier-qualifier-list + + + + + abstract-declarator + + + + + + + + abstract-declarator + + + + pointer + + + + + + + pointer + + + + + direct-abstract-declarator + + + + + + + + direct-abstract-declarator + + + + + + ( + + + abstract-declarator + + + ) + + + + + + + + + direct-abstract-declarator + + + + + [ + + + + + assignment-expression + + + + + ] + + + + + + + + + direct-abstract-declarator + + + + + [ + + + * + + + ] + + + + + + + + + direct-abstract-declarator + + + + + ( + + + + + parameter-type-list + + + + + ) + + + + + + + + typedef-name + + identifier + + + + initializer + + + + assignment-expression + + + + + { + + + initializer-list + + + } + + + + + + + { + + + initializer-list + + + , + + + } + + + + + + + + initializer-list + + + + + + + + designation + + + + + initializer + + + + + + + initializer-list + + + , + + + + + designation + + + + + initializer + + + + + + + + designation + + + + designator-list + + + = + + + + + + designator-list + + + + designator + + + + + designator-list + + + designator + + + + + + + + designator + + + + + + [ + + + constant-expression + + + ] + + + + + + + . + + + identifier + + + + + + + + statement + + + + labeled-statement + + + compound-statement + + + expression-statement + + + selection-statement + + + iteration-statement + + + jump-statement + + + + + + labeled-statement + + + + + + identifier + + + : + + + statement + + + + + + + case + + + constant-expression + + + : + + + statement + + + + + + + default + + + : + + + statement + + + + + + + + compound-statement + + + + { + + + + + block-item-list + + + + + } + + + + + + block-item-list + + + + block-item + + + + + block-item-list + + + block-item + + + + + + + + block-item + + + + declaration + + + statement + + + + + + expression-statement + + + + + + expression + + + + + ; + + + + + + selection-statement + + + + + + if + + + ( + + + expression + + + ) + + + statement + + + + + + + if + + + ( + + + expression + + + ) + + + statement + + + else + + + statement + + + + + + + switch + + + ( + + + expression + + + ) + + + statement + + + + + + + + iteration-statement + + + + + + while + + + ( + + + expression + + + ) + + + statement + + + + + + + do + + + statement + + + while + + + ( + + + expression + + + ) + + + ; + + + + + + + for + + + ( + + + + + expression + + + + + ; + + + + + expression + + + + + ; + + + + + expression + + + + + ) + + + statement + + + + + + + for + + + ( + + + declaration + + + + + expression + + + + + ; + + + + + expression + + + + + ) + + + statement + + + + + + + + jump-statement + + + + + + goto + + + identifier + + + ; + + + + + + + continue + + + ; + + + + + + + break + + + ; + + + + + + + return + + + + + expression + + + + + ; + + + + + + + + translation-unit + + + + external-declaration + + + + + translation-unit + + + external-declaration + + + + + + + + external-declaration + + + + function-definition + + + declaration + + + + + + function-definition + + + + declaration-specifiers + + + declarator + + + + + declaration-list + + + + + compound-statement + + + + + + declaration-list + + + + declaration + + + + + declaration-list + + + declaration + + + + + + + + keyword + + + + auto + + + break + + + case + + + char + + + const + + + continue + + + default + + + do + + + double + + + else + + + enum + + + extern + + + float + + + for + + + goto + + + if + + + inline + + + int + + + long + + + register + + + restrict + + + return + + + short + + + signed + + + sizeof + + + static + + + struct + + + switch + + + typedef + + + union + + + unsigned + + + void + + + volatile + + + while + + + + + diff --git a/topics/grammars/c/iso-9899-tc2/Makefile b/topics/grammars/c/iso-9899-tc2/Makefile index 446e6771..7a0c2e98 100644 --- a/topics/grammars/c/iso-9899-tc2/Makefile +++ b/topics/grammars/c/iso-9899-tc2/Makefile @@ -10,4 +10,4 @@ clean: test: make build - ../../../../shared/tools/gdts iso-is-grammar.bgf extracted-grammar.bgf + ../../../../shared/tools/gdt iso-is-grammar.bgf extracted-grammar.bgf diff --git a/topics/grammars/c/iso-9899-tc2/extracted-grammar.bgf b/topics/grammars/c/iso-9899-tc2/extracted-grammar.bgf index c5a79f79..9dd4aa47 100644 --- a/topics/grammars/c/iso-9899-tc2/extracted-grammar.bgf +++ b/topics/grammars/c/iso-9899-tc2/extracted-grammar.bgf @@ -1,2471 +1,2470 @@ - - - - primary-expression - - - - identifier - - - constant - - - string-literal - - - - - ( - - - expression - - - ) - - - - - - - - postfix-expression - - - - primary-expression - - - - - postfix-expression - - - [ - - - expression - - - ] - - - - - - - postfix-expression - - - ( - - - - - argument-expression-list - - - - - ) - - - - - - - postfix-expression - - - . - - - identifier - - - - - - - postfix-expression - - - -> - - - identifier - - - - - - - postfix-expression - - - ++ - - - - - - - postfix-expression - - - -- - - - - - - - ( - - - type-name - - - ) - - - { - - - initializer-list - - - } - - - - - - - ( - - - type-name - - - ) - - - { - - - initializer-list - - - , - - - } - - - - - - - - argument-expression-list - - - - assignment-expression - - - - - argument-expression-list - - - , - - - assignment-expression - - - - - - - - unary-expression - - - - postfix-expression - - - - - ++ - - - unary-expression - - - - - - - -- - - - unary-expression - - - - - - - unary-operator - - - cast-expression - - - - - - - sizeof - - - unary-expression - - - - - - - sizeof - - - ( - - - type-name - - - ) - - - - - - - - unary-operator - - - - & - - - * - - - + - - - - - - - ~ - - - ! - - - - - - cast-expression - - - - unary-expression - - - - - ( - - - type-name - - - ) - - - cast-expression - - - - - - - - multiplicative-expression - - - - cast-expression - - - - - multiplicative-expression - - - * - - - cast-expression - - - - - - - multiplicative-expression - - - / - - - cast-expression - - - - - - - multiplicative-expression - - - % - - - cast-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 - - - - - - - - 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 - - - - - - - - logical-AND-expression - - - - inclusive-OR-expression - - - - - logical-AND-expression - - - && - - - inclusive-OR-expression - - - - - - - - logical-OR-expression - - - - logical-AND-expression - - - - - logical-OR-expression - - - || - - - logical-AND-expression - - - - - - - - conditional-expression - - - - logical-OR-expression - - - - - logical-OR-expression - - - ? - - - expression - - - : - - - conditional-expression - - - - - - - - assignment-expression - - - - conditional-expression - - - - - unary-expression - - - assignment-operator - - - assignment-expression - - - - - - - - assignment-operator - - - - = - - - *= - - - /= - - - %= - - - += - - - -= - - - <<= - - - >>= - - - &= - - - ^= - - - |= - - - - - - expression - - - - assignment-expression - - - - - expression - - - , - - - assignment-expression - - - - - - - - constant-expression - - conditional-expression - - - - declaration - - - - declaration-specifiers - - - - - init-declarator-list - - - - - ; - - - - - - declaration-specifiers - - - - - - storage-class-specifier - - - - - declaration-specifiers - - - - - - - - - type-specifier - - - - - declaration-specifiers - - - - - - - - - type-qualifier - - - - - declaration-specifiers - - - - - - - - - function-specifier - - - - - declaration-specifiers - - - - - - - - - - init-declarator-list - - - - init-declarator - - - - - init-declarator-list - - - , - - - init-declarator - - - - - - - - init-declarator - - - - declarator - - - - - declarator - - - = - - - initializer - - - - - - - - storage-class-specifier - - - - typedef - - - extern - - - static - - - auto - - - register - - - - - - type-specifier - - - - void - - - char - - - short - - - int - - - long - - - float - - - double - - - signed - - - unsigned - - - _Bool - - - _Complex - - - struct-or-union-specifier - - - enum-specifier - - - typedef-name - - - - - - struct-or-union-specifier - - - - - - struct-or-union - - - - - identifier - - - - - { - - - struct-declaration-list - - - } - - - - - - - struct-or-union - - - identifier - - - - - - - - struct-or-union - - - - struct - - - union - - - - - - struct-declaration-list - - - - struct-declaration - - - - - struct-declaration-list - - - struct-declaration - - - - - - - - struct-declaration - - - - specifier-qualifier-list - - - struct-declarator-list - - - ; - - - - - - specifier-qualifier-list - - - - - - type-specifier - - - - - specifier-qualifier-list - - - - - - - - - type-qualifier - - - - - specifier-qualifier-list - - - - - - - - - - struct-declarator-list - - - - struct-declarator - - - - - struct-declarator-list - - - , - - - struct-declarator - - - - - - - - struct-declarator - - - - declarator - - - - - - - declarator - - - - - : - - - constant-expression - - - - - - - - enum-specifier - - - - - - enum - - - - - identifier - - - - - { - - - enumerator-list - - - } - - - - - - - enum - - - - - identifier - - - - - { - - - enumerator-list - - - , - - - } - - - - - - - enum - - - identifier - - - - - - - - enumerator-list - - - - enumerator - - - - - enumerator-list - - - , - - - enumerator - - - - - - - - enumerator - - - - enumeration-constant - - - - - enumeration-constant - - - = - - - constant-expression - - - - - - - - type-qualifier - - - - const - - - restrict - - - volatile - - - - - - function-specifier - - inline - - - - declarator - - - - - - pointer - - - - - direct-declarator - - - - - - direct-declarator - - - - identifier - - - - - ( - - - declarator - - - ) - - - - - - - direct-declarator - - - [ - - - - - type-qualifier-list - - - - - - - assignment-expression - - - - - ] - - - - - - - direct-declarator - - - [ - - - static - - - - - type-qualifier-list - - - - - assignment-expression - - - ] - - - - - - - direct-declarator - - - [ - - - type-qualifier-list - - - static - - - assignment-expression - - - ] - - - - - - - direct-declarator - - - [ - - - - - type-qualifier-list - - - - - * - - - ] - - - - - - - direct-declarator - - - ( - - - parameter-type-list - - - ) - - - - - - - direct-declarator - - - ( - - - - - identifier-list - - - - - ) - - - - - - - - pointer - - - - - - * - - - - - type-qualifier-list - - - - - - - - - * - - - - - type-qualifier-list - - - - - pointer - - - - - - - - type-qualifier-list - - - - type-qualifier - - - - - type-qualifier-list - - - type-qualifier - - - - - - - - parameter-type-list - - - - parameter-list - - - - - parameter-list - - - , - - - ... - - - - - - - - parameter-list - - - - parameter-declaration - - - - - parameter-list - - - , - - - parameter-declaration - - - - - - - - parameter-declaration - - - - - - declaration-specifiers - - - declarator - - - - - - - declaration-specifiers - - - - - abstract-declarator - - - - - - - - - - identifier-list - - - - identifier - - - - - identifier-list - - - , - - - identifier - - - - - - - - type-name - - - - specifier-qualifier-list - - - - - abstract-declarator - - - - - - - - abstract-declarator - - - - pointer - - - - - - - pointer - - - - - direct-abstract-declarator - - - - - - - - direct-abstract-declarator - - - - - - ( - - - abstract-declarator - - - ) - - - - - - - - - direct-abstract-declarator - - - - - [ - - - - - assignment-expression - - - - - ] - - - - - - - - - direct-abstract-declarator - - - - - [ - - - * - - - ] - - - - - - - - - direct-abstract-declarator - - - - - ( - - - - - parameter-type-list - - - - - ) - - - - - - - - typedef-name - - identifier - - - - initializer - - - - assignment-expression - - - - - { - - - initializer-list - - - } - - - - - - - { - - - initializer-list - - - , - - - } - - - - - - - - initializer-list - - - - - - - - designation - - - - - initializer - - - - - - - initializer-list - - - , - - - - - designation - - - - - initializer - - - - - - - - designation - - - - designator-list - - - = - - - - - - designator-list - - - - designator - - - - - designator-list - - - designator - - - - - - - - designator - - - - - - [ - - - constant-expression - - - ] - - - - - - - . - - - identifier - - - - - - - - statement - - - - labeled-statement - - - compound-statement - - - expression-statement - - - selection-statement - - - iteration-statement - - - jump-statement - - - - - - labeled-statement - - - - - - identifier - - - : - - - statement - - - - - - - case - - - constant-expression - - - : - - - statement - - - - - - - default - - - : - - - statement - - - - - - - - compound-statement - - - - { - - - - - block-item-list - - - - - } - - - - - - block-item-list - - - - block-item - - - - - block-item-list - - - block-item - - - - - - - - block-item - - - - declaration - - - statement - - - - - - expression-statement - - - - - - expression - - - - - ; - - - - - - selection-statement - - - - - - if - - - ( - - - expression - - - ) - - - statement - - - - - - - if - - - ( - - - expression - - - ) - - - statement - - - else - - - statement - - - - - - - switch - - - ( - - - expression - - - ) - - - statement - - - - - - - - iteration-statement - - - - - - while - - - ( - - - expression - - - ) - - - statement - - - - - - - do - - - statement - - - while - - - ( - - - expression - - - ) - - - ; - - - - - - - for - - - ( - - - - - expression - - - - - ; - - - - - expression - - - - - ; - - - - - expression - - - - - ) - - - statement - - - - - - - for - - - ( - - - declaration - - - - - expression - - - - - ; - - - - - expression - - - - - ) - - - statement - - - - - - - - jump-statement - - - - - - goto - - - identifier - - - ; - - - - - - - continue - - - ; - - - - - - - break - - - ; - - - - - - - return - - - - - expression - - - - - ; - - - - - - - - translation-unit - - - - external-declaration - - - - - translation-unit - - - external-declaration - - - - - - - - external-declaration - - - - function-definition - - - declaration - - - - - - function-definition - - - - declaration-specifiers - - - declarator - - - - - declaration-list - - - - - compound-statement - - - - - - declaration-list - - - - declaration - - - - - declaration-list - - - declaration - - - - - - - - keyword - - - - auto - - - break - - - case - - - char - - - const - - - continue - - - default - - - do - - - double - - - else - - - enum - - - extern - - - float - - - for - - - goto - - - if - - - inline - - - int - - - long - - - register - - - restrict - - - return - - - short - - - signed - - - sizeof - - - static - - - struct - - - switch - - - typedef - - - union - - - unsigned - - - void - - - volatile - - - while - - - - - \ No newline at end of file + + + primary-expression + + + + identifier + + + constant + + + string-literal + + + + + ( + + + expression + + + ) + + + + + + + + postfix-expression + + + + primary-expression + + + + + postfix-expression + + + [ + + + expression + + + ] + + + + + + + postfix-expression + + + ( + + + + + argument-expression-list + + + + + ) + + + + + + + postfix-expression + + + . + + + identifier + + + + + + + postfix-expression + + + -> + + + identifier + + + + + + + postfix-expression + + + ++ + + + + + + + postfix-expression + + + -- + + + + + + + ( + + + type-name + + + ) + + + { + + + initializer-list + + + } + + + + + + + ( + + + type-name + + + ) + + + { + + + initializer-list + + + , + + + } + + + + + + + + argument-expression-list + + + + assignment-expression + + + + + argument-expression-list + + + , + + + assignment-expression + + + + + + + + unary-expression + + + + postfix-expression + + + + + ++ + + + unary-expression + + + + + + + -- + + + unary-expression + + + + + + + unary-operator + + + cast-expression + + + + + + + sizeof + + + unary-expression + + + + + + + sizeof + + + ( + + + type-name + + + ) + + + + + + + + unary-operator + + + + & + + + * + + + + + + + - + + + ~ + + + ! + + + + + + cast-expression + + + + unary-expression + + + + + ( + + + type-name + + + ) + + + cast-expression + + + + + + + + multiplicative-expression + + + + cast-expression + + + + + multiplicative-expression + + + * + + + cast-expression + + + + + + + multiplicative-expression + + + / + + + cast-expression + + + + + + + multiplicative-expression + + + % + + + cast-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 + + + + + + + + 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 + + + + + + + + logical-AND-expression + + + + inclusive-OR-expression + + + + + logical-AND-expression + + + && + + + inclusive-OR-expression + + + + + + + + logical-OR-expression + + + + logical-AND-expression + + + + + logical-OR-expression + + + || + + + logical-AND-expression + + + + + + + + conditional-expression + + + + logical-OR-expression + + + + + logical-OR-expression + + + ? + + + expression + + + : + + + conditional-expression + + + + + + + + assignment-expression + + + + conditional-expression + + + + + unary-expression + + + assignment-operator + + + assignment-expression + + + + + + + + assignment-operator + + + + = + + + *= + + + /= + + + %= + + + += + + + -= + + + <<= + + + >>= + + + &= + + + ^= + + + |= + + + + + + expression + + + + assignment-expression + + + + + expression + + + , + + + assignment-expression + + + + + + + + constant-expression + + conditional-expression + + + + declaration + + + + declaration-specifiers + + + + + init-declarator-list + + + + + ; + + + + + + declaration-specifiers + + + + + + storage-class-specifier + + + + + declaration-specifiers + + + + + + + + + type-specifier + + + + + declaration-specifiers + + + + + + + + + type-qualifier + + + + + declaration-specifiers + + + + + + + + + function-specifier + + + + + declaration-specifiers + + + + + + + + + + init-declarator-list + + + + init-declarator + + + + + init-declarator-list + + + , + + + init-declarator + + + + + + + + init-declarator + + + + declarator + + + + + declarator + + + = + + + initializer + + + + + + + + storage-class-specifier + + + + typedef + + + extern + + + static + + + auto + + + register + + + + + + type-specifier + + + + void + + + char + + + short + + + int + + + long + + + float + + + double + + + signed + + + unsigned + + + _Bool + + + _Complex + + + struct-or-union-specifier + + + enum-specifier + + + typedef-name + + + + + + struct-or-union-specifier + + + + + + struct-or-union + + + + + identifier + + + + + { + + + struct-declaration-list + + + } + + + + + + + struct-or-union + + + identifier + + + + + + + + struct-or-union + + + + struct + + + union + + + + + + struct-declaration-list + + + + struct-declaration + + + + + struct-declaration-list + + + struct-declaration + + + + + + + + struct-declaration + + + + specifier-qualifier-list + + + struct-declarator-list + + + ; + + + + + + specifier-qualifier-list + + + + + + type-specifier + + + + + specifier-qualifier-list + + + + + + + + + type-qualifier + + + + + specifier-qualifier-list + + + + + + + + + + struct-declarator-list + + + + struct-declarator + + + + + struct-declarator-list + + + , + + + struct-declarator + + + + + + + + struct-declarator + + + + declarator + + + + + + + declarator + + + + + : + + + constant-expression + + + + + + + + enum-specifier + + + + + + enum + + + + + identifier + + + + + { + + + enumerator-list + + + } + + + + + + + enum + + + + + identifier + + + + + { + + + enumerator-list + + + , + + + } + + + + + + + enum + + + identifier + + + + + + + + enumerator-list + + + + enumerator + + + + + enumerator-list + + + , + + + enumerator + + + + + + + + enumerator + + + + enumeration-constant + + + + + enumeration-constant + + + = + + + constant-expression + + + + + + + + type-qualifier + + + + const + + + restrict + + + volatile + + + + + + function-specifier + + inline + + + + declarator + + + + + + pointer + + + + + direct-declarator + + + + + + direct-declarator + + + + identifier + + + + + ( + + + declarator + + + ) + + + + + + + direct-declarator + + + [ + + + + + type-qualifier-list + + + + + + + assignment-expression + + + + + ] + + + + + + + direct-declarator + + + [ + + + static + + + + + type-qualifier-list + + + + + assignment-expression + + + ] + + + + + + + direct-declarator + + + [ + + + type-qualifier-list + + + static + + + assignment-expression + + + ] + + + + + + + direct-declarator + + + [ + + + + + type-qualifier-list + + + + + * + + + ] + + + + + + + direct-declarator + + + ( + + + parameter-type-list + + + ) + + + + + + + direct-declarator + + + ( + + + + + identifier-list + + + + + ) + + + + + + + + pointer + + + + + + * + + + + + type-qualifier-list + + + + + + + + + * + + + + + type-qualifier-list + + + + + pointer + + + + + + + + type-qualifier-list + + + + type-qualifier + + + + + type-qualifier-list + + + type-qualifier + + + + + + + + parameter-type-list + + + + parameter-list + + + + + parameter-list + + + , + + + ... + + + + + + + + parameter-list + + + + parameter-declaration + + + + + parameter-list + + + , + + + parameter-declaration + + + + + + + + parameter-declaration + + + + + + declaration-specifiers + + + declarator + + + + + + + declaration-specifiers + + + + + abstract-declarator + + + + + + + + + + identifier-list + + + + identifier + + + + + identifier-list + + + , + + + identifier + + + + + + + + type-name + + + + specifier-qualifier-list + + + + + abstract-declarator + + + + + + + + abstract-declarator + + + + pointer + + + + + + + pointer + + + + + direct-abstract-declarator + + + + + + + + direct-abstract-declarator + + + + + + ( + + + abstract-declarator + + + ) + + + + + + + + + direct-abstract-declarator + + + + + [ + + + + + assignment-expression + + + + + ] + + + + + + + + + direct-abstract-declarator + + + + + [ + + + * + + + ] + + + + + + + + + direct-abstract-declarator + + + + + ( + + + + + parameter-type-list + + + + + ) + + + + + + + + typedef-name + + identifier + + + + initializer + + + + assignment-expression + + + + + { + + + initializer-list + + + } + + + + + + + { + + + initializer-list + + + , + + + } + + + + + + + + initializer-list + + + + + + + + designation + + + + + initializer + + + + + + + initializer-list + + + , + + + + + designation + + + + + initializer + + + + + + + + designation + + + + designator-list + + + = + + + + + + designator-list + + + + designator + + + + + designator-list + + + designator + + + + + + + + designator + + + + + + [ + + + constant-expression + + + ] + + + + + + + . + + + identifier + + + + + + + + statement + + + + labeled-statement + + + compound-statement + + + expression-statement + + + selection-statement + + + iteration-statement + + + jump-statement + + + + + + labeled-statement + + + + + + identifier + + + : + + + statement + + + + + + + case + + + constant-expression + + + : + + + statement + + + + + + + default + + + : + + + statement + + + + + + + + compound-statement + + + + { + + + + + block-item-list + + + + + } + + + + + + block-item-list + + + + block-item + + + + + block-item-list + + + block-item + + + + + + + + block-item + + + + declaration + + + statement + + + + + + expression-statement + + + + + + expression + + + + + ; + + + + + + selection-statement + + + + + + if + + + ( + + + expression + + + ) + + + statement + + + + + + + if + + + ( + + + expression + + + ) + + + statement + + + else + + + statement + + + + + + + switch + + + ( + + + expression + + + ) + + + statement + + + + + + + + iteration-statement + + + + + + while + + + ( + + + expression + + + ) + + + statement + + + + + + + do + + + statement + + + while + + + ( + + + expression + + + ) + + + ; + + + + + + + for + + + ( + + + + + expression + + + + + ; + + + + + expression + + + + + ; + + + + + expression + + + + + ) + + + statement + + + + + + + for + + + ( + + + declaration + + + + + expression + + + + + ; + + + + + expression + + + + + ) + + + statement + + + + + + + + jump-statement + + + + + + goto + + + identifier + + + ; + + + + + + + continue + + + ; + + + + + + + break + + + ; + + + + + + + return + + + + + expression + + + + + ; + + + + + + + + translation-unit + + + + external-declaration + + + + + translation-unit + + + external-declaration + + + + + + + + external-declaration + + + + function-definition + + + declaration + + + + + + function-definition + + + + declaration-specifiers + + + declarator + + + + + declaration-list + + + + + compound-statement + + + + + + declaration-list + + + + declaration + + + + + declaration-list + + + declaration + + + + + + + + keyword + + + + auto + + + break + + + case + + + char + + + const + + + continue + + + default + + + do + + + double + + + else + + + enum + + + extern + + + float + + + for + + + goto + + + if + + + inline + + + int + + + long + + + register + + + restrict + + + return + + + short + + + signed + + + sizeof + + + static + + + struct + + + switch + + + typedef + + + union + + + unsigned + + + void + + + volatile + + + while + + + + + diff --git a/topics/grammars/c/iso-9899-tc3/Makefile b/topics/grammars/c/iso-9899-tc3/Makefile index 446e6771..7a0c2e98 100644 --- a/topics/grammars/c/iso-9899-tc3/Makefile +++ b/topics/grammars/c/iso-9899-tc3/Makefile @@ -10,4 +10,4 @@ clean: test: make build - ../../../../shared/tools/gdts iso-is-grammar.bgf extracted-grammar.bgf + ../../../../shared/tools/gdt iso-is-grammar.bgf extracted-grammar.bgf diff --git a/topics/grammars/c/iso-9899-tc3/extracted-grammar.bgf b/topics/grammars/c/iso-9899-tc3/extracted-grammar.bgf index a69c2766..99f908aa 100644 --- a/topics/grammars/c/iso-9899-tc3/extracted-grammar.bgf +++ b/topics/grammars/c/iso-9899-tc3/extracted-grammar.bgf @@ -1,2534 +1,2533 @@ - - - - primary-expression - - - - identifier - - - constant - - - string-literal - - - - - ( - - - expression - - - ) - - - - - - - - postfix-expression - - - - primary-expression - - - - - postfix-expression - - - [ - - - expression - - - ] - - - - - - - postfix-expression - - - ( - - - - - argument-expression-list - - - - - ) - - - - - - - postfix-expression - - - . - - - identifier - - - - - - - postfix-expression - - - -> - - - identifier - - - - - - - postfix-expression - - - ++ - - - - - - - postfix-expression - - - -- - - - - - - - ( - - - type-name - - - ) - - - { - - - initializer-list - - - } - - - - - - - ( - - - type-name - - - ) - - - { - - - initializer-list - - - , - - - } - - - - - - - - argument-expression-list - - - - assignment-expression - - - - - argument-expression-list - - - , - - - assignment-expression - - - - - - - - unary-expression - - - - postfix-expression - - - - - ++ - - - unary-expression - - - - - - - -- - - - unary-expression - - - - - - - unary-operator - - - cast-expression - - - - - - - sizeof - - - unary-expression - - - - - - - sizeof - - - ( - - - type-name - - - ) - - - - - - - - unary-operator - - - - & - - - * - - - + - - - - - - - ~ - - - ! - - - - - - cast-expression - - - - unary-expression - - - - - ( - - - type-name - - - ) - - - cast-expression - - - - - - - - multiplicative-expression - - - - cast-expression - - - - - multiplicative-expression - - - * - - - cast-expression - - - - - - - multiplicative-expression - - - / - - - cast-expression - - - - - - - multiplicative-expression - - - % - - - cast-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 - - - - - - - - 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 - - - - - - - - logical-AND-expression - - - - inclusive-OR-expression - - - - - logical-AND-expression - - - && - - - inclusive-OR-expression - - - - - - - - logical-OR-expression - - - - logical-AND-expression - - - - - logical-OR-expression - - - || - - - logical-AND-expression - - - - - - - - conditional-expression - - - - logical-OR-expression - - - - - logical-OR-expression - - - ? - - - expression - - - : - - - conditional-expression - - - - - - - - assignment-expression - - - - conditional-expression - - - - - unary-expression - - - assignment-operator - - - assignment-expression - - - - - - - - assignment-operator - - - - = - - - *= - - - /= - - - %= - - - += - - - -= - - - <<= - - - >>= - - - &= - - - ^= - - - |= - - - - - - expression - - - - assignment-expression - - - - - expression - - - , - - - assignment-expression - - - - - - - - constant-expression - - conditional-expression - - - - declaration - - - - declaration-specifiers - - - - - init-declarator-list - - - - - ; - - - - - - declaration-specifiers - - - - - - storage-class-specifier - - - - - declaration-specifiers - - - - - - - - - type-specifier - - - - - declaration-specifiers - - - - - - - - - type-qualifier - - - - - declaration-specifiers - - - - - - - - - function-specifier - - - - - declaration-specifiers - - - - - - - - - - init-declarator-list - - - - init-declarator - - - - - init-declarator-list - - - , - - - init-declarator - - - - - - - - init-declarator - - - - declarator - - - - - declarator - - - = - - - initializer - - - - - - - - storage-class-specifier - - - - typedef - - - extern - - - static - - - auto - - - register - - - - - - type-specifier - - - - void - - - char - - - short - - - int - - - long - - - float - - - double - - - signed - - - unsigned - - - _Bool - - - _Complex - - - struct-or-union-specifier - - - enum-specifier - - - typedef-name - - - - - - struct-or-union-specifier - - - - - - struct-or-union - - - - - identifier - - - - - { - - - struct-declaration-list - - - } - - - - - - - struct-or-union - - - identifier - - - - - - - - struct-or-union - - - - struct - - - union - - - - - - struct-declaration-list - - - - struct-declaration - - - - - struct-declaration-list - - - struct-declaration - - - - - - - - struct-declaration - - - - specifier-qualifier-list - - - struct-declarator-list - - - ; - - - - - - specifier-qualifier-list - - - - - - type-specifier - - - - - specifier-qualifier-list - - - - - - - - - type-qualifier - - - - - specifier-qualifier-list - - - - - - - - - - struct-declarator-list - - - - struct-declarator - - - - - struct-declarator-list - - - , - - - struct-declarator - - - - - - - - struct-declarator - - - - declarator - - - - - - - declarator - - - - - : - - - constant-expression - - - - - - - - enum-specifier - - - - - - enum - - - - - identifier - - - - - { - - - enumerator-list - - - } - - - - - - - enum - - - - - identifier - - - - - { - - - enumerator-list - - - , - - - } - - - - - - - enum - - - identifier - - - - - - - - enumerator-list - - - - enumerator - - - - - enumerator-list - - - , - - - enumerator - - - - - - - - enumerator - - - - enumeration-constant - - - - - enumeration-constant - - - = - - - constant-expression - - - - - - - - type-qualifier - - - - const - - - restrict - - - volatile - - - - - - function-specifier - - inline - - - - declarator - - - - - - pointer - - - - - direct-declarator - - - - - - direct-declarator - - - - identifier - - - - - ( - - - declarator - - - ) - - - - - - - direct-declarator - - - [ - - - - - type-qualifier-list - - - - - - - assignment-expression - - - - - ] - - - - - - - direct-declarator - - - [ - - - static - - - - - type-qualifier-list - - - - - assignment-expression - - - ] - - - - - - - direct-declarator - - - [ - - - type-qualifier-list - - - static - - - assignment-expression - - - ] - - - - - - - direct-declarator - - - [ - - - - - type-qualifier-list - - - - - * - - - ] - - - - - - - direct-declarator - - - ( - - - parameter-type-list - - - ) - - - - - - - direct-declarator - - - ( - - - - - identifier-list - - - - - ) - - - - - - - - pointer - - - - - - * - - - - - type-qualifier-list - - - - - - - - - * - - - - - type-qualifier-list - - - - - pointer - - - - - - - - type-qualifier-list - - - - type-qualifier - - - - - type-qualifier-list - - - type-qualifier - - - - - - - - parameter-type-list - - - - parameter-list - - - - - parameter-list - - - , - - - ... - - - - - - - - parameter-list - - - - parameter-declaration - - - - - parameter-list - - - , - - - parameter-declaration - - - - - - - - parameter-declaration - - - - - - declaration-specifiers - - - declarator - - - - - - - declaration-specifiers - - - - - abstract-declarator - - - - - - - - - - identifier-list - - - - identifier - - - - - identifier-list - - - , - - - identifier - - - - - - - - type-name - - - - specifier-qualifier-list - - - - - abstract-declarator - - - - - - - - abstract-declarator - - - - pointer - - - - - - - pointer - - - - - direct-abstract-declarator - - - - - - - - direct-abstract-declarator - - - - - - ( - - - abstract-declarator - - - ) - - - - - - - - - direct-abstract-declarator - - - - - [ - - - - - type-qualifier-list - - - - - - - assignment-expression - - - - - ] - - - - - - - - - direct-abstract-declarator - - - - - [ - - - static - - - - - type-qualifier-list - - - - - assignment-expression - - - ] - - - - - - - - - direct-abstract-declarator - - - - - [ - - - type-qualifier-list - - - static - - - assignment-expression - - - ] - - - - - - - - - direct-abstract-declarator - - - - - [ - - - * - - - ] - - - - - - - - - direct-abstract-declarator - - - - - ( - - - - - parameter-type-list - - - - - ) - - - - - - - - typedef-name - - identifier - - - - initializer - - - - assignment-expression - - - - - { - - - initializer-list - - - } - - - - - - - { - - - initializer-list - - - , - - - } - - - - - - - - initializer-list - - - - - - - - designation - - - - - initializer - - - - - - - initializer-list - - - , - - - - - designation - - - - - initializer - - - - - - - - designation - - - - designator-list - - - = - - - - - - designator-list - - - - designator - - - - - designator-list - - - designator - - - - - - - - designator - - - - - - [ - - - constant-expression - - - ] - - - - - - - . - - - identifier - - - - - - - - statement - - - - labeled-statement - - - compound-statement - - - expression-statement - - - selection-statement - - - iteration-statement - - - jump-statement - - - - - - labeled-statement - - - - - - identifier - - - : - - - statement - - - - - - - case - - - constant-expression - - - : - - - statement - - - - - - - default - - - : - - - statement - - - - - - - - compound-statement - - - - { - - - - - block-item-list - - - - - } - - - - - - block-item-list - - - - block-item - - - - - block-item-list - - - block-item - - - - - - - - block-item - - - - declaration - - - statement - - - - - - expression-statement - - - - - - expression - - - - - ; - - - - - - selection-statement - - - - - - if - - - ( - - - expression - - - ) - - - statement - - - - - - - if - - - ( - - - expression - - - ) - - - statement - - - else - - - statement - - - - - - - switch - - - ( - - - expression - - - ) - - - statement - - - - - - - - iteration-statement - - - - - - while - - - ( - - - expression - - - ) - - - statement - - - - - - - do - - - statement - - - while - - - ( - - - expression - - - ) - - - ; - - - - - - - for - - - ( - - - - - expression - - - - - ; - - - - - expression - - - - - ; - - - - - expression - - - - - ) - - - statement - - - - - - - for - - - ( - - - declaration - - - - - expression - - - - - ; - - - - - expression - - - - - ) - - - statement - - - - - - - - jump-statement - - - - - - goto - - - identifier - - - ; - - - - - - - continue - - - ; - - - - - - - break - - - ; - - - - - - - return - - - - - expression - - - - - ; - - - - - - - - translation-unit - - - - external-declaration - - - - - translation-unit - - - external-declaration - - - - - - - - external-declaration - - - - function-definition - - - declaration - - - - - - function-definition - - - - declaration-specifiers - - - declarator - - - - - declaration-list - - - - - compound-statement - - - - - - declaration-list - - - - declaration - - - - - declaration-list - - - declaration - - - - - - - - keyword - - - - auto - - - break - - - case - - - char - - - const - - - continue - - - default - - - do - - - double - - - else - - - enum - - - extern - - - float - - - for - - - goto - - - if - - - inline - - - int - - - long - - - register - - - restrict - - - return - - - short - - - signed - - - sizeof - - - static - - - struct - - - switch - - - typedef - - - union - - - unsigned - - - void - - - volatile - - - while - - - - - \ No newline at end of file + + + primary-expression + + + + identifier + + + constant + + + string-literal + + + + + ( + + + expression + + + ) + + + + + + + + postfix-expression + + + + primary-expression + + + + + postfix-expression + + + [ + + + expression + + + ] + + + + + + + postfix-expression + + + ( + + + + + argument-expression-list + + + + + ) + + + + + + + postfix-expression + + + . + + + identifier + + + + + + + postfix-expression + + + -> + + + identifier + + + + + + + postfix-expression + + + ++ + + + + + + + postfix-expression + + + -- + + + + + + + ( + + + type-name + + + ) + + + { + + + initializer-list + + + } + + + + + + + ( + + + type-name + + + ) + + + { + + + initializer-list + + + , + + + } + + + + + + + + argument-expression-list + + + + assignment-expression + + + + + argument-expression-list + + + , + + + assignment-expression + + + + + + + + unary-expression + + + + postfix-expression + + + + + ++ + + + unary-expression + + + + + + + -- + + + unary-expression + + + + + + + unary-operator + + + cast-expression + + + + + + + sizeof + + + unary-expression + + + + + + + sizeof + + + ( + + + type-name + + + ) + + + + + + + + unary-operator + + + + & + + + * + + + + + + + - + + + ~ + + + ! + + + + + + cast-expression + + + + unary-expression + + + + + ( + + + type-name + + + ) + + + cast-expression + + + + + + + + multiplicative-expression + + + + cast-expression + + + + + multiplicative-expression + + + * + + + cast-expression + + + + + + + multiplicative-expression + + + / + + + cast-expression + + + + + + + multiplicative-expression + + + % + + + cast-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 + + + + + + + + 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 + + + + + + + + logical-AND-expression + + + + inclusive-OR-expression + + + + + logical-AND-expression + + + && + + + inclusive-OR-expression + + + + + + + + logical-OR-expression + + + + logical-AND-expression + + + + + logical-OR-expression + + + || + + + logical-AND-expression + + + + + + + + conditional-expression + + + + logical-OR-expression + + + + + logical-OR-expression + + + ? + + + expression + + + : + + + conditional-expression + + + + + + + + assignment-expression + + + + conditional-expression + + + + + unary-expression + + + assignment-operator + + + assignment-expression + + + + + + + + assignment-operator + + + + = + + + *= + + + /= + + + %= + + + += + + + -= + + + <<= + + + >>= + + + &= + + + ^= + + + |= + + + + + + expression + + + + assignment-expression + + + + + expression + + + , + + + assignment-expression + + + + + + + + constant-expression + + conditional-expression + + + + declaration + + + + declaration-specifiers + + + + + init-declarator-list + + + + + ; + + + + + + declaration-specifiers + + + + + + storage-class-specifier + + + + + declaration-specifiers + + + + + + + + + type-specifier + + + + + declaration-specifiers + + + + + + + + + type-qualifier + + + + + declaration-specifiers + + + + + + + + + function-specifier + + + + + declaration-specifiers + + + + + + + + + + init-declarator-list + + + + init-declarator + + + + + init-declarator-list + + + , + + + init-declarator + + + + + + + + init-declarator + + + + declarator + + + + + declarator + + + = + + + initializer + + + + + + + + storage-class-specifier + + + + typedef + + + extern + + + static + + + auto + + + register + + + + + + type-specifier + + + + void + + + char + + + short + + + int + + + long + + + float + + + double + + + signed + + + unsigned + + + _Bool + + + _Complex + + + struct-or-union-specifier + + + enum-specifier + + + typedef-name + + + + + + struct-or-union-specifier + + + + + + struct-or-union + + + + + identifier + + + + + { + + + struct-declaration-list + + + } + + + + + + + struct-or-union + + + identifier + + + + + + + + struct-or-union + + + + struct + + + union + + + + + + struct-declaration-list + + + + struct-declaration + + + + + struct-declaration-list + + + struct-declaration + + + + + + + + struct-declaration + + + + specifier-qualifier-list + + + struct-declarator-list + + + ; + + + + + + specifier-qualifier-list + + + + + + type-specifier + + + + + specifier-qualifier-list + + + + + + + + + type-qualifier + + + + + specifier-qualifier-list + + + + + + + + + + struct-declarator-list + + + + struct-declarator + + + + + struct-declarator-list + + + , + + + struct-declarator + + + + + + + + struct-declarator + + + + declarator + + + + + + + declarator + + + + + : + + + constant-expression + + + + + + + + enum-specifier + + + + + + enum + + + + + identifier + + + + + { + + + enumerator-list + + + } + + + + + + + enum + + + + + identifier + + + + + { + + + enumerator-list + + + , + + + } + + + + + + + enum + + + identifier + + + + + + + + enumerator-list + + + + enumerator + + + + + enumerator-list + + + , + + + enumerator + + + + + + + + enumerator + + + + enumeration-constant + + + + + enumeration-constant + + + = + + + constant-expression + + + + + + + + type-qualifier + + + + const + + + restrict + + + volatile + + + + + + function-specifier + + inline + + + + declarator + + + + + + pointer + + + + + direct-declarator + + + + + + direct-declarator + + + + identifier + + + + + ( + + + declarator + + + ) + + + + + + + direct-declarator + + + [ + + + + + type-qualifier-list + + + + + + + assignment-expression + + + + + ] + + + + + + + direct-declarator + + + [ + + + static + + + + + type-qualifier-list + + + + + assignment-expression + + + ] + + + + + + + direct-declarator + + + [ + + + type-qualifier-list + + + static + + + assignment-expression + + + ] + + + + + + + direct-declarator + + + [ + + + + + type-qualifier-list + + + + + * + + + ] + + + + + + + direct-declarator + + + ( + + + parameter-type-list + + + ) + + + + + + + direct-declarator + + + ( + + + + + identifier-list + + + + + ) + + + + + + + + pointer + + + + + + * + + + + + type-qualifier-list + + + + + + + + + * + + + + + type-qualifier-list + + + + + pointer + + + + + + + + type-qualifier-list + + + + type-qualifier + + + + + type-qualifier-list + + + type-qualifier + + + + + + + + parameter-type-list + + + + parameter-list + + + + + parameter-list + + + , + + + ... + + + + + + + + parameter-list + + + + parameter-declaration + + + + + parameter-list + + + , + + + parameter-declaration + + + + + + + + parameter-declaration + + + + + + declaration-specifiers + + + declarator + + + + + + + declaration-specifiers + + + + + abstract-declarator + + + + + + + + + + identifier-list + + + + identifier + + + + + identifier-list + + + , + + + identifier + + + + + + + + type-name + + + + specifier-qualifier-list + + + + + abstract-declarator + + + + + + + + abstract-declarator + + + + pointer + + + + + + + pointer + + + + + direct-abstract-declarator + + + + + + + + direct-abstract-declarator + + + + + + ( + + + abstract-declarator + + + ) + + + + + + + + + direct-abstract-declarator + + + + + [ + + + + + type-qualifier-list + + + + + + + assignment-expression + + + + + ] + + + + + + + + + direct-abstract-declarator + + + + + [ + + + static + + + + + type-qualifier-list + + + + + assignment-expression + + + ] + + + + + + + + + direct-abstract-declarator + + + + + [ + + + type-qualifier-list + + + static + + + assignment-expression + + + ] + + + + + + + + + direct-abstract-declarator + + + + + [ + + + * + + + ] + + + + + + + + + direct-abstract-declarator + + + + + ( + + + + + parameter-type-list + + + + + ) + + + + + + + + typedef-name + + identifier + + + + initializer + + + + assignment-expression + + + + + { + + + initializer-list + + + } + + + + + + + { + + + initializer-list + + + , + + + } + + + + + + + + initializer-list + + + + + + + + designation + + + + + initializer + + + + + + + initializer-list + + + , + + + + + designation + + + + + initializer + + + + + + + + designation + + + + designator-list + + + = + + + + + + designator-list + + + + designator + + + + + designator-list + + + designator + + + + + + + + designator + + + + + + [ + + + constant-expression + + + ] + + + + + + + . + + + identifier + + + + + + + + statement + + + + labeled-statement + + + compound-statement + + + expression-statement + + + selection-statement + + + iteration-statement + + + jump-statement + + + + + + labeled-statement + + + + + + identifier + + + : + + + statement + + + + + + + case + + + constant-expression + + + : + + + statement + + + + + + + default + + + : + + + statement + + + + + + + + compound-statement + + + + { + + + + + block-item-list + + + + + } + + + + + + block-item-list + + + + block-item + + + + + block-item-list + + + block-item + + + + + + + + block-item + + + + declaration + + + statement + + + + + + expression-statement + + + + + + expression + + + + + ; + + + + + + selection-statement + + + + + + if + + + ( + + + expression + + + ) + + + statement + + + + + + + if + + + ( + + + expression + + + ) + + + statement + + + else + + + statement + + + + + + + switch + + + ( + + + expression + + + ) + + + statement + + + + + + + + iteration-statement + + + + + + while + + + ( + + + expression + + + ) + + + statement + + + + + + + do + + + statement + + + while + + + ( + + + expression + + + ) + + + ; + + + + + + + for + + + ( + + + + + expression + + + + + ; + + + + + expression + + + + + ; + + + + + expression + + + + + ) + + + statement + + + + + + + for + + + ( + + + declaration + + + + + expression + + + + + ; + + + + + expression + + + + + ) + + + statement + + + + + + + + jump-statement + + + + + + goto + + + identifier + + + ; + + + + + + + continue + + + ; + + + + + + + break + + + ; + + + + + + + return + + + + + expression + + + + + ; + + + + + + + + translation-unit + + + + external-declaration + + + + + translation-unit + + + external-declaration + + + + + + + + external-declaration + + + + function-definition + + + declaration + + + + + + function-definition + + + + declaration-specifiers + + + declarator + + + + + declaration-list + + + + + compound-statement + + + + + + declaration-list + + + + declaration + + + + + declaration-list + + + declaration + + + + + + + + keyword + + + + auto + + + break + + + case + + + char + + + const + + + continue + + + default + + + do + + + double + + + else + + + enum + + + extern + + + float + + + for + + + goto + + + if + + + inline + + + int + + + long + + + register + + + restrict + + + return + + + short + + + signed + + + sizeof + + + static + + + struct + + + switch + + + typedef + + + union + + + unsigned + + + void + + + volatile + + + while + + + + + diff --git a/topics/grammars/cpp/iso-14882-1998/Makefile b/topics/grammars/cpp/iso-14882-1998/Makefile index 446e6771..7a0c2e98 100644 --- a/topics/grammars/cpp/iso-14882-1998/Makefile +++ b/topics/grammars/cpp/iso-14882-1998/Makefile @@ -10,4 +10,4 @@ clean: test: make build - ../../../../shared/tools/gdts iso-is-grammar.bgf extracted-grammar.bgf + ../../../../shared/tools/gdt iso-is-grammar.bgf extracted-grammar.bgf diff --git a/topics/grammars/cpp/iso-14882-1998/extracted-grammar.bgf b/topics/grammars/cpp/iso-14882-1998/extracted-grammar.bgf index 11710bc4..f9a8af7a 100644 --- a/topics/grammars/cpp/iso-14882-1998/extracted-grammar.bgf +++ b/topics/grammars/cpp/iso-14882-1998/extracted-grammar.bgf @@ -1,4842 +1,4841 @@ - - - - translation-unit - - - - declaration-seq - - - - - - primary-expression - - - - literal - - - this - - - - - ( - - - expression - - - ) - - - - - id-expression - - - - - - id-expression - - - - unqualified-id - - - qualified-id - - - - - - unqualified-id - - - - identifier - - - operator-function-id - - - conversion-function-id - - - - - ~ - - - class-name - - - - - template-id - - - - - - qualified-id - - - - - - - - :: - - - - - nested-name-specifier - - - - - template - - - - - unqualified-id - - - - - - - :: - - - identifier - - - - - - - :: - - - operator-function-id - - - - - - - :: - - - template-id - - - - - - - - nested-name-specifier - - - - - - class-or-namespace-name - - - :: - - - - - nested-name-specifier - - - - - - - - - class-or-namespace-name - - - :: - - - template - - - nested-name-specifier - - - - - - - - class-or-namespace-name - - - - class-name - - - namespace-name - - - - - - postfix-expression - - - - primary-expression - - - - - postfix-expression - - - [ - - - expression - - - ] - - - - - - - postfix-expression - - - ( - - - - - expression-list - - - - - ) - - - - - - - simple-type-specifier - - - ( - - - - - expression-list - - - - - ) - - - - - - - typename - - - - - :: - - - - - nested-name-specifier - - - identifier - - - ( - - - - - expression-list - - - - - ) - - - - - - - typename - - - - - :: - - - - - nested-name-specifier - - - - - template - - - - - template-id - - - ( - - - - - expression-list - - - - - ) - - - - - - - postfix-expression - - - . - - - - - template - - - - - id-expression - - - - - - - postfix-expression - - - -> - - - - - template - - - - - id-expression - - - - - - - postfix-expression - - - . - - - pseudo-destructor-name - - - - - - - postfix-expression - - - -> - - - pseudo-destructor-name - - - - - - - postfix-expression - - - ++ - - - - - - - postfix-expression - - - -- - - - - - - - dynamic_cast - - - < - - - type-id - - - > - - - ( - - - expression - - - ) - - - - - - - static_cast - - - < - - - type-id - - - > - - - ( - - - expression - - - ) - - - - - - - reinterpret_cast - - - < - - - type-id - - - > - - - ( - - - expression - - - ) - - - - - - - const_cast - - - < - - - type-id - - - > - - - ( - - - expression - - - ) - - - - - - - typeid - - - ( - - - expression - - - ) - - - - - - - typeid - - - ( - - - type-id - - - ) - - - - - - - - expression-list - - - - assignment-expression - - - - - expression-list - - - , - - - assignment-expression - - - - - - - - pseudo-destructor-name - - - - - - - - :: - - - - - - - nested-name-specifier - - - - - type-name - - - :: - - - ~ - - - type-name - - - - - - - - - :: - - - - - nested-name-specifier - - - template - - - template-id - - - :: - - - ~ - - - type-name - - - - - - - - - :: - - - - - - - nested-name-specifier - - - - - ~ - - - type-name - - - - - - - - unary-expression - - - - postfix-expression - - - - - ++ - - - cast-expression - - - - - - - -- - - - cast-expression - - - - - - - unary-operator - - - cast-expression - - - - - - - sizeof - - - unary-expression - - - - - - - sizeof - - - ( - - - type-id - - - ) - - - - - new-expression - - - delete-expression - - - - - - unary-operator - - - - * - - - & - - - + - - - - - - - ! - - - ~ - - - - - - new-expression - - - - - - - - :: - - - - - new - - - - - new-placement - - - - - new-type-id - - - - - new-initializer - - - - - - - - - - - :: - - - - - new - - - - - new-placement - - - - - ( - - - type-id - - - ) - - - - - new-initializer - - - - - - - - - - new-placement - - - - ( - - - expression-list - - - ) - - - - - - new-type-id - - - - type-specifier-seq - - - - - new-declarator - - - - - - - - new-declarator - - - - - - ptr-operator - - - - - new-declarator - - - - - - - direct-new-declarator - - - - - - direct-new-declarator - - - - - - [ - - - expression - - - ] - - - - - - - direct-new-declarator - - - [ - - - constant-expression - - - ] - - - - - - - - new-initializer - - - - ( - - - - - expression-list - - - - - ) - - - - - - delete-expression - - - - - - - - :: - - - - - delete - - - cast-expression - - - - - - - - - :: - - - - - delete - - - [ - - - ] - - - cast-expression - - - - - - - - cast-expression - - - - unary-expression - - - - - ( - - - type-id - - - ) - - - cast-expression - - - - - - - - pm-expression - - - - cast-expression - - - - - pm-expression - - - .* - - - cast-expression - - - - - - - pm-expression - - - ->* - - - cast-expression - - - - - - - - multiplicative-expression - - - - pm-expression - - - - - multiplicative-expression - - - * - - - pm-expression - - - - - - - multiplicative-expression - - - / - - - pm-expression - - - - - - - multiplicative-expression - - - % - - - pm-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 - - - - - - - - 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 - - - - - - - - logical-and-expression - - - - inclusive-or-expression - - - - - logical-and-expression - - - && - - - inclusive-or-expression - - - - - - - - logical-or-expression - - - - logical-and-expression - - - - - logical-or-expression - - - || - - - logical-and-expression - - - - - - - - conditional-expression - - - - logical-or-expression - - - - - logical-or-expression - - - ? - - - expression - - - : - - - assignment-expression - - - - - - - - assignment-expression - - - - conditional-expression - - - - - logical-or-expression - - - assignment-operator - - - assignment-expression - - - - - throw-expression - - - - - - assignment-operator - - - - = - - - *= - - - /= - - - %= - - - += - - - -= - - - >>= - - - <<= - - - &= - - - ^= - - - |= - - - - - - expression - - - - assignment-expression - - - - - expression - - - , - - - assignment-expression - - - - - - - - constant-expression - - conditional-expression - - - - statement - - - - labeled-statement - - - expression-statement - - - compound-statement - - - selection-statement - - - iteration-statement - - - jump-statement - - - declaration-statement - - - try-block - - - - - - labeled-statement - - - - - - identifier - - - : - - - statement - - - - - - - case - - - constant-expression - - - : - - - statement - - - - - - - default - - - : - - - statement - - - - - - - - expression-statement - - - - - - expression - - - - - ; - - - - - - compound-statement - - - - { - - - - - statement-seq - - - - - } - - - - - - statement-seq - - - - statement - - - - - statement-seq - - - statement - - - - - - - - selection-statement - - - - - - if - - - ( - - - condition - - - ) - - - statement - - - - - - - if - - - ( - - - condition - - - ) - - - statement - - - else - - - statement - - - - - - - switch - - - ( - - - condition - - - ) - - - statement - - - - - - - - condition - - - - expression - - - - - type-specifier-seq - - - declarator - - - = - - - assignment-expression - - - - - - - - iteration-statement - - - - - - while - - - ( - - - condition - - - ) - - - statement - - - - - - - do - - - statement - - - while - - - ( - - - expression - - - ) - - - ; - - - - - - - for - - - ( - - - for-init-statement - - - - - condition - - - - - ; - - - - - expression - - - - - ) - - - statement - - - - - - - - for-init-statement - - - - expression-statement - - - simple-declaration - - - - - - jump-statement - - - - - - break - - - ; - - - - - - - continue - - - ; - - - - - - - return - - - - - expression - - - - - ; - - - - - - - goto - - - identifier - - - ; - - - - - - - - declaration-statement - - block-declaration - - - - declaration-seq - - - - declaration - - - - - declaration-seq - - - declaration - - - - - - - - declaration - - - - block-declaration - - - function-definition - - - template-declaration - - - explicit-instantiation - - - explicit-specialization - - - linkage-specification - - - namespace-definition - - - - - - block-declaration - - - - simple-declaration - - - asm-definition - - - namespace-alias-definition - - - using-declaration - - - using-directive - - - - - - simple-declaration - - - - - - decl-specifier-seq - - - - - - - init-declarator-list - - - - - ; - - - - - - decl-specifier - - - - storage-class-specifier - - - type-specifier - - - function-specifier - - - friend - - - typedef - - - - - - decl-specifier-seq - - - - - - decl-specifier-seq - - - - - decl-specifier - - - - - - storage-class-specifier - - - - auto - - - register - - - static - - - extern - - - mutable - - - - - - function-specifier - - - - inline - - - virtual - - - explicit - - - - - - typedef-name - - identifier - - - - type-specifier - - - - simple-type-specifier - - - class-specifier - - - enum-specifier - - - elaborated-type-specifier - - - cv-qualifier - - - - - - simple-type-specifier - - - - - - - - :: - - - - - - - nested-name-specifier - - - - - type-name - - - - - - - - - :: - - - - - nested-name-specifier - - - template - - - template-id - - - - - char - - - wchar_t - - - bool - - - short - - - int - - - long - - - signed - - - unsigned - - - float - - - double - - - void - - - - - - type-name - - - - class-name - - - enum-name - - - typedef-name - - - - - - elaborated-type-specifier - - - - - - class-key - - - - - :: - - - - - - - nested-name-specifier - - - - - identifier - - - - - - - enum - - - - - :: - - - - - - - nested-name-specifier - - - - - identifier - - - - - - - typename - - - - - :: - - - - - nested-name-specifier - - - identifier - - - - - - - typename - - - - - :: - - - - - nested-name-specifier - - - - - template - - - - - template-id - - - - - - - - enum-name - - identifier - - - - enum-specifier - - - - enum - - - - - identifier - - - - - { - - - - - enumerator-list - - - - - } - - - - - - enumerator-list - - - - enumerator-definition - - - - - enumerator-list - - - , - - - enumerator-definition - - - - - - - - enumerator-definition - - - - enumerator - - - - - enumerator - - - = - - - constant-expression - - - - - - - - enumerator - - identifier - - - - namespace-name - - - - original-namespace-name - - - namespace-alias - - - - - - original-namespace-name - - identifier - - - - namespace-definition - - - - named-namespace-definition - - - unnamed-namespace-definition - - - - - - named-namespace-definition - - - - original-namespace-definition - - - extension-namespace-definition - - - - - - original-namespace-definition - - - - namespace - - - identifier - - - { - - - namespace-body - - - } - - - - - - extension-namespace-definition - - - - namespace - - - original-namespace-name - - - { - - - namespace-body - - - } - - - - - - unnamed-namespace-definition - - - - namespace - - - { - - - namespace-body - - - } - - - - - - namespace-body - - - - declaration-seq - - - - - - namespace-alias - - identifier - - - - namespace-alias-definition - - - - namespace - - - identifier - - - = - - - qualified-namespace-specifier - - - ; - - - - - - qualified-namespace-specifier - - - - - - :: - - - - - - - nested-name-specifier - - - - - namespace-name - - - - - - using-declaration - - - - - - using - - - - - typename - - - - - - - :: - - - - - nested-name-specifier - - - unqualified-id - - - ; - - - - - - - using - - - :: - - - unqualified-id - - - ; - - - - - - - - using-directive - - - - using - - - namespace - - - - - :: - - - - - - - nested-name-specifier - - - - - namespace-name - - - ; - - - - - - asm-definition - - - - asm - - - ( - - - string-literal - - - ) - - - ; - - - - - - linkage-specification - - - - - - extern - - - string-literal - - - { - - - - - declaration-seq - - - - - } - - - - - - - extern - - - string-literal - - - declaration - - - - - - - - init-declarator-list - - - - init-declarator - - - - - init-declarator-list - - - , - - - init-declarator - - - - - - - - init-declarator - - - - declarator - - - - - initializer - - - - - - - - declarator - - - - direct-declarator - - - - - ptr-operator - - - declarator - - - - - - - - direct-declarator - - - - declarator-id - - - - - direct-declarator - - - ( - - - parameter-declaration-clause - - - ) - - - - - cv-qualifier-seq - - - - - - - exception-specification - - - - - - - - - direct-declarator - - - [ - - - - - constant-expression - - - - - ] - - - - - - - ( - - - declarator - - - ) - - - - - - - - ptr-operator - - - - - - * - - - - - cv-qualifier-seq - - - - - - - & - - - - - - - :: - - - - - nested-name-specifier - - - * - - - - - cv-qualifier-seq - - - - - - - - - - cv-qualifier-seq - - - - cv-qualifier - - - - - cv-qualifier-seq - - - - - - - - cv-qualifier - - - - const - - - volatile - - - - - - declarator-id - - - - id-expression - - - - - - - :: - - - - - - - nested-name-specifier - - - - - type-name - - - - - - - - type-id - - - - type-specifier-seq - - - - - abstract-declarator - - - - - - - - type-specifier-seq - - - - type-specifier - - - - - type-specifier-seq - - - - - - - - abstract-declarator - - - - - - ptr-operator - - - - - abstract-declarator - - - - - - - direct-abstract-declarator - - - - - - direct-abstract-declarator - - - - - - - - direct-abstract-declarator - - - - - ( - - - parameter-declaration-clause - - - ) - - - - - cv-qualifier-seq - - - - - - - exception-specification - - - - - - - - - - - direct-abstract-declarator - - - - - [ - - - - - constant-expression - - - - - ] - - - - - - - ( - - - abstract-declarator - - - ) - - - - - - - - parameter-declaration-clause - - - - - - - - parameter-declaration-list - - - - - - - ... - - - - - - - - - parameter-declaration-list - - - , - - - ... - - - - - - - - parameter-declaration-list - - - - parameter-declaration - - - - - parameter-declaration-list - - - , - - - parameter-declaration - - - - - - - - parameter-declaration - - - - - - decl-specifier-seq - - - declarator - - - - - - - decl-specifier-seq - - - declarator - - - = - - - assignment-expression - - - - - - - decl-specifier-seq - - - - - abstract-declarator - - - - - - - - - decl-specifier-seq - - - - - abstract-declarator - - - - - = - - - assignment-expression - - - - - - - - function-definition - - - - - - - - decl-specifier-seq - - - - - declarator - - - - - ctor-initializer - - - - - function-body - - - - - - - - - decl-specifier-seq - - - - - declarator - - - function-try-block - - - - - - - - function-body - - compound-statement - - - - initializer - - - - - - = - - - initializer-clause - - - - - - - ( - - - expression-list - - - ) - - - - - - - - initializer-clause - - - - assignment-expression - - - - - { - - - initializer-list - - - - - , - - - - - } - - - - - - - { - - - } - - - - - - - - initializer-list - - - - initializer-clause - - - - - initializer-list - - - , - - - initializer-clause - - - - - - - - class-name - - - - identifier - - - template-id - - - - - - class-specifier - - - - class-head - - - { - - - - - member-specification - - - - - } - - - - - - class-head - - - - - - class-key - - - - - identifier - - - - - - - base-clause - - - - - - - - - class-key - - - nested-name-specifier - - - identifier - - - - - base-clause - - - - - - - - - class-key - - - - - nested-name-specifier - - - - - template-id - - - - - base-clause - - - - - - - - - - class-key - - - - class - - - struct - - - union - - - - - - member-specification - - - - - - member-declaration - - - - - member-specification - - - - - - - - - access-specifier - - - : - - - - - member-specification - - - - - - - - - - member-declaration - - - - - - - - decl-specifier-seq - - - - - - - member-declarator-list - - - - - ; - - - - - - - function-definition - - - - - ; - - - - - - - - - - - :: - - - - - nested-name-specifier - - - - - template - - - - - unqualified-id - - - ; - - - - - using-declaration - - - template-declaration - - - - - - member-declarator-list - - - - member-declarator - - - - - member-declarator-list - - - , - - - member-declarator - - - - - - - - member-declarator - - - - - - declarator - - - - - pure-specifier - - - - - - - - - declarator - - - - - constant-initializer - - - - - - - - - - - identifier - - - - - : - - - constant-expression - - - - - - - - pure-specifier - - - - = - - - 0 - - - - - - constant-initializer - - - - = - - - constant-expression - - - - - - base-clause - - - - : - - - base-specifier-list - - - - - - base-specifier-list - - - - base-specifier - - - - - base-specifier-list - - - , - - - base-specifier - - - - - - - - base-specifier - - - - - - - - :: - - - - - - - nested-name-specifier - - - - - class-name - - - - - - - virtual - - - - - access-specifier - - - - - - - :: - - - - - - - nested-name-specifier - - - - - class-name - - - - - - - access-specifier - - - - - virtual - - - - - - - :: - - - - - - - nested-name-specifier - - - - - class-name - - - - - - - - access-specifier - - - - private - - - protected - - - public - - - - - - conversion-function-id - - - - operator - - - conversion-type-id - - - - - - conversion-type-id - - - - type-specifier-seq - - - - - conversion-declarator - - - - - - - - conversion-declarator - - - - ptr-operator - - - - - conversion-declarator - - - - - - - - ctor-initializer - - - - : - - - mem-initializer-list - - - - - - mem-initializer-list - - - - mem-initializer - - - - - mem-initializer - - - , - - - mem-initializer-list - - - - - - - - mem-initializer - - - - mem-initializer-id - - - ( - - - - - expression-list - - - - - ) - - - - - - mem-initializer-id - - - - - - - - :: - - - - - - - nested-name-specifier - - - - - class-name - - - - - identifier - - - - - - operator-function-id - - - - operator - - - operator - - - - - - operator - - - - new - - - delete - - - - - new - - - [ - - - ] - - - - - - - delete - - - [ - - - ] - - - - - + - - - - - - - * - - - / - - - % - - - ^ - - - & - - - | - - - ~ - - - ! - - - = - - - < - - - > - - - += - - - -= - - - *= - - - /= - - - %= - - - ^= - - - &= - - - |= - - - << - - - >> - - - >>= - - - <<= - - - == - - - != - - - <= - - - >= - - - && - - - || - - - ++ - - - -- - - - , - - - ->* - - - -> - - - - - ( - - - ) - - - - - - - [ - - - ] - - - - - - - - template-declaration - - - - - - export - - - - - template - - - < - - - template-parameter-list - - - > - - - declaration - - - - - - template-parameter-list - - - - template-parameter - - - - - template-parameter-list - - - , - - - template-parameter - - - - - - - - template-parameter - - - - type-parameter - - - parameter-declaration - - - - - - type-parameter - - - - - - class - - - - - identifier - - - - - - - - - class - - - - - identifier - - - - - = - - - type-id - - - - - - - typename - - - - - identifier - - - - - - - - - typename - - - - - identifier - - - - - = - - - type-id - - - - - - - template - - - < - - - template-parameter-list - - - > - - - class - - - - - identifier - - - - - - - - - template - - - < - - - template-parameter-list - - - > - - - class - - - - - identifier - - - - - = - - - id-expression - - - - - - - - template-id - - - - template-name - - - < - - - - - template-argument-list - - - - - > - - - - - - template-name - - identifier - - - - template-argument-list - - - - template-argument - - - - - template-argument-list - - - , - - - template-argument - - - - - - - - template-argument - - - - assignment-expression - - - type-id - - - id-expression - - - - - - explicit-instantiation - - - - template - - - declaration - - - - - - explicit-specialization - - - - template - - - < - - - > - - - declaration - - - - - - try-block - - - - try - - - compound-statement - - - handler-seq - - - - - - function-try-block - - - - try - - - - - ctor-initializer - - - - - function-body - - - handler-seq - - - - - - handler-seq - - - - handler - - - - - handler-seq - - - - - - - - handler - - - - catch - - - ( - - - exception-declaration - - - ) - - - compound-statement - - - - - - exception-declaration - - - - - - type-specifier-seq - - - declarator - - - - - - - type-specifier-seq - - - abstract-declarator - - - - - type-specifier-seq - - - ... - - - - - - throw-expression - - - - throw - - - - - assignment-expression - - - - - - - - exception-specification - - - - throw - - - ( - - - - - type-id-list - - - - - ) - - - - - - type-id-list - - - - type-id - - - - - type-id-list - - - , - - - type-id - - - - - - - - keyword - - - - new - - - delete - - - and - - - bitand - - - bitor - - - compl - - - not - - - or - - - xor - - - enum - - - try - - - namespace - - - template - - - case - - - default - - - using - - - throw - - - break - - - continue - - - return - - - goto - - - char - - - bool - - - short - - - int - - - long - - - signed - - - unsigned - - - float - - - double - - - void - - - extern - - - private - - - protected - - - public - - - export - - - typename - - - typeid - - - if - - - else - - - switch - - - virtual - - - sizeof - - - friend - - - typedef - - - catch - - - auto - - - register - - - static - - - mutable - - - asm - - - while - - - do - - - for - - - inline - - - explicit - - - const - - - volatile - - - class - - - struct - - - union - - - this - - - operator - - - - - \ No newline at end of file + + + translation-unit + + + + declaration-seq + + + + + + primary-expression + + + + literal + + + this + + + + + ( + + + expression + + + ) + + + + + id-expression + + + + + + id-expression + + + + unqualified-id + + + qualified-id + + + + + + unqualified-id + + + + identifier + + + operator-function-id + + + conversion-function-id + + + + + ~ + + + class-name + + + + + template-id + + + + + + qualified-id + + + + + + + + :: + + + + + nested-name-specifier + + + + + template + + + + + unqualified-id + + + + + + + :: + + + identifier + + + + + + + :: + + + operator-function-id + + + + + + + :: + + + template-id + + + + + + + + nested-name-specifier + + + + + + class-or-namespace-name + + + :: + + + + + nested-name-specifier + + + + + + + + + class-or-namespace-name + + + :: + + + template + + + nested-name-specifier + + + + + + + + class-or-namespace-name + + + + class-name + + + namespace-name + + + + + + postfix-expression + + + + primary-expression + + + + + postfix-expression + + + [ + + + expression + + + ] + + + + + + + postfix-expression + + + ( + + + + + expression-list + + + + + ) + + + + + + + simple-type-specifier + + + ( + + + + + expression-list + + + + + ) + + + + + + + typename + + + + + :: + + + + + nested-name-specifier + + + identifier + + + ( + + + + + expression-list + + + + + ) + + + + + + + typename + + + + + :: + + + + + nested-name-specifier + + + + + template + + + + + template-id + + + ( + + + + + expression-list + + + + + ) + + + + + + + postfix-expression + + + . + + + + + template + + + + + id-expression + + + + + + + postfix-expression + + + -> + + + + + template + + + + + id-expression + + + + + + + postfix-expression + + + . + + + pseudo-destructor-name + + + + + + + postfix-expression + + + -> + + + pseudo-destructor-name + + + + + + + postfix-expression + + + ++ + + + + + + + postfix-expression + + + -- + + + + + + + dynamic_cast + + + < + + + type-id + + + > + + + ( + + + expression + + + ) + + + + + + + static_cast + + + < + + + type-id + + + > + + + ( + + + expression + + + ) + + + + + + + reinterpret_cast + + + < + + + type-id + + + > + + + ( + + + expression + + + ) + + + + + + + const_cast + + + < + + + type-id + + + > + + + ( + + + expression + + + ) + + + + + + + typeid + + + ( + + + expression + + + ) + + + + + + + typeid + + + ( + + + type-id + + + ) + + + + + + + + expression-list + + + + assignment-expression + + + + + expression-list + + + , + + + assignment-expression + + + + + + + + pseudo-destructor-name + + + + + + + + :: + + + + + + + nested-name-specifier + + + + + type-name + + + :: + + + ~ + + + type-name + + + + + + + + + :: + + + + + nested-name-specifier + + + template + + + template-id + + + :: + + + ~ + + + type-name + + + + + + + + + :: + + + + + + + nested-name-specifier + + + + + ~ + + + type-name + + + + + + + + unary-expression + + + + postfix-expression + + + + + ++ + + + cast-expression + + + + + + + -- + + + cast-expression + + + + + + + unary-operator + + + cast-expression + + + + + + + sizeof + + + unary-expression + + + + + + + sizeof + + + ( + + + type-id + + + ) + + + + + new-expression + + + delete-expression + + + + + + unary-operator + + + + * + + + & + + + + + + + - + + + ! + + + ~ + + + + + + new-expression + + + + + + + + :: + + + + + new + + + + + new-placement + + + + + new-type-id + + + + + new-initializer + + + + + + + + + + + :: + + + + + new + + + + + new-placement + + + + + ( + + + type-id + + + ) + + + + + new-initializer + + + + + + + + + + new-placement + + + + ( + + + expression-list + + + ) + + + + + + new-type-id + + + + type-specifier-seq + + + + + new-declarator + + + + + + + + new-declarator + + + + + + ptr-operator + + + + + new-declarator + + + + + + + direct-new-declarator + + + + + + direct-new-declarator + + + + + + [ + + + expression + + + ] + + + + + + + direct-new-declarator + + + [ + + + constant-expression + + + ] + + + + + + + + new-initializer + + + + ( + + + + + expression-list + + + + + ) + + + + + + delete-expression + + + + + + + + :: + + + + + delete + + + cast-expression + + + + + + + + + :: + + + + + delete + + + [ + + + ] + + + cast-expression + + + + + + + + cast-expression + + + + unary-expression + + + + + ( + + + type-id + + + ) + + + cast-expression + + + + + + + + pm-expression + + + + cast-expression + + + + + pm-expression + + + .* + + + cast-expression + + + + + + + pm-expression + + + ->* + + + cast-expression + + + + + + + + multiplicative-expression + + + + pm-expression + + + + + multiplicative-expression + + + * + + + pm-expression + + + + + + + multiplicative-expression + + + / + + + pm-expression + + + + + + + multiplicative-expression + + + % + + + pm-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 + + + + + + + + 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 + + + + + + + + logical-and-expression + + + + inclusive-or-expression + + + + + logical-and-expression + + + && + + + inclusive-or-expression + + + + + + + + logical-or-expression + + + + logical-and-expression + + + + + logical-or-expression + + + || + + + logical-and-expression + + + + + + + + conditional-expression + + + + logical-or-expression + + + + + logical-or-expression + + + ? + + + expression + + + : + + + assignment-expression + + + + + + + + assignment-expression + + + + conditional-expression + + + + + logical-or-expression + + + assignment-operator + + + assignment-expression + + + + + throw-expression + + + + + + assignment-operator + + + + = + + + *= + + + /= + + + %= + + + += + + + -= + + + >>= + + + <<= + + + &= + + + ^= + + + |= + + + + + + expression + + + + assignment-expression + + + + + expression + + + , + + + assignment-expression + + + + + + + + constant-expression + + conditional-expression + + + + statement + + + + labeled-statement + + + expression-statement + + + compound-statement + + + selection-statement + + + iteration-statement + + + jump-statement + + + declaration-statement + + + try-block + + + + + + labeled-statement + + + + + + identifier + + + : + + + statement + + + + + + + case + + + constant-expression + + + : + + + statement + + + + + + + default + + + : + + + statement + + + + + + + + expression-statement + + + + + + expression + + + + + ; + + + + + + compound-statement + + + + { + + + + + statement-seq + + + + + } + + + + + + statement-seq + + + + statement + + + + + statement-seq + + + statement + + + + + + + + selection-statement + + + + + + if + + + ( + + + condition + + + ) + + + statement + + + + + + + if + + + ( + + + condition + + + ) + + + statement + + + else + + + statement + + + + + + + switch + + + ( + + + condition + + + ) + + + statement + + + + + + + + condition + + + + expression + + + + + type-specifier-seq + + + declarator + + + = + + + assignment-expression + + + + + + + + iteration-statement + + + + + + while + + + ( + + + condition + + + ) + + + statement + + + + + + + do + + + statement + + + while + + + ( + + + expression + + + ) + + + ; + + + + + + + for + + + ( + + + for-init-statement + + + + + condition + + + + + ; + + + + + expression + + + + + ) + + + statement + + + + + + + + for-init-statement + + + + expression-statement + + + simple-declaration + + + + + + jump-statement + + + + + + break + + + ; + + + + + + + continue + + + ; + + + + + + + return + + + + + expression + + + + + ; + + + + + + + goto + + + identifier + + + ; + + + + + + + + declaration-statement + + block-declaration + + + + declaration-seq + + + + declaration + + + + + declaration-seq + + + declaration + + + + + + + + declaration + + + + block-declaration + + + function-definition + + + template-declaration + + + explicit-instantiation + + + explicit-specialization + + + linkage-specification + + + namespace-definition + + + + + + block-declaration + + + + simple-declaration + + + asm-definition + + + namespace-alias-definition + + + using-declaration + + + using-directive + + + + + + simple-declaration + + + + + + decl-specifier-seq + + + + + + + init-declarator-list + + + + + ; + + + + + + decl-specifier + + + + storage-class-specifier + + + type-specifier + + + function-specifier + + + friend + + + typedef + + + + + + decl-specifier-seq + + + + + + decl-specifier-seq + + + + + decl-specifier + + + + + + storage-class-specifier + + + + auto + + + register + + + static + + + extern + + + mutable + + + + + + function-specifier + + + + inline + + + virtual + + + explicit + + + + + + typedef-name + + identifier + + + + type-specifier + + + + simple-type-specifier + + + class-specifier + + + enum-specifier + + + elaborated-type-specifier + + + cv-qualifier + + + + + + simple-type-specifier + + + + + + + + :: + + + + + + + nested-name-specifier + + + + + type-name + + + + + + + + + :: + + + + + nested-name-specifier + + + template + + + template-id + + + + + char + + + wchar_t + + + bool + + + short + + + int + + + long + + + signed + + + unsigned + + + float + + + double + + + void + + + + + + type-name + + + + class-name + + + enum-name + + + typedef-name + + + + + + elaborated-type-specifier + + + + + + class-key + + + + + :: + + + + + + + nested-name-specifier + + + + + identifier + + + + + + + enum + + + + + :: + + + + + + + nested-name-specifier + + + + + identifier + + + + + + + typename + + + + + :: + + + + + nested-name-specifier + + + identifier + + + + + + + typename + + + + + :: + + + + + nested-name-specifier + + + + + template + + + + + template-id + + + + + + + + enum-name + + identifier + + + + enum-specifier + + + + enum + + + + + identifier + + + + + { + + + + + enumerator-list + + + + + } + + + + + + enumerator-list + + + + enumerator-definition + + + + + enumerator-list + + + , + + + enumerator-definition + + + + + + + + enumerator-definition + + + + enumerator + + + + + enumerator + + + = + + + constant-expression + + + + + + + + enumerator + + identifier + + + + namespace-name + + + + original-namespace-name + + + namespace-alias + + + + + + original-namespace-name + + identifier + + + + namespace-definition + + + + named-namespace-definition + + + unnamed-namespace-definition + + + + + + named-namespace-definition + + + + original-namespace-definition + + + extension-namespace-definition + + + + + + original-namespace-definition + + + + namespace + + + identifier + + + { + + + namespace-body + + + } + + + + + + extension-namespace-definition + + + + namespace + + + original-namespace-name + + + { + + + namespace-body + + + } + + + + + + unnamed-namespace-definition + + + + namespace + + + { + + + namespace-body + + + } + + + + + + namespace-body + + + + declaration-seq + + + + + + namespace-alias + + identifier + + + + namespace-alias-definition + + + + namespace + + + identifier + + + = + + + qualified-namespace-specifier + + + ; + + + + + + qualified-namespace-specifier + + + + + + :: + + + + + + + nested-name-specifier + + + + + namespace-name + + + + + + using-declaration + + + + + + using + + + + + typename + + + + + + + :: + + + + + nested-name-specifier + + + unqualified-id + + + ; + + + + + + + using + + + :: + + + unqualified-id + + + ; + + + + + + + + using-directive + + + + using + + + namespace + + + + + :: + + + + + + + nested-name-specifier + + + + + namespace-name + + + ; + + + + + + asm-definition + + + + asm + + + ( + + + string-literal + + + ) + + + ; + + + + + + linkage-specification + + + + + + extern + + + string-literal + + + { + + + + + declaration-seq + + + + + } + + + + + + + extern + + + string-literal + + + declaration + + + + + + + + init-declarator-list + + + + init-declarator + + + + + init-declarator-list + + + , + + + init-declarator + + + + + + + + init-declarator + + + + declarator + + + + + initializer + + + + + + + + declarator + + + + direct-declarator + + + + + ptr-operator + + + declarator + + + + + + + + direct-declarator + + + + declarator-id + + + + + direct-declarator + + + ( + + + parameter-declaration-clause + + + ) + + + + + cv-qualifier-seq + + + + + + + exception-specification + + + + + + + + + direct-declarator + + + [ + + + + + constant-expression + + + + + ] + + + + + + + ( + + + declarator + + + ) + + + + + + + + ptr-operator + + + + + + * + + + + + cv-qualifier-seq + + + + + + + & + + + + + + + :: + + + + + nested-name-specifier + + + * + + + + + cv-qualifier-seq + + + + + + + + + + cv-qualifier-seq + + + + cv-qualifier + + + + + cv-qualifier-seq + + + + + + + + cv-qualifier + + + + const + + + volatile + + + + + + declarator-id + + + + id-expression + + + + + + + :: + + + + + + + nested-name-specifier + + + + + type-name + + + + + + + + type-id + + + + type-specifier-seq + + + + + abstract-declarator + + + + + + + + type-specifier-seq + + + + type-specifier + + + + + type-specifier-seq + + + + + + + + abstract-declarator + + + + + + ptr-operator + + + + + abstract-declarator + + + + + + + direct-abstract-declarator + + + + + + direct-abstract-declarator + + + + + + + + direct-abstract-declarator + + + + + ( + + + parameter-declaration-clause + + + ) + + + + + cv-qualifier-seq + + + + + + + exception-specification + + + + + + + + + + + direct-abstract-declarator + + + + + [ + + + + + constant-expression + + + + + ] + + + + + + + ( + + + abstract-declarator + + + ) + + + + + + + + parameter-declaration-clause + + + + + + + + parameter-declaration-list + + + + + + + ... + + + + + + + + + parameter-declaration-list + + + , + + + ... + + + + + + + + parameter-declaration-list + + + + parameter-declaration + + + + + parameter-declaration-list + + + , + + + parameter-declaration + + + + + + + + parameter-declaration + + + + + + decl-specifier-seq + + + declarator + + + + + + + decl-specifier-seq + + + declarator + + + = + + + assignment-expression + + + + + + + decl-specifier-seq + + + + + abstract-declarator + + + + + + + + + decl-specifier-seq + + + + + abstract-declarator + + + + + = + + + assignment-expression + + + + + + + + function-definition + + + + + + + + decl-specifier-seq + + + + + declarator + + + + + ctor-initializer + + + + + function-body + + + + + + + + + decl-specifier-seq + + + + + declarator + + + function-try-block + + + + + + + + function-body + + compound-statement + + + + initializer + + + + + + = + + + initializer-clause + + + + + + + ( + + + expression-list + + + ) + + + + + + + + initializer-clause + + + + assignment-expression + + + + + { + + + initializer-list + + + + + , + + + + + } + + + + + + + { + + + } + + + + + + + + initializer-list + + + + initializer-clause + + + + + initializer-list + + + , + + + initializer-clause + + + + + + + + class-name + + + + identifier + + + template-id + + + + + + class-specifier + + + + class-head + + + { + + + + + member-specification + + + + + } + + + + + + class-head + + + + + + class-key + + + + + identifier + + + + + + + base-clause + + + + + + + + + class-key + + + nested-name-specifier + + + identifier + + + + + base-clause + + + + + + + + + class-key + + + + + nested-name-specifier + + + + + template-id + + + + + base-clause + + + + + + + + + + class-key + + + + class + + + struct + + + union + + + + + + member-specification + + + + + + member-declaration + + + + + member-specification + + + + + + + + + access-specifier + + + : + + + + + member-specification + + + + + + + + + + member-declaration + + + + + + + + decl-specifier-seq + + + + + + + member-declarator-list + + + + + ; + + + + + + + function-definition + + + + + ; + + + + + + + + + + + :: + + + + + nested-name-specifier + + + + + template + + + + + unqualified-id + + + ; + + + + + using-declaration + + + template-declaration + + + + + + member-declarator-list + + + + member-declarator + + + + + member-declarator-list + + + , + + + member-declarator + + + + + + + + member-declarator + + + + + + declarator + + + + + pure-specifier + + + + + + + + + declarator + + + + + constant-initializer + + + + + + + + + + + identifier + + + + + : + + + constant-expression + + + + + + + + pure-specifier + + + + = + + + 0 + + + + + + constant-initializer + + + + = + + + constant-expression + + + + + + base-clause + + + + : + + + base-specifier-list + + + + + + base-specifier-list + + + + base-specifier + + + + + base-specifier-list + + + , + + + base-specifier + + + + + + + + base-specifier + + + + + + + + :: + + + + + + + nested-name-specifier + + + + + class-name + + + + + + + virtual + + + + + access-specifier + + + + + + + :: + + + + + + + nested-name-specifier + + + + + class-name + + + + + + + access-specifier + + + + + virtual + + + + + + + :: + + + + + + + nested-name-specifier + + + + + class-name + + + + + + + + access-specifier + + + + private + + + protected + + + public + + + + + + conversion-function-id + + + + operator + + + conversion-type-id + + + + + + conversion-type-id + + + + type-specifier-seq + + + + + conversion-declarator + + + + + + + + conversion-declarator + + + + ptr-operator + + + + + conversion-declarator + + + + + + + + ctor-initializer + + + + : + + + mem-initializer-list + + + + + + mem-initializer-list + + + + mem-initializer + + + + + mem-initializer + + + , + + + mem-initializer-list + + + + + + + + mem-initializer + + + + mem-initializer-id + + + ( + + + + + expression-list + + + + + ) + + + + + + mem-initializer-id + + + + + + + + :: + + + + + + + nested-name-specifier + + + + + class-name + + + + + identifier + + + + + + operator-function-id + + + + operator + + + operator + + + + + + operator + + + + new + + + delete + + + + + new + + + [ + + + ] + + + + + + + delete + + + [ + + + ] + + + + + + + + + - + + + * + + + / + + + % + + + ^ + + + & + + + | + + + ~ + + + ! + + + = + + + < + + + > + + + += + + + -= + + + *= + + + /= + + + %= + + + ^= + + + &= + + + |= + + + << + + + >> + + + >>= + + + <<= + + + == + + + != + + + <= + + + >= + + + && + + + || + + + ++ + + + -- + + + , + + + ->* + + + -> + + + + + ( + + + ) + + + + + + + [ + + + ] + + + + + + + + template-declaration + + + + + + export + + + + + template + + + < + + + template-parameter-list + + + > + + + declaration + + + + + + template-parameter-list + + + + template-parameter + + + + + template-parameter-list + + + , + + + template-parameter + + + + + + + + template-parameter + + + + type-parameter + + + parameter-declaration + + + + + + type-parameter + + + + + + class + + + + + identifier + + + + + + + + + class + + + + + identifier + + + + + = + + + type-id + + + + + + + typename + + + + + identifier + + + + + + + + + typename + + + + + identifier + + + + + = + + + type-id + + + + + + + template + + + < + + + template-parameter-list + + + > + + + class + + + + + identifier + + + + + + + + + template + + + < + + + template-parameter-list + + + > + + + class + + + + + identifier + + + + + = + + + id-expression + + + + + + + + template-id + + + + template-name + + + < + + + + + template-argument-list + + + + + > + + + + + + template-name + + identifier + + + + template-argument-list + + + + template-argument + + + + + template-argument-list + + + , + + + template-argument + + + + + + + + template-argument + + + + assignment-expression + + + type-id + + + id-expression + + + + + + explicit-instantiation + + + + template + + + declaration + + + + + + explicit-specialization + + + + template + + + < + + + > + + + declaration + + + + + + try-block + + + + try + + + compound-statement + + + handler-seq + + + + + + function-try-block + + + + try + + + + + ctor-initializer + + + + + function-body + + + handler-seq + + + + + + handler-seq + + + + handler + + + + + handler-seq + + + + + + + + handler + + + + catch + + + ( + + + exception-declaration + + + ) + + + compound-statement + + + + + + exception-declaration + + + + + + type-specifier-seq + + + declarator + + + + + + + type-specifier-seq + + + abstract-declarator + + + + + type-specifier-seq + + + ... + + + + + + throw-expression + + + + throw + + + + + assignment-expression + + + + + + + + exception-specification + + + + throw + + + ( + + + + + type-id-list + + + + + ) + + + + + + type-id-list + + + + type-id + + + + + type-id-list + + + , + + + type-id + + + + + + + + keyword + + + + new + + + delete + + + and + + + bitand + + + bitor + + + compl + + + not + + + or + + + xor + + + enum + + + try + + + namespace + + + template + + + case + + + default + + + using + + + throw + + + break + + + continue + + + return + + + goto + + + char + + + bool + + + short + + + int + + + long + + + signed + + + unsigned + + + float + + + double + + + void + + + extern + + + private + + + protected + + + public + + + export + + + typename + + + typeid + + + if + + + else + + + switch + + + virtual + + + sizeof + + + friend + + + typedef + + + catch + + + auto + + + register + + + static + + + mutable + + + asm + + + while + + + do + + + for + + + inline + + + explicit + + + const + + + volatile + + + class + + + struct + + + union + + + this + + + operator + + + + + diff --git a/topics/grammars/csharp/ecma-334-2005/Makefile b/topics/grammars/csharp/ecma-334-2005/Makefile index be472388..6fc420f7 100644 --- a/topics/grammars/csharp/ecma-334-2005/Makefile +++ b/topics/grammars/csharp/ecma-334-2005/Makefile @@ -10,4 +10,4 @@ clean: test: make build - ../../../../shared/tools/gdts ecma-334-grammar.bgf extracted-grammar.bgf + ../../../../shared/tools/gdt ecma-334-grammar.bgf extracted-grammar.bgf diff --git a/topics/grammars/csharp/ecma-334-2005/extracted-grammar.bgf b/topics/grammars/csharp/ecma-334-2005/extracted-grammar.bgf index a1898e40..bd47f5c7 100644 --- a/topics/grammars/csharp/ecma-334-2005/extracted-grammar.bgf +++ b/topics/grammars/csharp/ecma-334-2005/extracted-grammar.bgf @@ -1,7040 +1,7039 @@ - - - - compilation-unit - - - - - - extern-alias-directives - - - - - - - using-directives - - - - - - - global-attributes - - - - - - - namespace-member-declarations - - - - - - - - namespace-name - - namespace-or-type-name - - - - type-name - - namespace-or-type-name - - - - namespace-or-type-name - - - - - - identifier - - - - - type-argument-list - - - - - - - qualified-alias-member - - - - - namespace-or-type-name - - - . - - - identifier - - - - - type-argument-list - - - - - - - - - - type - - - - value-type - - - reference-type - - - type-parameter - - - - - - value-type - - - - struct-type - - - enum-type - - - - - - struct-type - - - - type-name - - - simple-type - - - nullable-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 - - - - nullable-type - - - - non-nullable-value-type - - - ? - - - - - - non-nullable-value-type - - - - enum-type - - - type-name - - - simple-type - - - - - - reference-type - - - - class-type - - - interface-type - - - array-type - - - delegate-type - - - - - - class-type - - - - type-name - - - object - - - string - - - - - - interface-type - - type-name - - - - array-type - - - - non-array-type - - - rank-specifiers - - - - - - non-array-type - - - - value-type - - - class-type - - - interface-type - - - delegate-type - - - type-parameter - - - - - - rank-specifiers - - - - rank-specifier - - - - - rank-specifiers - - - rank-specifier - - - - - - - - rank-specifier - - - - [ - - - - - dim-separators - - - - - ] - - - - - - dim-separators - - - - , - - - - - dim-separators - - - , - - - - - - - - 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 - - - default-value-expression - - - anonymous-method-expression - - - - - - simple-name - - - - identifier - - - - - type-argument-list - - - - - - - - parenthesized-expression - - - - ( - - - expression - - - ) - - - - - - member-access - - - - - - primary-expression - - - . - - - identifier - - - - - type-argument-list - - - - - - - - - predefined-type - - - . - - - identifier - - - - - type-argument-list - - - - - - - - - qualified-alias-member - - - . - - - identifier - - - - - type-argument-list - - - - - - - - - - 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 - - - - - type-argument-list - - - - - - - - - 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 - - - ( - - - unbound-type-name - - - ) - - - - - - - typeof - - - ( - - - void - - - ) - - - - - - - - unbound-type-name - - - - - - identifier - - - - - generic-dimension-specifier - - - - - - - - - identifier - - - :: - - - identifier - - - - - generic-dimension-specifier - - - - - - - - - unbound-type-name - - - . - - - identifier - - - - - generic-dimension-specifier - - - - - - - - - - generic-dimension-specifier - - - - < - - - - - commas - - - - - > - - - - - - commas - - - - , - - - - - commas - - - , - - - - - - - - checked-expression - - - - checked - - - ( - - - expression - - - ) - - - - - - unchecked-expression - - - - unchecked - - - ( - - - expression - - - ) - - - - - - default-value-expression - - - - default - - - ( - - - type - - - ) - - - - - - anonymous-method-expression - - - - delegate - - - - - anonymous-method-signature - - - - - block - - - - - - anonymous-method-signature - - - - ( - - - - - anonymous-method-parameter-list - - - - - ) - - - - - - anonymous-method-parameter-list - - - - anonymous-method-parameter - - - - - anonymous-method-parameter-list - - - , - - - anonymous-method-parameter - - - - - - - - anonymous-method-parameter - - - - - - parameter-modifier - - - - - type - - - identifier - - - - - - unary-expression - - - - primary-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 - - - right-shift - - - 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 - - - - - - - - null-coalescing-expression - - - - conditional-or-expression - - - - - conditional-or-expression - - - ?? - - - null-coalescing-expression - - - - - - - - conditional-expression - - - - null-coalescing-expression - - - - - null-coalescing-expression - - - ? - - - expression - - - : - - - expression - - - - - - - - assignment - - - - unary-expression - - - assignment-operator - - - expression - - - - - - assignment-operator - - - - = - - - += - - - -= - - - *= - - - /= - - - %= - - - &= - - - |= - - - ^= - - - <<= - - - right-shift-assignment - - - - - - 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 - - - yield-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 - - - - - catch-clauses - - - - - finally-clause - - - - - - - - catch-clauses - - - - specific-catch-clauses - - - - - - - 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 - - - - - - yield-statement - - - - - - yield - - - return - - - expression - - - ; - - - - - - - yield - - - break - - - ; - - - - - - - - namespace-declaration - - - - namespace - - - qualified-identifier - - - namespace-body - - - - - ; - - - - - - - - qualified-identifier - - - - identifier - - - - - qualified-identifier - - - . - - - identifier - - - - - - - - namespace-body - - - - { - - - - - extern-alias-directives - - - - - - - using-directives - - - - - - - namespace-member-declarations - - - - - } - - - - - - extern-alias-directives - - - - extern-alias-directive - - - - - extern-alias-directives - - - extern-alias-directive - - - - - - - - extern-alias-directive - - - - extern - - - alias - - - identifier - - - ; - - - - - - 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 - - - - - - qualified-alias-member - - - - identifier - - - :: - - - identifier - - - - - type-argument-list - - - - - - - - class-declaration - - - - - - attributes - - - - - - - class-modifiers - - - - - - - partial - - - - - class - - - identifier - - - - - type-parameter-list - - - - - - - class-base - - - - - - - type-parameter-constraints-clauses - - - - - class-body - - - - - ; - - - - - - - - class-modifiers - - - - class-modifier - - - - - class-modifiers - - - class-modifier - - - - - - - - class-modifier - - - - new - - - public - - - protected - - - internal - - - private - - - abstract - - - sealed - - - static - - - - - - 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 - - - finalizer-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 - - - - - - - - variable-initializer - - - - expression - - - array-initializer - - - - - - method-declaration - - - - method-header - - - method-body - - - - - - method-header - - - - - - attributes - - - - - - - method-modifiers - - - - - return-type - - - member-name - - - - - type-parameter-list - - - - - ( - - - - - formal-parameter-list - - - - - ) - - - - - type-parameter-constraints-clauses - - - - - - - - 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 - - - - - - - accessor-modifier - - - - - get - - - accessor-body - - - - - - set-accessor-declaration - - - - - - attributes - - - - - - - accessor-modifier - - - - - set - - - accessor-body - - - - - - accessor-modifier - - - - protected - - - internal - - - private - - - - - protected - - - internal - - - - - - - internal - - - protected - - - - - - - - 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 - - - - + - - - - - - - * - - - / - - - % - - - & - - - | - - - ^ - - - << - - - right-shift - - - == - - - != - - - > - - - < - - - >= - - - <= - - - - - - 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 - - - ; - - - - - - finalizer-declaration - - - - - - attributes - - - - - - - extern - - - - - ~ - - - identifier - - - ( - - - ) - - - finalizer-body - - - - - - finalizer-body - - - - block - - - ; - - - - - - struct-declaration - - - - - - attributes - - - - - - - struct-modifiers - - - - - - - partial - - - - - struct - - - identifier - - - - - type-parameter-list - - - - - - - struct-interfaces - - - - - - - type-parameter-constraints-clauses - - - - - 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-initializer - - - - - - { - - - - - variable-initializer-list - - - - - } - - - - - - - { - - - variable-initializer-list - - - , - - - } - - - - - - - - variable-initializer-list - - - - variable-initializer - - - - - variable-initializer-list - - - , - - - variable-initializer - - - - - - - - interface-declaration - - - - - - attributes - - - - - - - interface-modifiers - - - - - - - partial - - - - - interface - - - identifier - - - - - type-parameter-list - - - - - - - interface-base - - - - - - - type-parameter-constraints-clauses - - - - - 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 - - - - - type-parameter-list - - - - - ( - - - - - formal-parameter-list - - - - - ) - - - - - type-parameter-constraints-clauses - - - - - ; - - - - - - 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 - - - return-type - - - identifier - - - - - type-parameter-list - - - - - ( - - - - - formal-parameter-list - - - - - ) - - - - - type-parameter-constraints-clauses - - - - - ; - - - - - - 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 - - - - identifier - - - keyword - - - - - - 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 - - - - identifier - - - keyword - - - - - - 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 - - - - type-parameter-list - - - - < - - - type-parameters - - - > - - - - - - type-parameters - - - - - - - - attributes - - - - - type-parameter - - - - - - - type-parameters - - - , - - - - - attributes - - - - - type-parameter - - - - - - - - type-parameter - - identifier - - - - type-argument-list - - - - < - - - type-arguments - - - > - - - - - - type-arguments - - - - type-argument - - - - - type-arguments - - - , - - - type-argument - - - - - - - - type-argument - - type - - - - type-parameter-constraints-clauses - - - - type-parameter-constraints-clause - - - - - type-parameter-constraints-clauses - - - type-parameter-constraints-clause - - - - - - - - type-parameter-constraints-clause - - - - where - - - type-parameter - - - : - - - type-parameter-constraints - - - - - - type-parameter-constraints - - - - primary-constraint - - - secondary-constraints - - - constructor-constraint - - - - - primary-constraint - - - , - - - secondary-constraints - - - - - - - primary-constraint - - - , - - - constructor-constraint - - - - - - - secondary-constraints - - - , - - - constructor-constraint - - - - - - - primary-constraint - - - , - - - secondary-constraints - - - , - - - constructor-constraint - - - - - - - - primary-constraint - - - - class-type - - - class - - - struct - - - - - - secondary-constraints - - - - interface-type - - - type-parameter - - - - - secondary-constraints - - - , - - - interface-type - - - - - - - secondary-constraints - - - , - - - type-parameter - - - - - - - - constructor-constraint - - - - new - - - ( - - - ) - - - - - - keyword - - - - abstract - - - as - - - base - - - bool - - - break - - - byte - - - case - - - catch - - - char - - - checked - - - class - - - const - - - continue - - - decimal - - - default - - - delegate - - - do - - - double - - - else - - - enum - - - event - - - explicit - - - extern - - - false - - - finally - - - fixed - - - float - - - for - - - foreach - - - goto - - - if - - - implicit - - - in - - - int - - - interface - - - internal - - - is - - - lock - - - long - - - namespace - - - new - - - null - - - object - - - operator - - - out - - - override - - - params - - - private - - - protected - - - public - - - readonly - - - ref - - - return - - - sbyte - - - sealed - - - short - - - sizeof - - - stackalloc - - - static - - - string - - - struct - - - switch - - - this - - - throw - - - true - - - try - - - typeof - - - uint - - - ulong - - - unchecked - - - unsafe - - - ushort - - - using - - - virtual - - - void - - - volatile - - - while - - - get - - - set - - - yield - - - add - - - remove - - - alias - - - partial - - - where - - - - - \ No newline at end of file + + + compilation-unit + + + + + + extern-alias-directives + + + + + + + using-directives + + + + + + + global-attributes + + + + + + + namespace-member-declarations + + + + + + + + namespace-name + + namespace-or-type-name + + + + type-name + + namespace-or-type-name + + + + namespace-or-type-name + + + + + + identifier + + + + + type-argument-list + + + + + + + qualified-alias-member + + + + + namespace-or-type-name + + + . + + + identifier + + + + + type-argument-list + + + + + + + + + + type + + + + value-type + + + reference-type + + + type-parameter + + + + + + value-type + + + + struct-type + + + enum-type + + + + + + struct-type + + + + type-name + + + simple-type + + + nullable-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 + + + + nullable-type + + + + non-nullable-value-type + + + ? + + + + + + non-nullable-value-type + + + + enum-type + + + type-name + + + simple-type + + + + + + reference-type + + + + class-type + + + interface-type + + + array-type + + + delegate-type + + + + + + class-type + + + + type-name + + + object + + + string + + + + + + interface-type + + type-name + + + + array-type + + + + non-array-type + + + rank-specifiers + + + + + + non-array-type + + + + value-type + + + class-type + + + interface-type + + + delegate-type + + + type-parameter + + + + + + rank-specifiers + + + + rank-specifier + + + + + rank-specifiers + + + rank-specifier + + + + + + + + rank-specifier + + + + [ + + + + + dim-separators + + + + + ] + + + + + + dim-separators + + + + , + + + + + dim-separators + + + , + + + + + + + + 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 + + + default-value-expression + + + anonymous-method-expression + + + + + + simple-name + + + + identifier + + + + + type-argument-list + + + + + + + + parenthesized-expression + + + + ( + + + expression + + + ) + + + + + + member-access + + + + + + primary-expression + + + . + + + identifier + + + + + type-argument-list + + + + + + + + + predefined-type + + + . + + + identifier + + + + + type-argument-list + + + + + + + + + qualified-alias-member + + + . + + + identifier + + + + + type-argument-list + + + + + + + + + + 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 + + + + + type-argument-list + + + + + + + + + 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 + + + ( + + + unbound-type-name + + + ) + + + + + + + typeof + + + ( + + + void + + + ) + + + + + + + + unbound-type-name + + + + + + identifier + + + + + generic-dimension-specifier + + + + + + + + + identifier + + + :: + + + identifier + + + + + generic-dimension-specifier + + + + + + + + + unbound-type-name + + + . + + + identifier + + + + + generic-dimension-specifier + + + + + + + + + + generic-dimension-specifier + + + + < + + + + + commas + + + + + > + + + + + + commas + + + + , + + + + + commas + + + , + + + + + + + + checked-expression + + + + checked + + + ( + + + expression + + + ) + + + + + + unchecked-expression + + + + unchecked + + + ( + + + expression + + + ) + + + + + + default-value-expression + + + + default + + + ( + + + type + + + ) + + + + + + anonymous-method-expression + + + + delegate + + + + + anonymous-method-signature + + + + + block + + + + + + anonymous-method-signature + + + + ( + + + + + anonymous-method-parameter-list + + + + + ) + + + + + + anonymous-method-parameter-list + + + + anonymous-method-parameter + + + + + anonymous-method-parameter-list + + + , + + + anonymous-method-parameter + + + + + + + + anonymous-method-parameter + + + + + + parameter-modifier + + + + + type + + + identifier + + + + + + unary-expression + + + + primary-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 + + + right-shift + + + 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 + + + + + + + + null-coalescing-expression + + + + conditional-or-expression + + + + + conditional-or-expression + + + ?? + + + null-coalescing-expression + + + + + + + + conditional-expression + + + + null-coalescing-expression + + + + + null-coalescing-expression + + + ? + + + expression + + + : + + + expression + + + + + + + + assignment + + + + unary-expression + + + assignment-operator + + + expression + + + + + + assignment-operator + + + + = + + + += + + + -= + + + *= + + + /= + + + %= + + + &= + + + |= + + + ^= + + + <<= + + + right-shift-assignment + + + + + + 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 + + + yield-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 + + + + + catch-clauses + + + + + finally-clause + + + + + + + + catch-clauses + + + + specific-catch-clauses + + + + + + + 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 + + + + + + yield-statement + + + + + + yield + + + return + + + expression + + + ; + + + + + + + yield + + + break + + + ; + + + + + + + + namespace-declaration + + + + namespace + + + qualified-identifier + + + namespace-body + + + + + ; + + + + + + + + qualified-identifier + + + + identifier + + + + + qualified-identifier + + + . + + + identifier + + + + + + + + namespace-body + + + + { + + + + + extern-alias-directives + + + + + + + using-directives + + + + + + + namespace-member-declarations + + + + + } + + + + + + extern-alias-directives + + + + extern-alias-directive + + + + + extern-alias-directives + + + extern-alias-directive + + + + + + + + extern-alias-directive + + + + extern + + + alias + + + identifier + + + ; + + + + + + 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 + + + + + + qualified-alias-member + + + + identifier + + + :: + + + identifier + + + + + type-argument-list + + + + + + + + class-declaration + + + + + + attributes + + + + + + + class-modifiers + + + + + + + partial + + + + + class + + + identifier + + + + + type-parameter-list + + + + + + + class-base + + + + + + + type-parameter-constraints-clauses + + + + + class-body + + + + + ; + + + + + + + + class-modifiers + + + + class-modifier + + + + + class-modifiers + + + class-modifier + + + + + + + + class-modifier + + + + new + + + public + + + protected + + + internal + + + private + + + abstract + + + sealed + + + static + + + + + + 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 + + + finalizer-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 + + + + + + + + variable-initializer + + + + expression + + + array-initializer + + + + + + method-declaration + + + + method-header + + + method-body + + + + + + method-header + + + + + + attributes + + + + + + + method-modifiers + + + + + return-type + + + member-name + + + + + type-parameter-list + + + + + ( + + + + + formal-parameter-list + + + + + ) + + + + + type-parameter-constraints-clauses + + + + + + + + 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 + + + + + + + accessor-modifier + + + + + get + + + accessor-body + + + + + + set-accessor-declaration + + + + + + attributes + + + + + + + accessor-modifier + + + + + set + + + accessor-body + + + + + + accessor-modifier + + + + protected + + + internal + + + private + + + + + protected + + + internal + + + + + + + internal + + + protected + + + + + + + + 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 + + + + + + + + - + + + * + + + / + + + % + + + & + + + | + + + ^ + + + << + + + right-shift + + + == + + + != + + + > + + + < + + + >= + + + <= + + + + + + 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 + + + ; + + + + + + finalizer-declaration + + + + + + attributes + + + + + + + extern + + + + + ~ + + + identifier + + + ( + + + ) + + + finalizer-body + + + + + + finalizer-body + + + + block + + + ; + + + + + + struct-declaration + + + + + + attributes + + + + + + + struct-modifiers + + + + + + + partial + + + + + struct + + + identifier + + + + + type-parameter-list + + + + + + + struct-interfaces + + + + + + + type-parameter-constraints-clauses + + + + + 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-initializer + + + + + + { + + + + + variable-initializer-list + + + + + } + + + + + + + { + + + variable-initializer-list + + + , + + + } + + + + + + + + variable-initializer-list + + + + variable-initializer + + + + + variable-initializer-list + + + , + + + variable-initializer + + + + + + + + interface-declaration + + + + + + attributes + + + + + + + interface-modifiers + + + + + + + partial + + + + + interface + + + identifier + + + + + type-parameter-list + + + + + + + interface-base + + + + + + + type-parameter-constraints-clauses + + + + + 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 + + + + + type-parameter-list + + + + + ( + + + + + formal-parameter-list + + + + + ) + + + + + type-parameter-constraints-clauses + + + + + ; + + + + + + 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 + + + return-type + + + identifier + + + + + type-parameter-list + + + + + ( + + + + + formal-parameter-list + + + + + ) + + + + + type-parameter-constraints-clauses + + + + + ; + + + + + + 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 + + + + identifier + + + keyword + + + + + + 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 + + + + identifier + + + keyword + + + + + + 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 + + + + type-parameter-list + + + + < + + + type-parameters + + + > + + + + + + type-parameters + + + + + + + + attributes + + + + + type-parameter + + + + + + + type-parameters + + + , + + + + + attributes + + + + + type-parameter + + + + + + + + type-parameter + + identifier + + + + type-argument-list + + + + < + + + type-arguments + + + > + + + + + + type-arguments + + + + type-argument + + + + + type-arguments + + + , + + + type-argument + + + + + + + + type-argument + + type + + + + type-parameter-constraints-clauses + + + + type-parameter-constraints-clause + + + + + type-parameter-constraints-clauses + + + type-parameter-constraints-clause + + + + + + + + type-parameter-constraints-clause + + + + where + + + type-parameter + + + : + + + type-parameter-constraints + + + + + + type-parameter-constraints + + + + primary-constraint + + + secondary-constraints + + + constructor-constraint + + + + + primary-constraint + + + , + + + secondary-constraints + + + + + + + primary-constraint + + + , + + + constructor-constraint + + + + + + + secondary-constraints + + + , + + + constructor-constraint + + + + + + + primary-constraint + + + , + + + secondary-constraints + + + , + + + constructor-constraint + + + + + + + + primary-constraint + + + + class-type + + + class + + + struct + + + + + + secondary-constraints + + + + interface-type + + + type-parameter + + + + + secondary-constraints + + + , + + + interface-type + + + + + + + secondary-constraints + + + , + + + type-parameter + + + + + + + + constructor-constraint + + + + new + + + ( + + + ) + + + + + + keyword + + + + abstract + + + as + + + base + + + bool + + + break + + + byte + + + case + + + catch + + + char + + + checked + + + class + + + const + + + continue + + + decimal + + + default + + + delegate + + + do + + + double + + + else + + + enum + + + event + + + explicit + + + extern + + + false + + + finally + + + fixed + + + float + + + for + + + foreach + + + goto + + + if + + + implicit + + + in + + + int + + + interface + + + internal + + + is + + + lock + + + long + + + namespace + + + new + + + null + + + object + + + operator + + + out + + + override + + + params + + + private + + + protected + + + public + + + readonly + + + ref + + + return + + + sbyte + + + sealed + + + short + + + sizeof + + + stackalloc + + + static + + + string + + + struct + + + switch + + + this + + + throw + + + true + + + try + + + typeof + + + uint + + + ulong + + + unchecked + + + unsafe + + + ushort + + + using + + + virtual + + + void + + + volatile + + + while + + + get + + + set + + + yield + + + add + + + remove + + + alias + + + partial + + + where + + + + + diff --git a/topics/grammars/csharp/ecma-334-2006/Makefile b/topics/grammars/csharp/ecma-334-2006/Makefile index be472388..6fc420f7 100644 --- a/topics/grammars/csharp/ecma-334-2006/Makefile +++ b/topics/grammars/csharp/ecma-334-2006/Makefile @@ -10,4 +10,4 @@ clean: test: make build - ../../../../shared/tools/gdts ecma-334-grammar.bgf extracted-grammar.bgf + ../../../../shared/tools/gdt ecma-334-grammar.bgf extracted-grammar.bgf diff --git a/topics/grammars/csharp/ecma-334-2006/extracted-grammar.bgf b/topics/grammars/csharp/ecma-334-2006/extracted-grammar.bgf index a1898e40..bd47f5c7 100644 --- a/topics/grammars/csharp/ecma-334-2006/extracted-grammar.bgf +++ b/topics/grammars/csharp/ecma-334-2006/extracted-grammar.bgf @@ -1,7040 +1,7039 @@ - - - - compilation-unit - - - - - - extern-alias-directives - - - - - - - using-directives - - - - - - - global-attributes - - - - - - - namespace-member-declarations - - - - - - - - namespace-name - - namespace-or-type-name - - - - type-name - - namespace-or-type-name - - - - namespace-or-type-name - - - - - - identifier - - - - - type-argument-list - - - - - - - qualified-alias-member - - - - - namespace-or-type-name - - - . - - - identifier - - - - - type-argument-list - - - - - - - - - - type - - - - value-type - - - reference-type - - - type-parameter - - - - - - value-type - - - - struct-type - - - enum-type - - - - - - struct-type - - - - type-name - - - simple-type - - - nullable-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 - - - - nullable-type - - - - non-nullable-value-type - - - ? - - - - - - non-nullable-value-type - - - - enum-type - - - type-name - - - simple-type - - - - - - reference-type - - - - class-type - - - interface-type - - - array-type - - - delegate-type - - - - - - class-type - - - - type-name - - - object - - - string - - - - - - interface-type - - type-name - - - - array-type - - - - non-array-type - - - rank-specifiers - - - - - - non-array-type - - - - value-type - - - class-type - - - interface-type - - - delegate-type - - - type-parameter - - - - - - rank-specifiers - - - - rank-specifier - - - - - rank-specifiers - - - rank-specifier - - - - - - - - rank-specifier - - - - [ - - - - - dim-separators - - - - - ] - - - - - - dim-separators - - - - , - - - - - dim-separators - - - , - - - - - - - - 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 - - - default-value-expression - - - anonymous-method-expression - - - - - - simple-name - - - - identifier - - - - - type-argument-list - - - - - - - - parenthesized-expression - - - - ( - - - expression - - - ) - - - - - - member-access - - - - - - primary-expression - - - . - - - identifier - - - - - type-argument-list - - - - - - - - - predefined-type - - - . - - - identifier - - - - - type-argument-list - - - - - - - - - qualified-alias-member - - - . - - - identifier - - - - - type-argument-list - - - - - - - - - - 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 - - - - - type-argument-list - - - - - - - - - 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 - - - ( - - - unbound-type-name - - - ) - - - - - - - typeof - - - ( - - - void - - - ) - - - - - - - - unbound-type-name - - - - - - identifier - - - - - generic-dimension-specifier - - - - - - - - - identifier - - - :: - - - identifier - - - - - generic-dimension-specifier - - - - - - - - - unbound-type-name - - - . - - - identifier - - - - - generic-dimension-specifier - - - - - - - - - - generic-dimension-specifier - - - - < - - - - - commas - - - - - > - - - - - - commas - - - - , - - - - - commas - - - , - - - - - - - - checked-expression - - - - checked - - - ( - - - expression - - - ) - - - - - - unchecked-expression - - - - unchecked - - - ( - - - expression - - - ) - - - - - - default-value-expression - - - - default - - - ( - - - type - - - ) - - - - - - anonymous-method-expression - - - - delegate - - - - - anonymous-method-signature - - - - - block - - - - - - anonymous-method-signature - - - - ( - - - - - anonymous-method-parameter-list - - - - - ) - - - - - - anonymous-method-parameter-list - - - - anonymous-method-parameter - - - - - anonymous-method-parameter-list - - - , - - - anonymous-method-parameter - - - - - - - - anonymous-method-parameter - - - - - - parameter-modifier - - - - - type - - - identifier - - - - - - unary-expression - - - - primary-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 - - - right-shift - - - 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 - - - - - - - - null-coalescing-expression - - - - conditional-or-expression - - - - - conditional-or-expression - - - ?? - - - null-coalescing-expression - - - - - - - - conditional-expression - - - - null-coalescing-expression - - - - - null-coalescing-expression - - - ? - - - expression - - - : - - - expression - - - - - - - - assignment - - - - unary-expression - - - assignment-operator - - - expression - - - - - - assignment-operator - - - - = - - - += - - - -= - - - *= - - - /= - - - %= - - - &= - - - |= - - - ^= - - - <<= - - - right-shift-assignment - - - - - - 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 - - - yield-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 - - - - - catch-clauses - - - - - finally-clause - - - - - - - - catch-clauses - - - - specific-catch-clauses - - - - - - - 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 - - - - - - yield-statement - - - - - - yield - - - return - - - expression - - - ; - - - - - - - yield - - - break - - - ; - - - - - - - - namespace-declaration - - - - namespace - - - qualified-identifier - - - namespace-body - - - - - ; - - - - - - - - qualified-identifier - - - - identifier - - - - - qualified-identifier - - - . - - - identifier - - - - - - - - namespace-body - - - - { - - - - - extern-alias-directives - - - - - - - using-directives - - - - - - - namespace-member-declarations - - - - - } - - - - - - extern-alias-directives - - - - extern-alias-directive - - - - - extern-alias-directives - - - extern-alias-directive - - - - - - - - extern-alias-directive - - - - extern - - - alias - - - identifier - - - ; - - - - - - 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 - - - - - - qualified-alias-member - - - - identifier - - - :: - - - identifier - - - - - type-argument-list - - - - - - - - class-declaration - - - - - - attributes - - - - - - - class-modifiers - - - - - - - partial - - - - - class - - - identifier - - - - - type-parameter-list - - - - - - - class-base - - - - - - - type-parameter-constraints-clauses - - - - - class-body - - - - - ; - - - - - - - - class-modifiers - - - - class-modifier - - - - - class-modifiers - - - class-modifier - - - - - - - - class-modifier - - - - new - - - public - - - protected - - - internal - - - private - - - abstract - - - sealed - - - static - - - - - - 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 - - - finalizer-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 - - - - - - - - variable-initializer - - - - expression - - - array-initializer - - - - - - method-declaration - - - - method-header - - - method-body - - - - - - method-header - - - - - - attributes - - - - - - - method-modifiers - - - - - return-type - - - member-name - - - - - type-parameter-list - - - - - ( - - - - - formal-parameter-list - - - - - ) - - - - - type-parameter-constraints-clauses - - - - - - - - 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 - - - - - - - accessor-modifier - - - - - get - - - accessor-body - - - - - - set-accessor-declaration - - - - - - attributes - - - - - - - accessor-modifier - - - - - set - - - accessor-body - - - - - - accessor-modifier - - - - protected - - - internal - - - private - - - - - protected - - - internal - - - - - - - internal - - - protected - - - - - - - - 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 - - - - + - - - - - - - * - - - / - - - % - - - & - - - | - - - ^ - - - << - - - right-shift - - - == - - - != - - - > - - - < - - - >= - - - <= - - - - - - 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 - - - ; - - - - - - finalizer-declaration - - - - - - attributes - - - - - - - extern - - - - - ~ - - - identifier - - - ( - - - ) - - - finalizer-body - - - - - - finalizer-body - - - - block - - - ; - - - - - - struct-declaration - - - - - - attributes - - - - - - - struct-modifiers - - - - - - - partial - - - - - struct - - - identifier - - - - - type-parameter-list - - - - - - - struct-interfaces - - - - - - - type-parameter-constraints-clauses - - - - - 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-initializer - - - - - - { - - - - - variable-initializer-list - - - - - } - - - - - - - { - - - variable-initializer-list - - - , - - - } - - - - - - - - variable-initializer-list - - - - variable-initializer - - - - - variable-initializer-list - - - , - - - variable-initializer - - - - - - - - interface-declaration - - - - - - attributes - - - - - - - interface-modifiers - - - - - - - partial - - - - - interface - - - identifier - - - - - type-parameter-list - - - - - - - interface-base - - - - - - - type-parameter-constraints-clauses - - - - - 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 - - - - - type-parameter-list - - - - - ( - - - - - formal-parameter-list - - - - - ) - - - - - type-parameter-constraints-clauses - - - - - ; - - - - - - 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 - - - return-type - - - identifier - - - - - type-parameter-list - - - - - ( - - - - - formal-parameter-list - - - - - ) - - - - - type-parameter-constraints-clauses - - - - - ; - - - - - - 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 - - - - identifier - - - keyword - - - - - - 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 - - - - identifier - - - keyword - - - - - - 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 - - - - type-parameter-list - - - - < - - - type-parameters - - - > - - - - - - type-parameters - - - - - - - - attributes - - - - - type-parameter - - - - - - - type-parameters - - - , - - - - - attributes - - - - - type-parameter - - - - - - - - type-parameter - - identifier - - - - type-argument-list - - - - < - - - type-arguments - - - > - - - - - - type-arguments - - - - type-argument - - - - - type-arguments - - - , - - - type-argument - - - - - - - - type-argument - - type - - - - type-parameter-constraints-clauses - - - - type-parameter-constraints-clause - - - - - type-parameter-constraints-clauses - - - type-parameter-constraints-clause - - - - - - - - type-parameter-constraints-clause - - - - where - - - type-parameter - - - : - - - type-parameter-constraints - - - - - - type-parameter-constraints - - - - primary-constraint - - - secondary-constraints - - - constructor-constraint - - - - - primary-constraint - - - , - - - secondary-constraints - - - - - - - primary-constraint - - - , - - - constructor-constraint - - - - - - - secondary-constraints - - - , - - - constructor-constraint - - - - - - - primary-constraint - - - , - - - secondary-constraints - - - , - - - constructor-constraint - - - - - - - - primary-constraint - - - - class-type - - - class - - - struct - - - - - - secondary-constraints - - - - interface-type - - - type-parameter - - - - - secondary-constraints - - - , - - - interface-type - - - - - - - secondary-constraints - - - , - - - type-parameter - - - - - - - - constructor-constraint - - - - new - - - ( - - - ) - - - - - - keyword - - - - abstract - - - as - - - base - - - bool - - - break - - - byte - - - case - - - catch - - - char - - - checked - - - class - - - const - - - continue - - - decimal - - - default - - - delegate - - - do - - - double - - - else - - - enum - - - event - - - explicit - - - extern - - - false - - - finally - - - fixed - - - float - - - for - - - foreach - - - goto - - - if - - - implicit - - - in - - - int - - - interface - - - internal - - - is - - - lock - - - long - - - namespace - - - new - - - null - - - object - - - operator - - - out - - - override - - - params - - - private - - - protected - - - public - - - readonly - - - ref - - - return - - - sbyte - - - sealed - - - short - - - sizeof - - - stackalloc - - - static - - - string - - - struct - - - switch - - - this - - - throw - - - true - - - try - - - typeof - - - uint - - - ulong - - - unchecked - - - unsafe - - - ushort - - - using - - - virtual - - - void - - - volatile - - - while - - - get - - - set - - - yield - - - add - - - remove - - - alias - - - partial - - - where - - - - - \ No newline at end of file + + + compilation-unit + + + + + + extern-alias-directives + + + + + + + using-directives + + + + + + + global-attributes + + + + + + + namespace-member-declarations + + + + + + + + namespace-name + + namespace-or-type-name + + + + type-name + + namespace-or-type-name + + + + namespace-or-type-name + + + + + + identifier + + + + + type-argument-list + + + + + + + qualified-alias-member + + + + + namespace-or-type-name + + + . + + + identifier + + + + + type-argument-list + + + + + + + + + + type + + + + value-type + + + reference-type + + + type-parameter + + + + + + value-type + + + + struct-type + + + enum-type + + + + + + struct-type + + + + type-name + + + simple-type + + + nullable-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 + + + + nullable-type + + + + non-nullable-value-type + + + ? + + + + + + non-nullable-value-type + + + + enum-type + + + type-name + + + simple-type + + + + + + reference-type + + + + class-type + + + interface-type + + + array-type + + + delegate-type + + + + + + class-type + + + + type-name + + + object + + + string + + + + + + interface-type + + type-name + + + + array-type + + + + non-array-type + + + rank-specifiers + + + + + + non-array-type + + + + value-type + + + class-type + + + interface-type + + + delegate-type + + + type-parameter + + + + + + rank-specifiers + + + + rank-specifier + + + + + rank-specifiers + + + rank-specifier + + + + + + + + rank-specifier + + + + [ + + + + + dim-separators + + + + + ] + + + + + + dim-separators + + + + , + + + + + dim-separators + + + , + + + + + + + + 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 + + + default-value-expression + + + anonymous-method-expression + + + + + + simple-name + + + + identifier + + + + + type-argument-list + + + + + + + + parenthesized-expression + + + + ( + + + expression + + + ) + + + + + + member-access + + + + + + primary-expression + + + . + + + identifier + + + + + type-argument-list + + + + + + + + + predefined-type + + + . + + + identifier + + + + + type-argument-list + + + + + + + + + qualified-alias-member + + + . + + + identifier + + + + + type-argument-list + + + + + + + + + + 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 + + + + + type-argument-list + + + + + + + + + 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 + + + ( + + + unbound-type-name + + + ) + + + + + + + typeof + + + ( + + + void + + + ) + + + + + + + + unbound-type-name + + + + + + identifier + + + + + generic-dimension-specifier + + + + + + + + + identifier + + + :: + + + identifier + + + + + generic-dimension-specifier + + + + + + + + + unbound-type-name + + + . + + + identifier + + + + + generic-dimension-specifier + + + + + + + + + + generic-dimension-specifier + + + + < + + + + + commas + + + + + > + + + + + + commas + + + + , + + + + + commas + + + , + + + + + + + + checked-expression + + + + checked + + + ( + + + expression + + + ) + + + + + + unchecked-expression + + + + unchecked + + + ( + + + expression + + + ) + + + + + + default-value-expression + + + + default + + + ( + + + type + + + ) + + + + + + anonymous-method-expression + + + + delegate + + + + + anonymous-method-signature + + + + + block + + + + + + anonymous-method-signature + + + + ( + + + + + anonymous-method-parameter-list + + + + + ) + + + + + + anonymous-method-parameter-list + + + + anonymous-method-parameter + + + + + anonymous-method-parameter-list + + + , + + + anonymous-method-parameter + + + + + + + + anonymous-method-parameter + + + + + + parameter-modifier + + + + + type + + + identifier + + + + + + unary-expression + + + + primary-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 + + + right-shift + + + 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 + + + + + + + + null-coalescing-expression + + + + conditional-or-expression + + + + + conditional-or-expression + + + ?? + + + null-coalescing-expression + + + + + + + + conditional-expression + + + + null-coalescing-expression + + + + + null-coalescing-expression + + + ? + + + expression + + + : + + + expression + + + + + + + + assignment + + + + unary-expression + + + assignment-operator + + + expression + + + + + + assignment-operator + + + + = + + + += + + + -= + + + *= + + + /= + + + %= + + + &= + + + |= + + + ^= + + + <<= + + + right-shift-assignment + + + + + + 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 + + + yield-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 + + + + + catch-clauses + + + + + finally-clause + + + + + + + + catch-clauses + + + + specific-catch-clauses + + + + + + + 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 + + + + + + yield-statement + + + + + + yield + + + return + + + expression + + + ; + + + + + + + yield + + + break + + + ; + + + + + + + + namespace-declaration + + + + namespace + + + qualified-identifier + + + namespace-body + + + + + ; + + + + + + + + qualified-identifier + + + + identifier + + + + + qualified-identifier + + + . + + + identifier + + + + + + + + namespace-body + + + + { + + + + + extern-alias-directives + + + + + + + using-directives + + + + + + + namespace-member-declarations + + + + + } + + + + + + extern-alias-directives + + + + extern-alias-directive + + + + + extern-alias-directives + + + extern-alias-directive + + + + + + + + extern-alias-directive + + + + extern + + + alias + + + identifier + + + ; + + + + + + 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 + + + + + + qualified-alias-member + + + + identifier + + + :: + + + identifier + + + + + type-argument-list + + + + + + + + class-declaration + + + + + + attributes + + + + + + + class-modifiers + + + + + + + partial + + + + + class + + + identifier + + + + + type-parameter-list + + + + + + + class-base + + + + + + + type-parameter-constraints-clauses + + + + + class-body + + + + + ; + + + + + + + + class-modifiers + + + + class-modifier + + + + + class-modifiers + + + class-modifier + + + + + + + + class-modifier + + + + new + + + public + + + protected + + + internal + + + private + + + abstract + + + sealed + + + static + + + + + + 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 + + + finalizer-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 + + + + + + + + variable-initializer + + + + expression + + + array-initializer + + + + + + method-declaration + + + + method-header + + + method-body + + + + + + method-header + + + + + + attributes + + + + + + + method-modifiers + + + + + return-type + + + member-name + + + + + type-parameter-list + + + + + ( + + + + + formal-parameter-list + + + + + ) + + + + + type-parameter-constraints-clauses + + + + + + + + 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 + + + + + + + accessor-modifier + + + + + get + + + accessor-body + + + + + + set-accessor-declaration + + + + + + attributes + + + + + + + accessor-modifier + + + + + set + + + accessor-body + + + + + + accessor-modifier + + + + protected + + + internal + + + private + + + + + protected + + + internal + + + + + + + internal + + + protected + + + + + + + + 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 + + + + + + + + - + + + * + + + / + + + % + + + & + + + | + + + ^ + + + << + + + right-shift + + + == + + + != + + + > + + + < + + + >= + + + <= + + + + + + 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 + + + ; + + + + + + finalizer-declaration + + + + + + attributes + + + + + + + extern + + + + + ~ + + + identifier + + + ( + + + ) + + + finalizer-body + + + + + + finalizer-body + + + + block + + + ; + + + + + + struct-declaration + + + + + + attributes + + + + + + + struct-modifiers + + + + + + + partial + + + + + struct + + + identifier + + + + + type-parameter-list + + + + + + + struct-interfaces + + + + + + + type-parameter-constraints-clauses + + + + + 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-initializer + + + + + + { + + + + + variable-initializer-list + + + + + } + + + + + + + { + + + variable-initializer-list + + + , + + + } + + + + + + + + variable-initializer-list + + + + variable-initializer + + + + + variable-initializer-list + + + , + + + variable-initializer + + + + + + + + interface-declaration + + + + + + attributes + + + + + + + interface-modifiers + + + + + + + partial + + + + + interface + + + identifier + + + + + type-parameter-list + + + + + + + interface-base + + + + + + + type-parameter-constraints-clauses + + + + + 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 + + + + + type-parameter-list + + + + + ( + + + + + formal-parameter-list + + + + + ) + + + + + type-parameter-constraints-clauses + + + + + ; + + + + + + 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 + + + return-type + + + identifier + + + + + type-parameter-list + + + + + ( + + + + + formal-parameter-list + + + + + ) + + + + + type-parameter-constraints-clauses + + + + + ; + + + + + + 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 + + + + identifier + + + keyword + + + + + + 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 + + + + identifier + + + keyword + + + + + + 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 + + + + type-parameter-list + + + + < + + + type-parameters + + + > + + + + + + type-parameters + + + + + + + + attributes + + + + + type-parameter + + + + + + + type-parameters + + + , + + + + + attributes + + + + + type-parameter + + + + + + + + type-parameter + + identifier + + + + type-argument-list + + + + < + + + type-arguments + + + > + + + + + + type-arguments + + + + type-argument + + + + + type-arguments + + + , + + + type-argument + + + + + + + + type-argument + + type + + + + type-parameter-constraints-clauses + + + + type-parameter-constraints-clause + + + + + type-parameter-constraints-clauses + + + type-parameter-constraints-clause + + + + + + + + type-parameter-constraints-clause + + + + where + + + type-parameter + + + : + + + type-parameter-constraints + + + + + + type-parameter-constraints + + + + primary-constraint + + + secondary-constraints + + + constructor-constraint + + + + + primary-constraint + + + , + + + secondary-constraints + + + + + + + primary-constraint + + + , + + + constructor-constraint + + + + + + + secondary-constraints + + + , + + + constructor-constraint + + + + + + + primary-constraint + + + , + + + secondary-constraints + + + , + + + constructor-constraint + + + + + + + + primary-constraint + + + + class-type + + + class + + + struct + + + + + + secondary-constraints + + + + interface-type + + + type-parameter + + + + + secondary-constraints + + + , + + + interface-type + + + + + + + secondary-constraints + + + , + + + type-parameter + + + + + + + + constructor-constraint + + + + new + + + ( + + + ) + + + + + + keyword + + + + abstract + + + as + + + base + + + bool + + + break + + + byte + + + case + + + catch + + + char + + + checked + + + class + + + const + + + continue + + + decimal + + + default + + + delegate + + + do + + + double + + + else + + + enum + + + event + + + explicit + + + extern + + + false + + + finally + + + fixed + + + float + + + for + + + foreach + + + goto + + + if + + + implicit + + + in + + + int + + + interface + + + internal + + + is + + + lock + + + long + + + namespace + + + new + + + null + + + object + + + operator + + + out + + + override + + + params + + + private + + + protected + + + public + + + readonly + + + ref + + + return + + + sbyte + + + sealed + + + short + + + sizeof + + + stackalloc + + + static + + + string + + + struct + + + switch + + + this + + + throw + + + true + + + try + + + typeof + + + uint + + + ulong + + + unchecked + + + unsafe + + + ushort + + + using + + + virtual + + + void + + + volatile + + + while + + + get + + + set + + + yield + + + add + + + remove + + + alias + + + partial + + + where + + + + + diff --git a/topics/grammars/csharp/iso-23270-2003/Makefile b/topics/grammars/csharp/iso-23270-2003/Makefile index 930e910d..40a3b139 100644 --- a/topics/grammars/csharp/iso-23270-2003/Makefile +++ b/topics/grammars/csharp/iso-23270-2003/Makefile @@ -11,5 +11,5 @@ clean: test: make build - ../../../../shared/tools/gdts iso-cs-1-original.bgf extracted-grammar.bgf - ../../../../shared/tools/gdts iso-cs-1-browsable.bgf recovered-grammar.bgf + ../../../../shared/tools/gdt iso-cs-1-original.bgf extracted-grammar.bgf + ../../../../shared/tools/gdt iso-cs-1-browsable.bgf recovered-grammar.bgf diff --git a/topics/grammars/csharp/iso-23270-2006/Makefile b/topics/grammars/csharp/iso-23270-2006/Makefile index 446e6771..7a0c2e98 100644 --- a/topics/grammars/csharp/iso-23270-2006/Makefile +++ b/topics/grammars/csharp/iso-23270-2006/Makefile @@ -10,4 +10,4 @@ clean: test: make build - ../../../../shared/tools/gdts iso-is-grammar.bgf extracted-grammar.bgf + ../../../../shared/tools/gdt iso-is-grammar.bgf extracted-grammar.bgf diff --git a/topics/grammars/csharp/iso-23270-2006/extracted-grammar.bgf b/topics/grammars/csharp/iso-23270-2006/extracted-grammar.bgf index f3564757..2c946fbf 100644 --- a/topics/grammars/csharp/iso-23270-2006/extracted-grammar.bgf +++ b/topics/grammars/csharp/iso-23270-2006/extracted-grammar.bgf @@ -1,7040 +1,7039 @@ - - - - compilation-unit - - - - - - extern-alias-directives - - - - - - - using-directives - - - - - - - global-attributes - - - - - - - namespace-member-declarations - - - - - - - - namespace-name - - namespace-or-type-name - - - - type-name - - namespace-or-type-name - - - - namespace-or-type-name - - - - - - identifier - - - - - type-argument-list - - - - - - - qualified-alias-member - - - - - namespace-or-type-name - - - . - - - identifier - - - - - type-argument-list - - - - - - - - - - type - - - - value-type - - - reference-type - - - type-parameter - - - - - - value-type - - - - struct-type - - - enum-type - - - - - - struct-type - - - - type-name - - - simple-type - - - nullable-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 - - - - nullable-type - - - - non-nullable-value-type - - - ? - - - - - - non-nullable-value-type - - - - enum-type - - - type-name - - - simple-type - - - - - - reference-type - - - - class-type - - - interface-type - - - array-type - - - delegate-type - - - - - - class-type - - - - type-name - - - object - - - string - - - - - - interface-type - - type-name - - - - array-type - - - - non-array-type - - - rank-specifiers - - - - - - non-array-type - - - - value-type - - - class-type - - - interface-type - - - delegate-type - - - type-parameter - - - - - - rank-specifiers - - - - rank-specifier - - - - - rank-specifiers - - - rank-specifier - - - - - - - - rank-specifier - - - - [ - - - - - dim-separators - - - - - ] - - - - - - dim-separators - - - - , - - - - - dim-separators - - - , - - - - - - - - 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 - - - default-value-expression - - - anonymous-method-expression - - - - - - simple-name - - - - identifier - - - - - type-argument-list - - - - - - - - parenthesized-expression - - - - ( - - - expression - - - ) - - - - - - member-access - - - - - - primary-expression - - - . - - - identifier - - - - - type-argument-list - - - - - - - - - predefined-type - - - . - - - identifier - - - - - type-argument-list - - - - - - - - - qualified-alias-member - - - . - - - identifier - - - - - type-argument-list - - - - - - - - - - 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 - - - - - type-argument-list - - - - - - - - - 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 - - - ( - - - unbound-type-name - - - ) - - - - - - - typeof - - - ( - - - void - - - ) - - - - - - - - unbound-type-name - - - - - - identifier - - - - - generic-dimension-specifier - - - - - - - - - identifier - - - :: - - - identifier - - - - - generic-dimension-specifier - - - - - - - - - unbound-type-name - - - . - - - identifier - - - - - generic-dimension-specifier - - - - - - - - - - generic-dimension-specifier - - - - < - - - - - commas - - - - - > - - - - - - commas - - - - , - - - - - commas - - - , - - - - - - - - checked-expression - - - - checked - - - ( - - - expression - - - ) - - - - - - unchecked-expression - - - - unchecked - - - ( - - - expression - - - ) - - - - - - default-value-expression - - - - default - - - ( - - - type - - - ) - - - - - - anonymous-method-expression - - - - delegate - - - - - anonymous-method-signature - - - - - block - - - - - - anonymous-method-signature - - - - ( - - - - - anonymous-method-parameter-list - - - - - ) - - - - - - anonymous-method-parameter-list - - - - anonymous-method-parameter - - - - - anonymous-method-parameter-list - - - , - - - anonymous-method-parameter - - - - - - - - anonymous-method-parameter - - - - - - parameter-modifier - - - - - type - - - identifier - - - - - - unary-expression - - - - primary-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 - - - right-shift - - - 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 - - - - - - - - null-coalescing-expression - - - - conditional-or-expression - - - - - conditional-or-expression - - - ?? - - - null-coalescing-expression - - - - - - - - conditional-expression - - - - null-coalescing-expression - - - - - null-coalescing-expression - - - ? - - - expression - - - : - - - expression - - - - - - - - assignment - - - - unary-expression - - - assignment-operator - - - expression - - - - - - assignment-operator - - - - = - - - += - - - -= - - - *= - - - /= - - - %= - - - &= - - - |= - - - ^= - - - <<= - - - right-shift-assignment - - - - - - 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 - - - yield-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 - - - - - catch-clauses - - - - - finally-clause - - - - - - - - catch-clauses - - - - specific-catch-clauses - - - - - - - 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 - - - - - - yield-statement - - - - - - yield - - - return - - - expression - - - ; - - - - - - - yield - - - break - - - ; - - - - - - - - namespace-declaration - - - - namespace - - - qualified-identifier - - - namespace-body - - - - - ; - - - - - - - - qualified-identifier - - - - identifier - - - - - qualified-identifier - - - . - - - identifier - - - - - - - - namespace-body - - - - { - - - - - extern-alias-directives - - - - - - - using-directives - - - - - - - namespace-member-declarations - - - - - } - - - - - - extern-alias-directives - - - - extern-alias-directive - - - - - extern-alias-directives - - - extern-alias-directive - - - - - - - - extern-alias-directive - - - - extern - - - alias - - - identifier - - - ; - - - - - - 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 - - - - - - qualified-alias-member - - - - identifier - - - :: - - - identifier - - - - - type-argument-list - - - - - - - - class-declaration - - - - - - attributes - - - - - - - class-modifiers - - - - - - - partial - - - - - class - - - identifier - - - - - type-parameter-list - - - - - - - class-base - - - - - - - type-parameter-constraints-clauses - - - - - class-body - - - - - ; - - - - - - - - class-modifiers - - - - class-modifier - - - - - class-modifiers - - - class-modifier - - - - - - - - class-modifier - - - - new - - - public - - - protected - - - internal - - - private - - - abstract - - - sealed - - - static - - - - - - 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 - - - finalizer-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 - - - - - - - - variable-initializer - - - - expression - - - array-initializer - - - - - - method-declaration - - - - method-header - - - method-body - - - - - - method-header - - - - - - attributes - - - - - - - method-modifiers - - - - - return-type - - - member-name - - - - - type-parameter-list - - - - - ( - - - - - formal-parameter-list - - - - - ) - - - - - type-parameter-constraints-clauses - - - - - - - - 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 - - - - - - - accessor-modifier - - - - - get - - - accessor-body - - - - - - set-accessor-declaration - - - - - - attributes - - - - - - - accessor-modifier - - - - - set - - - accessor-body - - - - - - accessor-modifier - - - - protected - - - internal - - - private - - - - - protected - - - internal - - - - - - - internal - - - protected - - - - - - - - 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 - - - - + - - - - - - - * - - - / - - - % - - - & - - - | - - - ^ - - - << - - - right-shift - - - == - - - != - - - > - - - < - - - >= - - - <= - - - - - - 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 - - - ; - - - - - - finalizer-declaration - - - - - - attributes - - - - - - - extern - - - - - ~ - - - identifier - - - ( - - - ) - - - finalizer-body - - - - - - finalizer-body - - - - block - - - ; - - - - - - struct-declaration - - - - - - attributes - - - - - - - struct-modifiers - - - - - - - partial - - - - - struct - - - identifier - - - - - type-parameter-list - - - - - - - struct-interfaces - - - - - - - type-parameter-constraints-clauses - - - - - 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-initializer - - - - - - { - - - - - variable-initializer-list - - - - - } - - - - - - - { - - - variable-initializer-list - - - , - - - } - - - - - - - - variable-initializer-list - - - - variable-initializer - - - - - variable-initializer-list - - - , - - - variable-initializer - - - - - - - - interface-declaration - - - - - - attributes - - - - - - - interface-modifiers - - - - - - - partial - - - - - interface - - - identifier - - - - - type-parameter-list - - - - - - - interface-base - - - - - - - type-parameter-constraints-clauses - - - - - 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 - - - - - type-parameter-list - - - - - ( - - - - - formal-parameter-list - - - - - ) - - - - - type-parameter-constraints-clauses - - - - - ; - - - - - - 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 - - - return-type - - - identifier - - - - - type-parameter-list - - - - - ( - - - - - formal-parameter-list - - - - - ) - - - - - type-parameter-constraints-clauses - - - - - ; - - - - - - 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 - - - - identifier - - - keyword - - - - - - 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 - - - - identifier - - - keyword - - - - - - 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 - - - - type-parameter-list - - - - < - - - type-parameters - - - > - - - - - - type-parameters - - - - - - - - attributes - - - - - type-parameter - - - - - - - type-parameters - - - , - - - - - attributes - - - - - type-parameter - - - - - - - - type-parameter - - identifier - - - - type-argument-list - - - - < - - - type-arguments - - - > - - - - - - type-arguments - - - - type-argument - - - - - type-arguments - - - , - - - type-argument - - - - - - - - type-argument - - type - - - - type-parameter-constraints-clauses - - - - type-parameter-constraints-clause - - - - - type-parameter-constraints-clauses - - - type-parameter-constraints-clause - - - - - - - - type-parameter-constraints-clause - - - - where - - - type-parameter - - - : - - - type-parameter-constraints - - - - - - type-parameter-constraints - - - - primary-constraint - - - secondary-constraints - - - constructor-constraint - - - - - primary-constraint - - - , - - - secondary-constraints - - - - - - - primary-constraint - - - , - - - constructor-constraint - - - - - - - secondary-constraints - - - , - - - constructor-constraint - - - - - - - primary-constraint - - - , - - - secondary-constraints - - - , - - - constructor-constraint - - - - - - - - primary-constraint - - - - class-type - - - class - - - struct - - - - - - secondary-constraints - - - - interface-type - - - type-parameter - - - - - secondary-constraints - - - , - - - interface-type - - - - - - - secondary-constraints - - - , - - - type-parameter - - - - - - - - constructor-constraint - - - - new - - - ( - - - ) - - - - - - keyword - - - - abstract - - - as - - - base - - - bool - - - break - - - byte - - - case - - - catch - - - char - - - checked - - - class - - - const - - - continue - - - decimal - - - default - - - delegate - - - do - - - double - - - else - - - enum - - - event - - - explicit - - - extern - - - false - - - finally - - - fixed - - - float - - - for - - - foreach - - - goto - - - if - - - implicit - - - in - - - int - - - interface - - - internal - - - is - - - lock - - - long - - - namespace - - - new - - - null - - - object - - - operator - - - out - - - override - - - params - - - private - - - protected - - - public - - - readonly - - - ref - - - return - - - sbyte - - - sealed - - - short - - - sizeof - - - stackalloc - - - static - - - string - - - struct - - - switch - - - this - - - throw - - - true - - - try - - - typeof - - - uint - - - ulong - - - unchecked - - - unsafe - - - ushort - - - using - - - virtual - - - void - - - volatile - - - while - - - yield - - - partial - - - add - - - remove - - - get - - - set - - - where - - - alias - - - - - \ No newline at end of file + + + compilation-unit + + + + + + extern-alias-directives + + + + + + + using-directives + + + + + + + global-attributes + + + + + + + namespace-member-declarations + + + + + + + + namespace-name + + namespace-or-type-name + + + + type-name + + namespace-or-type-name + + + + namespace-or-type-name + + + + + + identifier + + + + + type-argument-list + + + + + + + qualified-alias-member + + + + + namespace-or-type-name + + + . + + + identifier + + + + + type-argument-list + + + + + + + + + + type + + + + value-type + + + reference-type + + + type-parameter + + + + + + value-type + + + + struct-type + + + enum-type + + + + + + struct-type + + + + type-name + + + simple-type + + + nullable-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 + + + + nullable-type + + + + non-nullable-value-type + + + ? + + + + + + non-nullable-value-type + + + + enum-type + + + type-name + + + simple-type + + + + + + reference-type + + + + class-type + + + interface-type + + + array-type + + + delegate-type + + + + + + class-type + + + + type-name + + + object + + + string + + + + + + interface-type + + type-name + + + + array-type + + + + non-array-type + + + rank-specifiers + + + + + + non-array-type + + + + value-type + + + class-type + + + interface-type + + + delegate-type + + + type-parameter + + + + + + rank-specifiers + + + + rank-specifier + + + + + rank-specifiers + + + rank-specifier + + + + + + + + rank-specifier + + + + [ + + + + + dim-separators + + + + + ] + + + + + + dim-separators + + + + , + + + + + dim-separators + + + , + + + + + + + + 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 + + + default-value-expression + + + anonymous-method-expression + + + + + + simple-name + + + + identifier + + + + + type-argument-list + + + + + + + + parenthesized-expression + + + + ( + + + expression + + + ) + + + + + + member-access + + + + + + primary-expression + + + . + + + identifier + + + + + type-argument-list + + + + + + + + + predefined-type + + + . + + + identifier + + + + + type-argument-list + + + + + + + + + qualified-alias-member + + + . + + + identifier + + + + + type-argument-list + + + + + + + + + + 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 + + + + + type-argument-list + + + + + + + + + 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 + + + ( + + + unbound-type-name + + + ) + + + + + + + typeof + + + ( + + + void + + + ) + + + + + + + + unbound-type-name + + + + + + identifier + + + + + generic-dimension-specifier + + + + + + + + + identifier + + + :: + + + identifier + + + + + generic-dimension-specifier + + + + + + + + + unbound-type-name + + + . + + + identifier + + + + + generic-dimension-specifier + + + + + + + + + + generic-dimension-specifier + + + + < + + + + + commas + + + + + > + + + + + + commas + + + + , + + + + + commas + + + , + + + + + + + + checked-expression + + + + checked + + + ( + + + expression + + + ) + + + + + + unchecked-expression + + + + unchecked + + + ( + + + expression + + + ) + + + + + + default-value-expression + + + + default + + + ( + + + type + + + ) + + + + + + anonymous-method-expression + + + + delegate + + + + + anonymous-method-signature + + + + + block + + + + + + anonymous-method-signature + + + + ( + + + + + anonymous-method-parameter-list + + + + + ) + + + + + + anonymous-method-parameter-list + + + + anonymous-method-parameter + + + + + anonymous-method-parameter-list + + + , + + + anonymous-method-parameter + + + + + + + + anonymous-method-parameter + + + + + + parameter-modifier + + + + + type + + + identifier + + + + + + unary-expression + + + + primary-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 + + + right-shift + + + 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 + + + + + + + + null-coalescing-expression + + + + conditional-or-expression + + + + + conditional-or-expression + + + ?? + + + null-coalescing-expression + + + + + + + + conditional-expression + + + + null-coalescing-expression + + + + + null-coalescing-expression + + + ? + + + expression + + + : + + + expression + + + + + + + + assignment + + + + unary-expression + + + assignment-operator + + + expression + + + + + + assignment-operator + + + + = + + + += + + + -= + + + *= + + + /= + + + %= + + + &= + + + |= + + + ^= + + + <<= + + + right-shift-assignment + + + + + + 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 + + + yield-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 + + + + + catch-clauses + + + + + finally-clause + + + + + + + + catch-clauses + + + + specific-catch-clauses + + + + + + + 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 + + + + + + yield-statement + + + + + + yield + + + return + + + expression + + + ; + + + + + + + yield + + + break + + + ; + + + + + + + + namespace-declaration + + + + namespace + + + qualified-identifier + + + namespace-body + + + + + ; + + + + + + + + qualified-identifier + + + + identifier + + + + + qualified-identifier + + + . + + + identifier + + + + + + + + namespace-body + + + + { + + + + + extern-alias-directives + + + + + + + using-directives + + + + + + + namespace-member-declarations + + + + + } + + + + + + extern-alias-directives + + + + extern-alias-directive + + + + + extern-alias-directives + + + extern-alias-directive + + + + + + + + extern-alias-directive + + + + extern + + + alias + + + identifier + + + ; + + + + + + 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 + + + + + + qualified-alias-member + + + + identifier + + + :: + + + identifier + + + + + type-argument-list + + + + + + + + class-declaration + + + + + + attributes + + + + + + + class-modifiers + + + + + + + partial + + + + + class + + + identifier + + + + + type-parameter-list + + + + + + + class-base + + + + + + + type-parameter-constraints-clauses + + + + + class-body + + + + + ; + + + + + + + + class-modifiers + + + + class-modifier + + + + + class-modifiers + + + class-modifier + + + + + + + + class-modifier + + + + new + + + public + + + protected + + + internal + + + private + + + abstract + + + sealed + + + static + + + + + + 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 + + + finalizer-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 + + + + + + + + variable-initializer + + + + expression + + + array-initializer + + + + + + method-declaration + + + + method-header + + + method-body + + + + + + method-header + + + + + + attributes + + + + + + + method-modifiers + + + + + return-type + + + member-name + + + + + type-parameter-list + + + + + ( + + + + + formal-parameter-list + + + + + ) + + + + + type-parameter-constraints-clauses + + + + + + + + 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 + + + + + + + accessor-modifier + + + + + get + + + accessor-body + + + + + + set-accessor-declaration + + + + + + attributes + + + + + + + accessor-modifier + + + + + set + + + accessor-body + + + + + + accessor-modifier + + + + protected + + + internal + + + private + + + + + protected + + + internal + + + + + + + internal + + + protected + + + + + + + + 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 + + + + + + + + - + + + * + + + / + + + % + + + & + + + | + + + ^ + + + << + + + right-shift + + + == + + + != + + + > + + + < + + + >= + + + <= + + + + + + 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 + + + ; + + + + + + finalizer-declaration + + + + + + attributes + + + + + + + extern + + + + + ~ + + + identifier + + + ( + + + ) + + + finalizer-body + + + + + + finalizer-body + + + + block + + + ; + + + + + + struct-declaration + + + + + + attributes + + + + + + + struct-modifiers + + + + + + + partial + + + + + struct + + + identifier + + + + + type-parameter-list + + + + + + + struct-interfaces + + + + + + + type-parameter-constraints-clauses + + + + + 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-initializer + + + + + + { + + + + + variable-initializer-list + + + + + } + + + + + + + { + + + variable-initializer-list + + + , + + + } + + + + + + + + variable-initializer-list + + + + variable-initializer + + + + + variable-initializer-list + + + , + + + variable-initializer + + + + + + + + interface-declaration + + + + + + attributes + + + + + + + interface-modifiers + + + + + + + partial + + + + + interface + + + identifier + + + + + type-parameter-list + + + + + + + interface-base + + + + + + + type-parameter-constraints-clauses + + + + + 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 + + + + + type-parameter-list + + + + + ( + + + + + formal-parameter-list + + + + + ) + + + + + type-parameter-constraints-clauses + + + + + ; + + + + + + 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 + + + return-type + + + identifier + + + + + type-parameter-list + + + + + ( + + + + + formal-parameter-list + + + + + ) + + + + + type-parameter-constraints-clauses + + + + + ; + + + + + + 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 + + + + identifier + + + keyword + + + + + + 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 + + + + identifier + + + keyword + + + + + + 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 + + + + type-parameter-list + + + + < + + + type-parameters + + + > + + + + + + type-parameters + + + + + + + + attributes + + + + + type-parameter + + + + + + + type-parameters + + + , + + + + + attributes + + + + + type-parameter + + + + + + + + type-parameter + + identifier + + + + type-argument-list + + + + < + + + type-arguments + + + > + + + + + + type-arguments + + + + type-argument + + + + + type-arguments + + + , + + + type-argument + + + + + + + + type-argument + + type + + + + type-parameter-constraints-clauses + + + + type-parameter-constraints-clause + + + + + type-parameter-constraints-clauses + + + type-parameter-constraints-clause + + + + + + + + type-parameter-constraints-clause + + + + where + + + type-parameter + + + : + + + type-parameter-constraints + + + + + + type-parameter-constraints + + + + primary-constraint + + + secondary-constraints + + + constructor-constraint + + + + + primary-constraint + + + , + + + secondary-constraints + + + + + + + primary-constraint + + + , + + + constructor-constraint + + + + + + + secondary-constraints + + + , + + + constructor-constraint + + + + + + + primary-constraint + + + , + + + secondary-constraints + + + , + + + constructor-constraint + + + + + + + + primary-constraint + + + + class-type + + + class + + + struct + + + + + + secondary-constraints + + + + interface-type + + + type-parameter + + + + + secondary-constraints + + + , + + + interface-type + + + + + + + secondary-constraints + + + , + + + type-parameter + + + + + + + + constructor-constraint + + + + new + + + ( + + + ) + + + + + + keyword + + + + abstract + + + as + + + base + + + bool + + + break + + + byte + + + case + + + catch + + + char + + + checked + + + class + + + const + + + continue + + + decimal + + + default + + + delegate + + + do + + + double + + + else + + + enum + + + event + + + explicit + + + extern + + + false + + + finally + + + fixed + + + float + + + for + + + foreach + + + goto + + + if + + + implicit + + + in + + + int + + + interface + + + internal + + + is + + + lock + + + long + + + namespace + + + new + + + null + + + object + + + operator + + + out + + + override + + + params + + + private + + + protected + + + public + + + readonly + + + ref + + + return + + + sbyte + + + sealed + + + short + + + sizeof + + + stackalloc + + + static + + + string + + + struct + + + switch + + + this + + + throw + + + true + + + try + + + typeof + + + uint + + + ulong + + + unchecked + + + unsafe + + + ushort + + + using + + + virtual + + + void + + + volatile + + + while + + + yield + + + partial + + + add + + + remove + + + get + + + set + + + where + + + alias + + + + + diff --git a/topics/grammars/csharp/msft-ls-1.0/Makefile b/topics/grammars/csharp/msft-ls-1.0/Makefile index ed06dafa..6cf47d29 100644 --- a/topics/grammars/csharp/msft-ls-1.0/Makefile +++ b/topics/grammars/csharp/msft-ls-1.0/Makefile @@ -10,4 +10,4 @@ clean: test: make build - ../../../../shared/tools/gdts msft-ls-grammar.bgf extracted-grammar.bgf + ../../../../shared/tools/gdt msft-ls-grammar.bgf extracted-grammar.bgf diff --git a/topics/grammars/csharp/msft-ls-1.0/extracted-grammar.bgf b/topics/grammars/csharp/msft-ls-1.0/extracted-grammar.bgf index 134cf920..d38b4404 100644 --- a/topics/grammars/csharp/msft-ls-1.0/extracted-grammar.bgf +++ b/topics/grammars/csharp/msft-ls-1.0/extracted-grammar.bgf @@ -1,6152 +1,6151 @@ - - - - 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 - - - - 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 - - - , - - - - - - - - delegate-type - - type-name - - - - variable-reference - - expression - - - - argument-list - - - - argument - - - - - argument-list - - - , - - - argument - - - - - - - - argument - - - - expression - - - - - ref - - - variable-reference - - - - - - - out - - - variable-reference - - - - - - - - primary-expression - - - - primary-no-array-creation-expression - - - 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 - - - - - 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 - - - - - - compilation-unit - - - - - - using-directives - - - - - - - global-attributes - - - - - - - namespace-member-declarations - - - - - - - - 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 - - - - - - - - variable-initializer - - - - expression - - - array-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-initializer - - - - - - { - - - - - variable-initializer-list - - - - - } - - - - - - - { - - - variable-initializer-list - - - , - - - } - - - - - - - - variable-initializer-list - - - - variable-initializer - - - - - variable-initializer-list - - - , - - - variable-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 - - - return-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 - - - module - - - - - - 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 - - - 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 - - - - keyword - - - - abstract - - - as - - - base - - - bool - - - break - - - byte - - - case - - - catch - - - char - - - checked - - - class - - - const - - - continue - - - decimal - - - default - - - delegate - - - do - - - double - - - else - - - enum - - - event - - - explicit - - - extern - - - false - - - finally - - - fixed - - - float - - - for - - - foreach - - - goto - - - if - - - implicit - - - in - - - int - - - interface - - - internal - - - is - - - lock - - - long - - - namespace - - - new - - - null - - - object - - - operator - - - out - - - override - - - params - - - private - - - protected - - - public - - - readonly - - - ref - - - return - - - sbyte - - - sealed - - - short - - - sizeof - - - stackalloc - - - static - - - string - - - struct - - - switch - - - this - - - throw - - - true - - - try - - - typeof - - - uint - - - ulong - - - unchecked - - - unsafe - - - ushort - - - using - - - virtual - - - void - - - volatile - - - while - - - assembly - - - module - - - add - - - remove - - - get - - - set - - - field - - - method - - - param - - - property - - - - - \ No newline at end of file + + + 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 + + + + 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 + + + , + + + + + + + + delegate-type + + type-name + + + + variable-reference + + expression + + + + argument-list + + + + argument + + + + + argument-list + + + , + + + argument + + + + + + + + argument + + + + expression + + + + + ref + + + variable-reference + + + + + + + out + + + variable-reference + + + + + + + + primary-expression + + + + primary-no-array-creation-expression + + + 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 + + + + + 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 + + + + + + compilation-unit + + + + + + using-directives + + + + + + + global-attributes + + + + + + + namespace-member-declarations + + + + + + + + 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 + + + + + + + + variable-initializer + + + + expression + + + array-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-initializer + + + + + + { + + + + + variable-initializer-list + + + + + } + + + + + + + { + + + variable-initializer-list + + + , + + + } + + + + + + + + variable-initializer-list + + + + variable-initializer + + + + + variable-initializer-list + + + , + + + variable-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 + + + return-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 + + + module + + + + + + 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 + + + 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 + + + + keyword + + + + abstract + + + as + + + base + + + bool + + + break + + + byte + + + case + + + catch + + + char + + + checked + + + class + + + const + + + continue + + + decimal + + + default + + + delegate + + + do + + + double + + + else + + + enum + + + event + + + explicit + + + extern + + + false + + + finally + + + fixed + + + float + + + for + + + foreach + + + goto + + + if + + + implicit + + + in + + + int + + + interface + + + internal + + + is + + + lock + + + long + + + namespace + + + new + + + null + + + object + + + operator + + + out + + + override + + + params + + + private + + + protected + + + public + + + readonly + + + ref + + + return + + + sbyte + + + sealed + + + short + + + sizeof + + + stackalloc + + + static + + + string + + + struct + + + switch + + + this + + + throw + + + true + + + try + + + typeof + + + uint + + + ulong + + + unchecked + + + unsafe + + + ushort + + + using + + + virtual + + + void + + + volatile + + + while + + + assembly + + + module + + + add + + + remove + + + get + + + set + + + field + + + method + + + param + + + property + + + + + diff --git a/topics/grammars/csharp/msft-ls-1.2/Makefile b/topics/grammars/csharp/msft-ls-1.2/Makefile index ed06dafa..6cf47d29 100644 --- a/topics/grammars/csharp/msft-ls-1.2/Makefile +++ b/topics/grammars/csharp/msft-ls-1.2/Makefile @@ -10,4 +10,4 @@ clean: test: make build - ../../../../shared/tools/gdts msft-ls-grammar.bgf extracted-grammar.bgf + ../../../../shared/tools/gdt msft-ls-grammar.bgf extracted-grammar.bgf diff --git a/topics/grammars/csharp/msft-ls-1.2/extracted-grammar.bgf b/topics/grammars/csharp/msft-ls-1.2/extracted-grammar.bgf index 134cf920..d38b4404 100644 --- a/topics/grammars/csharp/msft-ls-1.2/extracted-grammar.bgf +++ b/topics/grammars/csharp/msft-ls-1.2/extracted-grammar.bgf @@ -1,6152 +1,6151 @@ - - - - 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 - - - - 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 - - - , - - - - - - - - delegate-type - - type-name - - - - variable-reference - - expression - - - - argument-list - - - - argument - - - - - argument-list - - - , - - - argument - - - - - - - - argument - - - - expression - - - - - ref - - - variable-reference - - - - - - - out - - - variable-reference - - - - - - - - primary-expression - - - - primary-no-array-creation-expression - - - 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 - - - - - 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 - - - - - - compilation-unit - - - - - - using-directives - - - - - - - global-attributes - - - - - - - namespace-member-declarations - - - - - - - - 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 - - - - - - - - variable-initializer - - - - expression - - - array-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-initializer - - - - - - { - - - - - variable-initializer-list - - - - - } - - - - - - - { - - - variable-initializer-list - - - , - - - } - - - - - - - - variable-initializer-list - - - - variable-initializer - - - - - variable-initializer-list - - - , - - - variable-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 - - - return-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 - - - module - - - - - - 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 - - - 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 - - - - keyword - - - - abstract - - - as - - - base - - - bool - - - break - - - byte - - - case - - - catch - - - char - - - checked - - - class - - - const - - - continue - - - decimal - - - default - - - delegate - - - do - - - double - - - else - - - enum - - - event - - - explicit - - - extern - - - false - - - finally - - - fixed - - - float - - - for - - - foreach - - - goto - - - if - - - implicit - - - in - - - int - - - interface - - - internal - - - is - - - lock - - - long - - - namespace - - - new - - - null - - - object - - - operator - - - out - - - override - - - params - - - private - - - protected - - - public - - - readonly - - - ref - - - return - - - sbyte - - - sealed - - - short - - - sizeof - - - stackalloc - - - static - - - string - - - struct - - - switch - - - this - - - throw - - - true - - - try - - - typeof - - - uint - - - ulong - - - unchecked - - - unsafe - - - ushort - - - using - - - virtual - - - void - - - volatile - - - while - - - assembly - - - module - - - add - - - remove - - - get - - - set - - - field - - - method - - - param - - - property - - - - - \ No newline at end of file + + + 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 + + + + 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 + + + , + + + + + + + + delegate-type + + type-name + + + + variable-reference + + expression + + + + argument-list + + + + argument + + + + + argument-list + + + , + + + argument + + + + + + + + argument + + + + expression + + + + + ref + + + variable-reference + + + + + + + out + + + variable-reference + + + + + + + + primary-expression + + + + primary-no-array-creation-expression + + + 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 + + + + + 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 + + + + + + compilation-unit + + + + + + using-directives + + + + + + + global-attributes + + + + + + + namespace-member-declarations + + + + + + + + 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 + + + + + + + + variable-initializer + + + + expression + + + array-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-initializer + + + + + + { + + + + + variable-initializer-list + + + + + } + + + + + + + { + + + variable-initializer-list + + + , + + + } + + + + + + + + variable-initializer-list + + + + variable-initializer + + + + + variable-initializer-list + + + , + + + variable-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 + + + return-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 + + + module + + + + + + 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 + + + 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 + + + + keyword + + + + abstract + + + as + + + base + + + bool + + + break + + + byte + + + case + + + catch + + + char + + + checked + + + class + + + const + + + continue + + + decimal + + + default + + + delegate + + + do + + + double + + + else + + + enum + + + event + + + explicit + + + extern + + + false + + + finally + + + fixed + + + float + + + for + + + foreach + + + goto + + + if + + + implicit + + + in + + + int + + + interface + + + internal + + + is + + + lock + + + long + + + namespace + + + new + + + null + + + object + + + operator + + + out + + + override + + + params + + + private + + + protected + + + public + + + readonly + + + ref + + + return + + + sbyte + + + sealed + + + short + + + sizeof + + + stackalloc + + + static + + + string + + + struct + + + switch + + + this + + + throw + + + true + + + try + + + typeof + + + uint + + + ulong + + + unchecked + + + unsafe + + + ushort + + + using + + + virtual + + + void + + + volatile + + + while + + + assembly + + + module + + + add + + + remove + + + get + + + set + + + field + + + method + + + param + + + property + + + + + diff --git a/topics/grammars/csharp/msft-ls-3.0/Makefile b/topics/grammars/csharp/msft-ls-3.0/Makefile index ed06dafa..6cf47d29 100644 --- a/topics/grammars/csharp/msft-ls-3.0/Makefile +++ b/topics/grammars/csharp/msft-ls-3.0/Makefile @@ -10,4 +10,4 @@ clean: test: make build - ../../../../shared/tools/gdts msft-ls-grammar.bgf extracted-grammar.bgf + ../../../../shared/tools/gdt msft-ls-grammar.bgf extracted-grammar.bgf diff --git a/topics/grammars/csharp/msft-ls-3.0/extracted-grammar.bgf b/topics/grammars/csharp/msft-ls-3.0/extracted-grammar.bgf index c7e9ad5c..493be960 100644 --- a/topics/grammars/csharp/msft-ls-3.0/extracted-grammar.bgf +++ b/topics/grammars/csharp/msft-ls-3.0/extracted-grammar.bgf @@ -7651,316 +7651,316 @@ - abstract + abstract - as + as - base + base - bool + bool - break + break - byte + byte - case + case - catch + catch - char + char - checked + checked - class + class - const + const - continue + continue - decimal + decimal - default + default - delegate + delegate - do + do - double + double - else + else - enum + enum - event + event - explicit + explicit - extern + extern - false + false - finally + finally - fixed + fixed - float + float - for + for - foreach + foreach - goto + goto - if + if - implicit + implicit - in + in - int + int - interface + interface - internal + internal - is + is - lock + lock - long + long - namespace + namespace - new + new - null + null - object + object - operator + operator - out + out - override + override - params + params - private + private - protected + protected - public + public - readonly + readonly - ref + ref - return + return - sbyte + sbyte - sealed + sealed - short + short - sizeof + sizeof - stackalloc + stackalloc - static + static - string + string - struct + struct - switch + switch - this + this - throw + throw - true + true - try + try - typeof + typeof - uint + uint - ulong + ulong - unchecked + unchecked - unsafe + unsafe - ushort + ushort - using + using - virtual + virtual - void + void - volatile + volatile - while + while - group + group - by + by - join + join - on + on - equals + equals - into + into - let + let - get + get - set + set - yield + yield - partial + partial - var + var - orderby + orderby - add + add - remove + remove - where + where - from + from - select + select - ascending + ascending - descending + descending - alias + alias - field + field - method + method - param + param - property + property - assembly + assembly - module + module diff --git a/topics/grammars/csharp/msft-ls-4.0/Makefile b/topics/grammars/csharp/msft-ls-4.0/Makefile index ed06dafa..6cf47d29 100644 --- a/topics/grammars/csharp/msft-ls-4.0/Makefile +++ b/topics/grammars/csharp/msft-ls-4.0/Makefile @@ -10,4 +10,4 @@ clean: test: make build - ../../../../shared/tools/gdts msft-ls-grammar.bgf extracted-grammar.bgf + ../../../../shared/tools/gdt msft-ls-grammar.bgf extracted-grammar.bgf diff --git a/topics/grammars/csharp/msft-ls-4.0/extracted-grammar.bgf b/topics/grammars/csharp/msft-ls-4.0/extracted-grammar.bgf index b0465c82..10c2a8fe 100644 --- a/topics/grammars/csharp/msft-ls-4.0/extracted-grammar.bgf +++ b/topics/grammars/csharp/msft-ls-4.0/extracted-grammar.bgf @@ -1,8127 +1,8126 @@ - - - - namespace-name - - namespace-or-type-name - - - - type-name - - namespace-or-type-name - - - - namespace-or-type-name - - - - - - identifier - - - - - type-argument-list - - - - - - - - - namespace-or-type-name - - - . - - - identifier - - - - - type-argument-list - - - - - - - qualified-alias-member - - - - - - type - - - - value-type - - - reference-type - - - type-parameter - - - - - - value-type - - - - struct-type - - - enum-type - - - - - - struct-type - - - - type-name - - - simple-type - - - nullable-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 - - - - - - nullable-type - - - - non-nullable-value-type - - - ? - - - - - - non-nullable-value-type - - type - - - - enum-type - - type-name - - - - reference-type - - - - class-type - - - interface-type - - - array-type - - - delegate-type - - - - - - class-type - - - - type-name - - - object - - - dynamic - - - string - - - - - - interface-type - - type-name - - - - rank-specifiers - - - - rank-specifier - - - - - rank-specifiers - - - rank-specifier - - - - - - - - rank-specifier - - - - [ - - - - - dim-separators - - - - - ] - - - - - - dim-separators - - - - , - - - - - dim-separators - - - , - - - - - - - - delegate-type - - type-name - - - - type-argument-list - - - - < - - - type-arguments - - - > - - - - - - type-arguments - - - - type-argument - - - - - type-arguments - - - , - - - type-argument - - - - - - - - type-argument - - type - - - - type-parameter - - identifier - - - - variable-reference - - expression - - - - argument-list - - - - argument - - - - - argument-list - - - , - - - argument - - - - - - - - argument - - - - - - argument-name - - - - - argument-value - - - - - - argument-name - - - - identifier - - - : - - - - - - argument-value - - - - expression - - - - - ref - - - variable-reference - - - - - - - out - - - variable-reference - - - - - - - - primary-expression - - - - primary-no-array-creation-expression - - - 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 - - - anonymous-object-creation-expression - - - typeof-expression - - - checked-expression - - - unchecked-expression - - - default-value-expression - - - anonymous-method-expression - - - - - - simple-name - - - - identifier - - - - - type-argument-list - - - - - - - - parenthesized-expression - - - - ( - - - expression - - - ) - - - - - - member-access - - - - - - primary-expression - - - . - - - identifier - - - - - type-argument-list - - - - - - - - - predefined-type - - - . - - - identifier - - - - - type-argument-list - - - - - - - - - qualified-alias-member - - - . - - - 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 - - - [ - - - argument-list - - - ] - - - - - - this-access - - this - - - - base-access - - - - - - base - - - . - - - identifier - - - - - - - base - - - [ - - - argument-list - - - ] - - - - - - - - post-increment-expression - - - - primary-expression - - - ++ - - - - - - post-decrement-expression - - - - primary-expression - - - -- - - - - - - object-creation-expression - - - - - - new - - - type - - - ( - - - - - argument-list - - - - - ) - - - - - object-or-collection-initializer - - - - - - - - - new - - - type - - - object-or-collection-initializer - - - - - - - - object-or-collection-initializer - - - - object-initializer - - - collection-initializer - - - - - - object-initializer - - - - - - { - - - - - member-initializer-list - - - - - } - - - - - - - { - - - member-initializer-list - - - , - - - } - - - - - - - - member-initializer-list - - - - member-initializer - - - - - member-initializer-list - - - , - - - member-initializer - - - - - - - - member-initializer - - - - identifier - - - = - - - initializer-value - - - - - - initializer-value - - - - expression - - - object-or-collection-initializer - - - - - - collection-initializer - - - - - - { - - - element-initializer-list - - - } - - - - - - - { - - - element-initializer-list - - - , - - - } - - - - - - - - element-initializer-list - - - - element-initializer - - - - - element-initializer-list - - - , - - - element-initializer - - - - - - - - element-initializer - - - - non-assignment-expression - - - - - { - - - expression-list - - - } - - - - - - - - expression-list - - - - expression - - - - - expression-list - - - , - - - expression - - - - - - - - array-creation-expression - - - - - - new - - - non-array-type - - - [ - - - expression-list - - - ] - - - - - rank-specifiers - - - - - - - array-initializer - - - - - - - - - new - - - array-type - - - array-initializer - - - - - - - new - - - rank-specifier - - - array-initializer - - - - - - - - delegate-creation-expression - - - - new - - - delegate-type - - - ( - - - expression - - - ) - - - - - - anonymous-object-creation-expression - - - - new - - - anonymous-object-initializer - - - - - - anonymous-object-initializer - - - - - - { - - - - - member-declarator-list - - - - - } - - - - - - - { - - - member-declarator-list - - - , - - - } - - - - - - - - member-declarator-list - - - - member-declarator - - - - - member-declarator-list - - - , - - - member-declarator - - - - - - - - member-declarator - - - - simple-name - - - member-access - - - - - identifier - - - = - - - expression - - - - - - - - typeof-expression - - - - - - typeof - - - ( - - - type - - - ) - - - - - - - typeof - - - ( - - - unbound-type-name - - - ) - - - - - - - typeof - - - ( - - - void - - - ) - - - - - - - - unbound-type-name - - - - - - identifier - - - - - generic-dimension-specifier - - - - - - - - - identifier - - - :: - - - identifier - - - - - generic-dimension-specifier - - - - - - - - - unbound-type-name - - - . - - - identifier - - - - - generic-dimension-specifier - - - - - - - - - - generic-dimension-specifier - - - - < - - - - - commas - - - - - > - - - - - - commas - - - - , - - - - - commas - - - , - - - - - - - - checked-expression - - - - checked - - - ( - - - expression - - - ) - - - - - - unchecked-expression - - - - unchecked - - - ( - - - expression - - - ) - - - - - - default-value-expression - - - - default - - - ( - - - type - - - ) - - - - - - unary-expression - - - - primary-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 - - - right-shift - - - 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 - - - - - - - - null-coalescing-expression - - - - conditional-or-expression - - - - - conditional-or-expression - - - ?? - - - null-coalescing-expression - - - - - - - - conditional-expression - - - - null-coalescing-expression - - - - - null-coalescing-expression - - - ? - - - expression - - - : - - - expression - - - - - - - - lambda-expression - - - - anonymous-function-signature - - - => - - - anonymous-function-body - - - - - - anonymous-method-expression - - - - delegate - - - - - explicit-anonymous-function-signature - - - - - block - - - - - - anonymous-function-signature - - - - explicit-anonymous-function-signature - - - implicit-anonymous-function-signature - - - - - - explicit-anonymous-function-signature - - - - ( - - - - - explicit-anonymous-function-parameter-list - - - - - ) - - - - - - explicit-anonymous-function-parameter-list - - - - explicit-anonymous-function-parameter - - - - - explicit-anonymous-function-parameter-list - - - , - - - explicit-anonymous-function-parameter - - - - - - - - explicit-anonymous-function-parameter - - - - - - anonymous-function-parameter-modifier - - - - - type - - - identifier - - - - - - anonymous-function-parameter-modifier - - - - ref - - - out - - - - - - implicit-anonymous-function-signature - - - - - - ( - - - - - implicit-anonymous-function-parameter-list - - - - - ) - - - - - implicit-anonymous-function-parameter - - - - - - implicit-anonymous-function-parameter-list - - - - implicit-anonymous-function-parameter - - - - - implicit-anonymous-function-parameter-list - - - , - - - implicit-anonymous-function-parameter - - - - - - - - implicit-anonymous-function-parameter - - identifier - - - - anonymous-function-body - - - - expression - - - block - - - - - - query-expression - - - - from-clause - - - query-body - - - - - - from-clause - - - - from - - - - - type - - - - - identifier - - - in - - - expression - - - - - - query-body - - - - - - query-body-clauses - - - - - select-or-group-clause - - - - - query-continuation - - - - - - - - query-body-clauses - - - - query-body-clause - - - - - query-body-clauses - - - query-body-clause - - - - - - - - query-body-clause - - - - from-clause - - - let-clause - - - where-clause - - - join-clause - - - join-into-clause - - - orderby-clause - - - - - - let-clause - - - - let - - - identifier - - - = - - - expression - - - - - - where-clause - - - - where - - - boolean-expression - - - - - - join-clause - - - - join - - - - - type - - - - - identifier - - - in - - - expression - - - on - - - expression - - - equals - - - expression - - - - - - join-into-clause - - - - join - - - - - type - - - - - identifier - - - in - - - expression - - - on - - - expression - - - equals - - - expression - - - into - - - identifier - - - - - - orderby-clause - - - - orderby - - - orderings - - - - - - orderings - - - - ordering - - - - - orderings - - - , - - - ordering - - - - - - - - ordering - - - - expression - - - - - ordering-direction - - - - - - - - ordering-direction - - - - ascending - - - descending - - - - - - select-or-group-clause - - - - select-clause - - - group-clause - - - - - - select-clause - - - - select - - - expression - - - - - - group-clause - - - - group - - - expression - - - by - - - expression - - - - - - query-continuation - - - - into - - - identifier - - - query-body - - - - - - assignment - - - - unary-expression - - - assignment-operator - - - expression - - - - - - assignment-operator - - - - = - - - += - - - -= - - - *= - - - /= - - - %= - - - &= - - - |= - - - ^= - - - <<= - - - right-shift-assignment - - - - - - expression - - - - non-assignment-expression - - - assignment - - - - - - non-assignment-expression - - - - conditional-expression - - - lambda-expression - - - query-expression - - - - - - 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 - - - yield-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 - - - - local-variable-type - - - local-variable-declarators - - - - - - local-variable-type - - - - type - - - var - - - - - - 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 - - - ( - - - local-variable-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 - - - - - - yield-statement - - - - - - yield - - - return - - - expression - - - ; - - - - - - - yield - - - break - - - ; - - - - - - - - compilation-unit - - - - - - - - extern-alias-directives - - - - - - - using-directives - - - - - - - global-attributes - - - - - - - - - namespace-member-declarations - - - - - - - - namespace-declaration - - - - namespace - - - qualified-identifier - - - namespace-body - - - - - ; - - - - - - - - qualified-identifier - - - - identifier - - - - - qualified-identifier - - - . - - - identifier - - - - - - - - namespace-body - - - - { - - - - - extern-alias-directives - - - - - - - using-directives - - - - - - - namespace-member-declarations - - - - - } - - - - - - extern-alias-directives - - - - extern-alias-directive - - - - - extern-alias-directives - - - extern-alias-directive - - - - - - - - extern-alias-directive - - - - extern - - - alias - - - identifier - - - ; - - - - - - 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 - - - - - - qualified-alias-member - - - - identifier - - - :: - - - identifier - - - - - type-argument-list - - - - - - - - class-declaration - - - - - - - - attributes - - - - - - - class-modifiers - - - - - - - partial - - - - - class - - - identifier - - - - - type-parameter-list - - - - - - - - - - - class-base - - - - - - - type-parameter-constraints-clauses - - - - - class-body - - - - - ; - - - - - - - - - - class-modifiers - - - - class-modifier - - - - - class-modifiers - - - class-modifier - - - - - - - - class-modifier - - - - new - - - public - - - protected - - - internal - - - private - - - abstract - - - sealed - - - static - - - - - - type-parameter-list - - - - < - - - type-parameters - - - > - - - - - - type-parameters - - - - - - - - attributes - - - - - type-parameter - - - - - - - type-parameters - - - , - - - - - attributes - - - - - type-parameter - - - - - - - - class-base - - - - - - : - - - class-type - - - - - - - : - - - interface-type-list - - - - - - - : - - - class-type - - - , - - - interface-type-list - - - - - - - - interface-type-list - - - - interface-type - - - - - interface-type-list - - - , - - - interface-type - - - - - - - - type-parameter-constraints-clauses - - - - type-parameter-constraints-clause - - - - - type-parameter-constraints-clauses - - - type-parameter-constraints-clause - - - - - - - - type-parameter-constraints-clause - - - - where - - - type-parameter - - - : - - - type-parameter-constraints - - - - - - type-parameter-constraints - - - - primary-constraint - - - secondary-constraints - - - constructor-constraint - - - - - primary-constraint - - - , - - - secondary-constraints - - - - - - - primary-constraint - - - , - - - constructor-constraint - - - - - - - secondary-constraints - - - , - - - constructor-constraint - - - - - - - primary-constraint - - - , - - - secondary-constraints - - - , - - - constructor-constraint - - - - - - - - primary-constraint - - - - class-type - - - class - - - struct - - - - - - secondary-constraints - - - - interface-type - - - type-parameter - - - - - secondary-constraints - - - , - - - interface-type - - - - - - - secondary-constraints - - - , - - - type-parameter - - - - - - - - constructor-constraint - - - - new - - - ( - - - ) - - - - - - 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 - - - - - - - - variable-initializer - - - - expression - - - array-initializer - - - - - - method-declaration - - - - method-header - - - method-body - - - - - - method-header - - - - - - - - attributes - - - - - - - method-modifiers - - - - - - - partial - - - - - return-type - - - member-name - - - - - type-parameter-list - - - - - - - - - ( - - - - - formal-parameter-list - - - - - ) - - - - - type-parameter-constraints-clauses - - - - - - - - - - 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 - - - - - default-argument - - - - - - - - default-argument - - - - = - - - expression - - - - - - parameter-modifier - - - - ref - - - out - - - this - - - - - - 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 - - - - - - - accessor-modifier - - - - - get - - - accessor-body - - - - - - set-accessor-declaration - - - - - - attributes - - - - - - - accessor-modifier - - - - - set - - - accessor-body - - - - - - accessor-modifier - - - - protected - - - internal - - - private - - - - - protected - - - internal - - - - - - - internal - - - protected - - - - - - - - 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 - - - - + - - - - - - - * - - - / - - - % - - - & - - - | - - - ^ - - - << - - - right-shift - - - == - - - != - - - > - - - < - - - >= - - - <= - - - - - - 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 - - - - - - - partial - - - - - struct - - - identifier - - - - - type-parameter-list - - - - - - - - - - - struct-interfaces - - - - - - - type-parameter-constraints-clauses - - - - - 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 - - - - array-initializer - - - - - - { - - - - - variable-initializer-list - - - - - } - - - - - - - { - - - variable-initializer-list - - - , - - - } - - - - - - - - variable-initializer-list - - - - variable-initializer - - - - - variable-initializer-list - - - , - - - variable-initializer - - - - - - - - interface-declaration - - - - - - - - attributes - - - - - - - interface-modifiers - - - - - - - partial - - - - - interface - - - - - - - identifier - - - - - variant-type-parameter-list - - - - - - - interface-base - - - - - - - - - - - type-parameter-constraints-clauses - - - - - interface-body - - - - - ; - - - - - - - - - - interface-modifiers - - - - interface-modifier - - - - - interface-modifiers - - - interface-modifier - - - - - - - - interface-modifier - - - - new - - - public - - - protected - - - internal - - - private - - - - - - variant-type-parameter-list - - - - < - - - variant-type-parameters - - - > - - - - - - variant-type-parameters - - - - - - - - attributes - - - - - - - variance-annotation - - - - - type-parameter - - - - - - - variant-type-parameters - - - , - - - - - attributes - - - - - - - variance-annotation - - - - - type-parameter - - - - - - - - variance-annotation - - - - in - - - out - - - - - - 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 - - - type-parameter-list - - - - - - - ( - - - - - formal-parameter-list - - - - - ) - - - - - type-parameter-constraints-clauses - - - - - ; - - - - - - - - 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 - - - return-type - - - - - - - identifier - - - - - variant-type-parameter-list - - - - - - - - - ( - - - - - formal-parameter-list - - - - - ) - - - - - type-parameter-constraints-clauses - - - - - ; - - - - - - - - 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 - - - module - - - - - - 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 - - - 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 - - - - - - argument-name - - - - - attribute-argument-expression - - - - - - named-argument-list - - - - named-argument - - - - - named-argument-list - - - , - - - named-argument - - - - - - - - named-argument - - - - identifier - - - = - - - attribute-argument-expression - - - - - - attribute-argument-expression - - expression - - - - keyword - - - - abstract - - - as - - - base - - - bool - - - break - - - byte - - - case - - - catch - - - char - - - checked - - - class - - - const - - - continue - - - decimal - - - default - - - delegate - - - do - - - double - - - else - - - enum - - - event - - - explicit - - - extern - - - false - - - finally - - - fixed - - - float - - - for - - - foreach - - - goto - - - if - - - implicit - - - in - - - int - - - interface - - - internal - - - is - - - lock - - - long - - - namespace - - - new - - - null - - - object - - - operator - - - out - - - override - - - params - - - private - - - protected - - - public - - - readonly - - - ref - - - return - - - sbyte - - - sealed - - - short - - - sizeof - - - stackalloc - - - static - - - string - - - struct - - - switch - - - this - - - throw - - - true - - - try - - - typeof - - - uint - - - ulong - - - unchecked - - - unsafe - - - ushort - - - using - - - virtual - - - void - - - volatile - - - while - - - group - - - by - - - join - - - on - - - equals - - - into - - - let - - - get - - - set - - - yield - - - partial - - - var - - - orderby - - - add - - - remove - - - where - - - from - - - select - - - ascending - - - descending - - - alias - - - field - - - method - - - param - - - property - - - dynamic - - - assembly - - - module - - - - - \ No newline at end of file + + + namespace-name + + namespace-or-type-name + + + + type-name + + namespace-or-type-name + + + + namespace-or-type-name + + + + + + identifier + + + + + type-argument-list + + + + + + + + + namespace-or-type-name + + + . + + + identifier + + + + + type-argument-list + + + + + + + qualified-alias-member + + + + + + type + + + + value-type + + + reference-type + + + type-parameter + + + + + + value-type + + + + struct-type + + + enum-type + + + + + + struct-type + + + + type-name + + + simple-type + + + nullable-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 + + + + + + nullable-type + + + + non-nullable-value-type + + + ? + + + + + + non-nullable-value-type + + type + + + + enum-type + + type-name + + + + reference-type + + + + class-type + + + interface-type + + + array-type + + + delegate-type + + + + + + class-type + + + + type-name + + + object + + + dynamic + + + string + + + + + + interface-type + + type-name + + + + rank-specifiers + + + + rank-specifier + + + + + rank-specifiers + + + rank-specifier + + + + + + + + rank-specifier + + + + [ + + + + + dim-separators + + + + + ] + + + + + + dim-separators + + + + , + + + + + dim-separators + + + , + + + + + + + + delegate-type + + type-name + + + + type-argument-list + + + + < + + + type-arguments + + + > + + + + + + type-arguments + + + + type-argument + + + + + type-arguments + + + , + + + type-argument + + + + + + + + type-argument + + type + + + + type-parameter + + identifier + + + + variable-reference + + expression + + + + argument-list + + + + argument + + + + + argument-list + + + , + + + argument + + + + + + + + argument + + + + + + argument-name + + + + + argument-value + + + + + + argument-name + + + + identifier + + + : + + + + + + argument-value + + + + expression + + + + + ref + + + variable-reference + + + + + + + out + + + variable-reference + + + + + + + + primary-expression + + + + primary-no-array-creation-expression + + + 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 + + + anonymous-object-creation-expression + + + typeof-expression + + + checked-expression + + + unchecked-expression + + + default-value-expression + + + anonymous-method-expression + + + + + + simple-name + + + + identifier + + + + + type-argument-list + + + + + + + + parenthesized-expression + + + + ( + + + expression + + + ) + + + + + + member-access + + + + + + primary-expression + + + . + + + identifier + + + + + type-argument-list + + + + + + + + + predefined-type + + + . + + + identifier + + + + + type-argument-list + + + + + + + + + qualified-alias-member + + + . + + + 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 + + + [ + + + argument-list + + + ] + + + + + + this-access + + this + + + + base-access + + + + + + base + + + . + + + identifier + + + + + + + base + + + [ + + + argument-list + + + ] + + + + + + + + post-increment-expression + + + + primary-expression + + + ++ + + + + + + post-decrement-expression + + + + primary-expression + + + -- + + + + + + object-creation-expression + + + + + + new + + + type + + + ( + + + + + argument-list + + + + + ) + + + + + object-or-collection-initializer + + + + + + + + + new + + + type + + + object-or-collection-initializer + + + + + + + + object-or-collection-initializer + + + + object-initializer + + + collection-initializer + + + + + + object-initializer + + + + + + { + + + + + member-initializer-list + + + + + } + + + + + + + { + + + member-initializer-list + + + , + + + } + + + + + + + + member-initializer-list + + + + member-initializer + + + + + member-initializer-list + + + , + + + member-initializer + + + + + + + + member-initializer + + + + identifier + + + = + + + initializer-value + + + + + + initializer-value + + + + expression + + + object-or-collection-initializer + + + + + + collection-initializer + + + + + + { + + + element-initializer-list + + + } + + + + + + + { + + + element-initializer-list + + + , + + + } + + + + + + + + element-initializer-list + + + + element-initializer + + + + + element-initializer-list + + + , + + + element-initializer + + + + + + + + element-initializer + + + + non-assignment-expression + + + + + { + + + expression-list + + + } + + + + + + + + expression-list + + + + expression + + + + + expression-list + + + , + + + expression + + + + + + + + array-creation-expression + + + + + + new + + + non-array-type + + + [ + + + expression-list + + + ] + + + + + rank-specifiers + + + + + + + array-initializer + + + + + + + + + new + + + array-type + + + array-initializer + + + + + + + new + + + rank-specifier + + + array-initializer + + + + + + + + delegate-creation-expression + + + + new + + + delegate-type + + + ( + + + expression + + + ) + + + + + + anonymous-object-creation-expression + + + + new + + + anonymous-object-initializer + + + + + + anonymous-object-initializer + + + + + + { + + + + + member-declarator-list + + + + + } + + + + + + + { + + + member-declarator-list + + + , + + + } + + + + + + + + member-declarator-list + + + + member-declarator + + + + + member-declarator-list + + + , + + + member-declarator + + + + + + + + member-declarator + + + + simple-name + + + member-access + + + + + identifier + + + = + + + expression + + + + + + + + typeof-expression + + + + + + typeof + + + ( + + + type + + + ) + + + + + + + typeof + + + ( + + + unbound-type-name + + + ) + + + + + + + typeof + + + ( + + + void + + + ) + + + + + + + + unbound-type-name + + + + + + identifier + + + + + generic-dimension-specifier + + + + + + + + + identifier + + + :: + + + identifier + + + + + generic-dimension-specifier + + + + + + + + + unbound-type-name + + + . + + + identifier + + + + + generic-dimension-specifier + + + + + + + + + + generic-dimension-specifier + + + + < + + + + + commas + + + + + > + + + + + + commas + + + + , + + + + + commas + + + , + + + + + + + + checked-expression + + + + checked + + + ( + + + expression + + + ) + + + + + + unchecked-expression + + + + unchecked + + + ( + + + expression + + + ) + + + + + + default-value-expression + + + + default + + + ( + + + type + + + ) + + + + + + unary-expression + + + + primary-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 + + + right-shift + + + 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 + + + + + + + + null-coalescing-expression + + + + conditional-or-expression + + + + + conditional-or-expression + + + ?? + + + null-coalescing-expression + + + + + + + + conditional-expression + + + + null-coalescing-expression + + + + + null-coalescing-expression + + + ? + + + expression + + + : + + + expression + + + + + + + + lambda-expression + + + + anonymous-function-signature + + + => + + + anonymous-function-body + + + + + + anonymous-method-expression + + + + delegate + + + + + explicit-anonymous-function-signature + + + + + block + + + + + + anonymous-function-signature + + + + explicit-anonymous-function-signature + + + implicit-anonymous-function-signature + + + + + + explicit-anonymous-function-signature + + + + ( + + + + + explicit-anonymous-function-parameter-list + + + + + ) + + + + + + explicit-anonymous-function-parameter-list + + + + explicit-anonymous-function-parameter + + + + + explicit-anonymous-function-parameter-list + + + , + + + explicit-anonymous-function-parameter + + + + + + + + explicit-anonymous-function-parameter + + + + + + anonymous-function-parameter-modifier + + + + + type + + + identifier + + + + + + anonymous-function-parameter-modifier + + + + ref + + + out + + + + + + implicit-anonymous-function-signature + + + + + + ( + + + + + implicit-anonymous-function-parameter-list + + + + + ) + + + + + implicit-anonymous-function-parameter + + + + + + implicit-anonymous-function-parameter-list + + + + implicit-anonymous-function-parameter + + + + + implicit-anonymous-function-parameter-list + + + , + + + implicit-anonymous-function-parameter + + + + + + + + implicit-anonymous-function-parameter + + identifier + + + + anonymous-function-body + + + + expression + + + block + + + + + + query-expression + + + + from-clause + + + query-body + + + + + + from-clause + + + + from + + + + + type + + + + + identifier + + + in + + + expression + + + + + + query-body + + + + + + query-body-clauses + + + + + select-or-group-clause + + + + + query-continuation + + + + + + + + query-body-clauses + + + + query-body-clause + + + + + query-body-clauses + + + query-body-clause + + + + + + + + query-body-clause + + + + from-clause + + + let-clause + + + where-clause + + + join-clause + + + join-into-clause + + + orderby-clause + + + + + + let-clause + + + + let + + + identifier + + + = + + + expression + + + + + + where-clause + + + + where + + + boolean-expression + + + + + + join-clause + + + + join + + + + + type + + + + + identifier + + + in + + + expression + + + on + + + expression + + + equals + + + expression + + + + + + join-into-clause + + + + join + + + + + type + + + + + identifier + + + in + + + expression + + + on + + + expression + + + equals + + + expression + + + into + + + identifier + + + + + + orderby-clause + + + + orderby + + + orderings + + + + + + orderings + + + + ordering + + + + + orderings + + + , + + + ordering + + + + + + + + ordering + + + + expression + + + + + ordering-direction + + + + + + + + ordering-direction + + + + ascending + + + descending + + + + + + select-or-group-clause + + + + select-clause + + + group-clause + + + + + + select-clause + + + + select + + + expression + + + + + + group-clause + + + + group + + + expression + + + by + + + expression + + + + + + query-continuation + + + + into + + + identifier + + + query-body + + + + + + assignment + + + + unary-expression + + + assignment-operator + + + expression + + + + + + assignment-operator + + + + = + + + += + + + -= + + + *= + + + /= + + + %= + + + &= + + + |= + + + ^= + + + <<= + + + right-shift-assignment + + + + + + expression + + + + non-assignment-expression + + + assignment + + + + + + non-assignment-expression + + + + conditional-expression + + + lambda-expression + + + query-expression + + + + + + 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 + + + yield-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 + + + + local-variable-type + + + local-variable-declarators + + + + + + local-variable-type + + + + type + + + var + + + + + + 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 + + + ( + + + local-variable-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 + + + + + + yield-statement + + + + + + yield + + + return + + + expression + + + ; + + + + + + + yield + + + break + + + ; + + + + + + + + compilation-unit + + + + + + + + extern-alias-directives + + + + + + + using-directives + + + + + + + global-attributes + + + + + + + + + namespace-member-declarations + + + + + + + + namespace-declaration + + + + namespace + + + qualified-identifier + + + namespace-body + + + + + ; + + + + + + + + qualified-identifier + + + + identifier + + + + + qualified-identifier + + + . + + + identifier + + + + + + + + namespace-body + + + + { + + + + + extern-alias-directives + + + + + + + using-directives + + + + + + + namespace-member-declarations + + + + + } + + + + + + extern-alias-directives + + + + extern-alias-directive + + + + + extern-alias-directives + + + extern-alias-directive + + + + + + + + extern-alias-directive + + + + extern + + + alias + + + identifier + + + ; + + + + + + 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 + + + + + + qualified-alias-member + + + + identifier + + + :: + + + identifier + + + + + type-argument-list + + + + + + + + class-declaration + + + + + + + + attributes + + + + + + + class-modifiers + + + + + + + partial + + + + + class + + + identifier + + + + + type-parameter-list + + + + + + + + + + + class-base + + + + + + + type-parameter-constraints-clauses + + + + + class-body + + + + + ; + + + + + + + + + + class-modifiers + + + + class-modifier + + + + + class-modifiers + + + class-modifier + + + + + + + + class-modifier + + + + new + + + public + + + protected + + + internal + + + private + + + abstract + + + sealed + + + static + + + + + + type-parameter-list + + + + < + + + type-parameters + + + > + + + + + + type-parameters + + + + + + + + attributes + + + + + type-parameter + + + + + + + type-parameters + + + , + + + + + attributes + + + + + type-parameter + + + + + + + + class-base + + + + + + : + + + class-type + + + + + + + : + + + interface-type-list + + + + + + + : + + + class-type + + + , + + + interface-type-list + + + + + + + + interface-type-list + + + + interface-type + + + + + interface-type-list + + + , + + + interface-type + + + + + + + + type-parameter-constraints-clauses + + + + type-parameter-constraints-clause + + + + + type-parameter-constraints-clauses + + + type-parameter-constraints-clause + + + + + + + + type-parameter-constraints-clause + + + + where + + + type-parameter + + + : + + + type-parameter-constraints + + + + + + type-parameter-constraints + + + + primary-constraint + + + secondary-constraints + + + constructor-constraint + + + + + primary-constraint + + + , + + + secondary-constraints + + + + + + + primary-constraint + + + , + + + constructor-constraint + + + + + + + secondary-constraints + + + , + + + constructor-constraint + + + + + + + primary-constraint + + + , + + + secondary-constraints + + + , + + + constructor-constraint + + + + + + + + primary-constraint + + + + class-type + + + class + + + struct + + + + + + secondary-constraints + + + + interface-type + + + type-parameter + + + + + secondary-constraints + + + , + + + interface-type + + + + + + + secondary-constraints + + + , + + + type-parameter + + + + + + + + constructor-constraint + + + + new + + + ( + + + ) + + + + + + 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 + + + + + + + + variable-initializer + + + + expression + + + array-initializer + + + + + + method-declaration + + + + method-header + + + method-body + + + + + + method-header + + + + + + + + attributes + + + + + + + method-modifiers + + + + + + + partial + + + + + return-type + + + member-name + + + + + type-parameter-list + + + + + + + + + ( + + + + + formal-parameter-list + + + + + ) + + + + + type-parameter-constraints-clauses + + + + + + + + + + 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 + + + + + default-argument + + + + + + + + default-argument + + + + = + + + expression + + + + + + parameter-modifier + + + + ref + + + out + + + this + + + + + + 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 + + + + + + + accessor-modifier + + + + + get + + + accessor-body + + + + + + set-accessor-declaration + + + + + + attributes + + + + + + + accessor-modifier + + + + + set + + + accessor-body + + + + + + accessor-modifier + + + + protected + + + internal + + + private + + + + + protected + + + internal + + + + + + + internal + + + protected + + + + + + + + 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 + + + + + + + + - + + + * + + + / + + + % + + + & + + + | + + + ^ + + + << + + + right-shift + + + == + + + != + + + > + + + < + + + >= + + + <= + + + + + + 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 + + + + + + + partial + + + + + struct + + + identifier + + + + + type-parameter-list + + + + + + + + + + + struct-interfaces + + + + + + + type-parameter-constraints-clauses + + + + + 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 + + + + array-initializer + + + + + + { + + + + + variable-initializer-list + + + + + } + + + + + + + { + + + variable-initializer-list + + + , + + + } + + + + + + + + variable-initializer-list + + + + variable-initializer + + + + + variable-initializer-list + + + , + + + variable-initializer + + + + + + + + interface-declaration + + + + + + + + attributes + + + + + + + interface-modifiers + + + + + + + partial + + + + + interface + + + + + + + identifier + + + + + variant-type-parameter-list + + + + + + + interface-base + + + + + + + + + + + type-parameter-constraints-clauses + + + + + interface-body + + + + + ; + + + + + + + + + + interface-modifiers + + + + interface-modifier + + + + + interface-modifiers + + + interface-modifier + + + + + + + + interface-modifier + + + + new + + + public + + + protected + + + internal + + + private + + + + + + variant-type-parameter-list + + + + < + + + variant-type-parameters + + + > + + + + + + variant-type-parameters + + + + + + + + attributes + + + + + + + variance-annotation + + + + + type-parameter + + + + + + + variant-type-parameters + + + , + + + + + attributes + + + + + + + variance-annotation + + + + + type-parameter + + + + + + + + variance-annotation + + + + in + + + out + + + + + + 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 + + + type-parameter-list + + + + + + + ( + + + + + formal-parameter-list + + + + + ) + + + + + type-parameter-constraints-clauses + + + + + ; + + + + + + + + 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 + + + return-type + + + + + + + identifier + + + + + variant-type-parameter-list + + + + + + + + + ( + + + + + formal-parameter-list + + + + + ) + + + + + type-parameter-constraints-clauses + + + + + ; + + + + + + + + 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 + + + module + + + + + + 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 + + + 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 + + + + + + argument-name + + + + + attribute-argument-expression + + + + + + named-argument-list + + + + named-argument + + + + + named-argument-list + + + , + + + named-argument + + + + + + + + named-argument + + + + identifier + + + = + + + attribute-argument-expression + + + + + + attribute-argument-expression + + expression + + + + keyword + + + + abstract + + + as + + + base + + + bool + + + break + + + byte + + + case + + + catch + + + char + + + checked + + + class + + + const + + + continue + + + decimal + + + default + + + delegate + + + do + + + double + + + else + + + enum + + + event + + + explicit + + + extern + + + false + + + finally + + + fixed + + + float + + + for + + + foreach + + + goto + + + if + + + implicit + + + in + + + int + + + interface + + + internal + + + is + + + lock + + + long + + + namespace + + + new + + + null + + + object + + + operator + + + out + + + override + + + params + + + private + + + protected + + + public + + + readonly + + + ref + + + return + + + sbyte + + + sealed + + + short + + + sizeof + + + stackalloc + + + static + + + string + + + struct + + + switch + + + this + + + throw + + + true + + + try + + + typeof + + + uint + + + ulong + + + unchecked + + + unsafe + + + ushort + + + using + + + virtual + + + void + + + volatile + + + while + + + group + + + by + + + join + + + on + + + equals + + + into + + + let + + + get + + + set + + + yield + + + partial + + + var + + + orderby + + + add + + + remove + + + where + + + from + + + select + + + ascending + + + descending + + + alias + + + field + + + method + + + param + + + property + + + dynamic + + + assembly + + + module + + + + + diff --git a/topics/grammars/java/jls1/Makefile b/topics/grammars/java/jls1/Makefile index 5e8cb760..991ad02b 100644 --- a/topics/grammars/java/jls1/Makefile +++ b/topics/grammars/java/jls1/Makefile @@ -25,8 +25,8 @@ read: test: ../../../../shared/tools/checkxml bgf impl1.bgf ../../../../shared/tools/checkxml bgf read1.bgf - ../../../../shared/tools/gdts impl1.bgf extracted-implementable-grammar.bgf - ../../../../shared/tools/gdts read1.bgf extracted-readable-grammar.bgf + ../../../../shared/tools/gdt impl1.bgf extracted-implementable-grammar.bgf + ../../../../shared/tools/gdt read1.bgf extracted-readable-grammar.bgf clean: rm -f *.bgf parse.html diff --git a/topics/grammars/java/jls2/Makefile b/topics/grammars/java/jls2/Makefile index 76f93a77..9ca35779 100644 --- a/topics/grammars/java/jls2/Makefile +++ b/topics/grammars/java/jls2/Makefile @@ -23,8 +23,8 @@ read: test: ../../../../shared/tools/checkxml bgf impl2.bgf ../../../../shared/tools/checkxml bgf read2.bgf - ../../../../shared/tools/gdts impl2.bgf extracted-implementable-grammar.bgf - ../../../../shared/tools/gdts read2.bgf extracted-readable-grammar.bgf + ../../../../shared/tools/gdt impl2.bgf extracted-implementable-grammar.bgf + ../../../../shared/tools/gdt read2.bgf extracted-readable-grammar.bgf clean: rm -f *.bgf parse.html diff --git a/topics/grammars/java/jls3/Makefile b/topics/grammars/java/jls3/Makefile index 2dc8ed01..875e4b30 100644 --- a/topics/grammars/java/jls3/Makefile +++ b/topics/grammars/java/jls3/Makefile @@ -23,8 +23,8 @@ read: test: ../../../../shared/tools/checkxml bgf impl3.bgf ../../../../shared/tools/checkxml bgf read3.bgf - ../../../../shared/tools/gdts impl3.bgf extracted-implementable-grammar.bgf - ../../../../shared/tools/gdts read3.bgf extracted-readable-grammar.bgf + ../../../../shared/tools/gdt impl3.bgf extracted-implementable-grammar.bgf + ../../../../shared/tools/gdt read3.bgf extracted-readable-grammar.bgf clean: rm -f *.bgf parse.html