From e98457e7e0644ebd5b9a9f73347af718ce8a7858 Mon Sep 17 00:00:00 2001 From: Nigel-Ecma Date: Mon, 17 Nov 2025 11:52:39 +1300 Subject: [PATCH 1/2] =?UTF-8?q?[Review]=20-=20#681=20has=20been=20merged?= =?UTF-8?q?=20before=20completion=20to=20reduce=20=20=20the=20conversation?= =?UTF-8?q?=20&=20change=20complexity.=20This=20is=20a=20review=20of=20=20?= =?UTF-8?q?=20this=20PR=20changes=20now=20in=20draft-v8.=20Every=20change?= =?UTF-8?q?=20will=20be=20=20=20augmented=20by=20a=20comment=20in=20the=20?= =?UTF-8?q?new=20PR=20-=20Grammar=20testing,=20updates=20post=20#681=20=20?= =?UTF-8?q?=20-=20Update=20tarball=20to=20v2.3.7=20=20=20-=20Add=20sample?= =?UTF-8?q?=20=E2=80=9CExpanded=20Interfaces=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dependencies/GrammarTestingEnv.tgz | Bin 54682 -> 54893 bytes standard/basic-concepts.md | 2 +- standard/classes.md | 3 +- standard/interfaces.md | 18 +- .../Samples/v8/Expanded Interfaces/ReadMe.md | 11 + .../Reference/sample.gruntree.red.txt | 869 +++++++ .../Reference/sample.stderr.txt | 0 .../Reference/sample.tokens.txt | 167 ++ .../Reference/sample.tree.red.txt | 1 + .../Reference/sample.tree.svg | 2005 +++++++++++++++++ .../Expanded Interfaces/_Sample_Options.txt | 1 + .../Samples/v8/Expanded Interfaces/sample.cs | 41 + 12 files changed, 3107 insertions(+), 11 deletions(-) create mode 100644 tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/ReadMe.md create mode 100644 tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/Reference/sample.gruntree.red.txt create mode 100644 tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/Reference/sample.stderr.txt create mode 100644 tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/Reference/sample.tokens.txt create mode 100644 tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/Reference/sample.tree.red.txt create mode 100644 tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/Reference/sample.tree.svg create mode 100644 tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/_Sample_Options.txt create mode 100644 tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/sample.cs diff --git a/.github/workflows/dependencies/GrammarTestingEnv.tgz b/.github/workflows/dependencies/GrammarTestingEnv.tgz index 97e8bd78e6b8697d9bdb60175db08829a4ae120c..77ef32699af5172bd09fd034dcb79bd327229e33 100644 GIT binary patch delta 53979 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

B^irSy3FB#1u%_ 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 diff --git a/standard/basic-concepts.md b/standard/basic-concepts.md index aa1606ffa..c7ef84d25 100644 --- a/standard/basic-concepts.md +++ b/standard/basic-concepts.md @@ -402,7 +402,7 @@ As described in [§7.4](basic-concepts.md#74-members), all members of a base cla ### 7.5.4 Protected access -When a `protected` or `private protected` instance member is accessed outside the program text of the class in which it is declared, and when a `protected internal` instance member is accessed outside the program text of the program in which it is declared, the access shall take place within a class declaration that derives from the class in which it is declared. Furthermore, the access is required to take place *through* an instance of that derived class type or a class type constructed from it. This restriction prevents one derived class from accessing protected members of other derived classes, even when the members are inherited from the same base class. Instance interface members defined with `protected` or `private protected` access cannot be accessed from a `class` or `struct` that implements that interface; these can be accessed only from derived interfaces. However, `class` and `struct` types can define overridden `protected` instance members declared in an interface it implements. +When a `protected` or `private protected` instance member is accessed outside the program text of the class in which it is declared, and when a `protected internal` instance member is accessed outside the program text of the program in which it is declared, the access shall take place within a class declaration that derives from the class in which it is declared. Furthermore, the access is required to take place *through* an instance of that derived class type or a class type constructed from it. This restriction prevents one derived class from accessing protected members of other derived classes, even when the members are inherited from the same base class. Instance interface members defined with `protected` or `private protected` access cannot be accessed from a `class` or `struct` that implements that interface; these can be accessed only from derived interfaces. However, `class` and `struct` types can override `protected` instance members declared in an interface they implement. Let `B` be a base class that declares a protected instance member `M`, and let `D` be a class that derives from `B`. Within the *class_body* of `D`, access to `M` can take one of the following forms: diff --git a/standard/classes.md b/standard/classes.md index 7070443bb..168a70106 100644 --- a/standard/classes.md +++ b/standard/classes.md @@ -236,7 +236,7 @@ The direct base class of a class type shall be at least as accessible as the cla The direct base class of a class type shall not be any of the following types: `System.Array`, `System.Delegate`, `System.Enum`, `System.ValueType` or the `dynamic` type. Furthermore, a generic class declaration shall not use `System.Attribute` as a direct or indirect base class ([§23.2.1](attributes.md#2321-general)). -In determining the meaning of the direct base class specification `A` of a class `B`, the direct base class of `B` is temporarily assumed to be `object`, which ensures that the meaning of a base class specification cannot recursively depend on itself. +In determining the meaning of the direct base class specification `A` of a class `B`, the direct base class of `B` is temporarily assumed to be `object`, which ensures that the meaning of a base class specification cannot recursively depend on itself. Given this definition, the complete set of types upon which a class depends is the transitive closure of the *directly depends on* relationship. > *Example*: The following > @@ -3426,6 +3426,7 @@ For a ref-valued property the *ref_get_accessor_declaration* consists optional a The use of *accessor_modifier*s is governed by the following restrictions: +- An *accessor_modifier* shall not be used in an explicit interface member implementation. - The *accessor_modifier* `readonly` is permitted only in a *property_declaration* or *indexer_declaration* that is contained directly by a *struct_declaration* ([§16.4.11](structs.md#16411-properties), [§16.4.13](structs.md#16413-indexers)). - For a property or indexer that has no `override` modifier, an *accessor_modifier* is permitted only if the property or indexer has both a get and set accessor, and then is permitted only on one of those accessors. - For a property or indexer that includes an `override` modifier, an accessor shall match the *accessor_modifier*, if any, of the accessor being overridden. diff --git a/standard/interfaces.md b/standard/interfaces.md index 2fef96404..7e4bc18de 100644 --- a/standard/interfaces.md +++ b/standard/interfaces.md @@ -4,7 +4,7 @@ An interface defines a contract. A class or struct that implements an interface shall adhere to its contract. An interface may inherit from multiple base interfaces, and a class or struct may implement multiple interfaces. -Interfaces may contain various kinds of members, as described in [§19.4](interfaces.md#194-interface-members). The interface itself may provide an implementation for some or all of the function members that it declares. Members for which the interface does not provide an implementation are abstract. Their implementations must be supplied by classes or structs that implement the interface, or derived interface that provide an overriding definition. +Interfaces may contain various kinds of members, as described in [§19.4](interfaces.md#194-interface-members). The interface itself may provide an implementation for some or all of the function members that it declares. Members for which the interface does not provide an implementation are abstract. Their implementations must be supplied by classes or structs that implement the interface, and may be supplied by derived interfaces through an explicit implementation ([§19.6.2](interfaces.md#1962-explicit-interface-member-implementations)). > *Note*: Historically, adding a new function member to an interface impacted all existing consumers of that interface type; it was a breaking change. The addition of interface function member implementations allowed developers to upgrade an interface while still enabling any implementors to override that implementation. Users of the interface can accept the implementation as a non-breaking change; however, if their requirements are different, they can override the provided implementations. *end note* @@ -233,12 +233,12 @@ interface_member_declaration ; ``` -This clause augments the description of members in classes ([§15.3](classes.md#153-class-members)) with restrictions for interfaces. The Interface members are declared using *member_declaration*s with the following additional rules: +This clause augments the description of members in classes ([§15.3](classes.md#153-class-members)) with the differences and restrictions for interfaces: - A *finalizer_declaration* is not allowed. - Instance constructors, *constructor_declaration*s, are not allowed. - All interface members implicitly have public access; however, an explicit access modifier ([§7.5.2](basic-concepts.md#752-declared-accessibility)) is permitted except on static constructors ([§15.12](classes.md#1512-static-constructors)). -- The `abstract` modifier is implied for interface function members without bodies; that modifier may be given explicitly. +- The `abstract` modifier is implied for interface function members ([§12.6](expressions.md#126-function-members)) without bodies; that modifier may be given explicitly. - An interface instance function member whose declaration includes a body is an implicitly `virtual` member unless the `sealed` or `private` modifier is used. The `virtual` modifier may be given explicitly. - A `private` or `sealed` function member of an interface shall have a body. - A `private` function member shall not have the modifier `sealed`. @@ -476,7 +476,7 @@ Interface indexers are declared using *indexer_declaration*s ([§15.9](classes.m This clause augments the description of *operator_declaration* members in classes [§15.10](classes.md#1510-operators) for operators declared in interfaces. -An *operator_declaration* in an interface is the implementation ([§19.1](interfaces.md#191-general)). +For an *operator_declaration* in an interface the *operator_body* may only be a block body ([§15.6.1](classes.md#1561-general)) or an expression body ([§15.6.1](classes.md#1561-general)). It is a compile-time error for an interface to declare a conversion, equality, or inequality operator. @@ -514,7 +514,7 @@ It is an error to declare a class type, struct type, or enum type within the sco > > *end example* -### 19.4.10 most specific implementation +### 19.4.10 Most specific implementation Every class and struct shall have a most specific implementation for every virtual member declared in all interfaces implemented by that type among the implementations appearing in the type or its direct and indirect interfaces. The ***most specific implementation*** is a unique implementation that is more specific than every other implementation. @@ -886,7 +886,7 @@ A *type_parameter_constraints_clause* on an explicit interface method implementa > Explicit interface member implementations serve two primary purposes: > > - Because explicit interface member implementations are not accessible through class or struct instances, they allow interface implementations to be excluded from the public interface of a class or struct. This is particularly useful when a class or struct implements an internal interface that is of no interest to a consumer of that class or struct. -> - Explicit interface member implementations allow disambiguation of interface members with the same signature. Without explicit interface member implementations it would be impossible for a class, struct, or interface to have different implementations of interface members with the same signature and return type, as would it be impossible for a class, struct, or interface to have any implementation at all of interface members with the same signature but with different return types. +> - Explicit interface member implementations allow disambiguation of interface members with the same signature. Without explicit interface member implementations it would be impossible for a class, struct, or interface to have different implementations of interface members with the same signature and return type; and it would be impossible for a class, struct, or interface to have any implementation at all of interface members with the same signature but with different return types. > > *end note* @@ -1066,7 +1066,7 @@ When a generic method implicitly implements an interface method, the constraints ### 19.6.5 Interface mapping -A class or struct shall provide implementations of all abstract members of the interfaces that are listed in the base class list of the class or struct. The process of locating implementations of interface members in an implementing class or struct is known as ***interface mapping***. +A class or struct shall provide implementations for all abstract members of the interfaces that are listed in the base class list of the class or struct which are not implemented in any of those listed interfaces. The process of locating implementations of interface members in an implementing class or struct is known as ***interface mapping***. Interface mapping for a class or struct `C` locates an implementation for each member of each interface specified in the base class list of `C`. The implementation of a particular interface member `I.M`, where `I` is the interface in which the member `M` is declared, is determined by examining each class, interface, or struct `S`, starting with `C` and repeating for each successive base class and implemented interface of `C`, until a match is located: @@ -1463,7 +1463,7 @@ When a class implements an interface, it implicitly also implements all that int ### 19.6.8 Abstract classes and interfaces -Like a non-abstract class, an abstract class shall provide implementations of all abstract members of the interfaces that are listed in the base class list of the class. However, an abstract class is permitted to map interface methods onto abstract methods. +Like a non-abstract class, an abstract class shall provide implementations of all abstract members of the interfaces that are listed in the base class list of the class which are not implemented in any of those listed interfaces. However, an abstract class is permitted to map interface methods onto abstract methods. > *Example*: > @@ -1479,7 +1479,7 @@ Like a non-abstract class, an abstract class shall provide implementations of al > { > public abstract void F(); > public abstract void G(); -> } +> } > ``` > > Here, the implementation of `IMethods` maps `F` and `G` onto abstract methods, which shall be overridden in non-abstract classes that derive from `C`. diff --git a/tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/ReadMe.md b/tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/ReadMe.md new file mode 100644 index 000000000..84e8b2b69 --- /dev/null +++ b/tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/ReadMe.md @@ -0,0 +1,11 @@ +# Sample: Expanded Interfaces + +Simple test to check that interfaces can now declare more kinds of members and contain +implementations. + +The grammar for all interface members now uses the same productions as for classes, +with any differences being handled in prose, as such this test does not test +these differences. + +Note: No Antlr custom predicates have currently been developed for any interface +semantic rules as they are not key to parsing. \ No newline at end of file diff --git a/tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/Reference/sample.gruntree.red.txt b/tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/Reference/sample.gruntree.red.txt new file mode 100644 index 000000000..afaa700c1 --- /dev/null +++ b/tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/Reference/sample.gruntree.red.txt @@ -0,0 +1,869 @@ +⎛ +⎜ prog +⎜ ⎛ +⎜ ⎜ compilation_unit +⎜ ⎜ ⎛ +⎜ ⎜ ⎜ interface_declaration +⎜ ⎜ ⎜ interface +⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ KAI +⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ interface_body +⎜ ⎜ ⎜ ⎜ { +⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ interface_member_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ constant_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ constant_modifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ public +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ const +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ integral_type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ int +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ constant_declarators +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ constant_declarator +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ Constant +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ = +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ constant_expression +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ literal +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ 100 +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ; +⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ interface_member_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ field_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ field_modifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ private +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ field_modifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ static +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ integral_type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ int +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ variable_declarators +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ field +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ; +⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ interface_member_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ method_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ method_modifiers +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ return_type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ integral_type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ int +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ method_header +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ member_name +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ M1 +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ( +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ) +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ method_body +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ; +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ interface_member_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ method_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ method_modifiers +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ method_modifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ref_method_modifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ protected +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ method_modifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ref_method_modifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ new +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ return_type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ integral_type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ int +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ method_header +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ member_name +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ M2 +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ( +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ) +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ method_body +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ block +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ { +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ statement_list +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ return_statement +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ return +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ expression +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ literal +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ 42 +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ; +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ } +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ interface_member_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ method_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ method_modifiers +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ method_modifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ref_method_modifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ protected +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ method_modifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ref_method_modifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ new +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ return_type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ integral_type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ int +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ method_header +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ member_name +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ M3 +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ( +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ) +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ method_body +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ => +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ expression +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ literal +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ 24 +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ; +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ interface_member_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ property_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ integral_type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ int +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ member_name +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ P1 +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ property_body +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ { +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ accessor_declarations +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ get_accessor_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ get +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ accessor_body +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ; +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ } +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ interface_member_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ property_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ property_modifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ public +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ property_modifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ new +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ integral_type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ int +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ member_name +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ P2 +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ property_body +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ { +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ accessor_declarations +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ get_accessor_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ get +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ accessor_body +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ block +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ { +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ statement_list +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ return_statement +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ return +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ expression +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ literal +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ 10 +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ; +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ } +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ } +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ interface_member_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ event_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ event +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ EventHandler +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ variable_declarators +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ E1 +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ; +⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ interface_member_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ event_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ event_modifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ sealed +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ event +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ EventHandler +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ member_name +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ E2 +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ { +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ event_accessor_declarations +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ add_accessor_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ add +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ block +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ { +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ } +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ remove_accessor_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ remove +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ block +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ { +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ } +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ } +⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ interface_member_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ indexer_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ indexer_declarator +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ simple_type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ bool +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ this +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ [ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ parameter_list +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ fixed_parameter +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ integral_type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ int +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ix1 +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ] +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ indexer_body +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ { +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ accessor_declarations +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ set_accessor_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ set +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ accessor_body +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ; +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ } +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ interface_member_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ indexer_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ indexer_modifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ internal +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ indexer_declarator +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ simple_type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ bool +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ this +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ [ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ parameter_list +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ fixed_parameter +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ integral_type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ int +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ix2 +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ] +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ indexer_body +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ { +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ accessor_declarations +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ get_accessor_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ get +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ accessor_body +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ block +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ { +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ statement_list +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ return_statement +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ return +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ expression +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ boolean_literal +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ true +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ; +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ } +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ } +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ interface_member_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ indexer_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ indexer_modifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ internal +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ indexer_declarator +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ simple_type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ bool +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ this +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ [ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ parameter_list +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ fixed_parameter +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ integral_type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ int +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ix3 +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ] +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ indexer_body +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ => +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ expression +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ boolean_literal +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ false +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ; +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ interface_member_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ static_constructor_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ static_constructor_modifiers +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ static +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ KAI +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ( +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ) +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ static_constructor_body +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ block +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ { +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ statement_list +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ expression_statement +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ statement_expression +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ assignment +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ unary_expression +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ field +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ assignment_operator +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ = +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ expression +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ literal +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ 50 +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ; +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ } +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ interface_member_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ operator_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ operator_modifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ static +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ operator_declarator +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ unary_operator_declarator +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ KAI +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ operator +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ overloadable_unary_operator +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ++ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ( +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ fixed_parameter +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ KAI +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ arg1 +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ) +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ operator_body +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ; +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ interface_member_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ operator_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ operator_modifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ public +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ operator_modifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ static +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ operator_declarator +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ unary_operator_declarator +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ KAI +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ operator +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ overloadable_unary_operator +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ -- +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ( +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ fixed_parameter +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ KAI +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ arg1 +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ) +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ operator_body +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ block +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ { +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ statement_list +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ return_statement +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ return +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ expression +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ arg1 +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ; +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ } +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ interface_member_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ operator_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ operator_modifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ public +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ operator_modifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ static +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ operator_declarator +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ unary_operator_declarator +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ KAI +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ operator +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ overloadable_unary_operator +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ -- +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ( +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ fixed_parameter +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ KAI +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ arg1 +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ) +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ operator_body +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ => +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ expression +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ arg1 +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ; +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ interface_member_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ interface_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ interface +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ Nested +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ interface_body +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ { +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ interface_member_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ constant_declaration +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ constant_modifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ public +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ const +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ integral_type +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ int +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ constant_declarators +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ constant_declarator +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ identifier +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ FortyTwo +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ = +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ constant_expression +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ literal +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ 42 +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ; +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ } +⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎜ ⎜ } +⎜ ⎜ ⎜ ⎝ +⎜ ⎜ ⎝ +⎜ ⎝ +⎝ diff --git a/tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/Reference/sample.stderr.txt b/tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/Reference/sample.stderr.txt new file mode 100644 index 000000000..e69de29bb diff --git a/tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/Reference/sample.tokens.txt b/tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/Reference/sample.tokens.txt new file mode 100644 index 000000000..f2019dc2b --- /dev/null +++ b/tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/Reference/sample.tokens.txt @@ -0,0 +1,167 @@ +[@0,0:8='interface',<'interface'>,1:0] +[@1,10:12='KAI',,1:10] +[@2,14:14='{',<'{'>,2:0] +[@3,34:39='public',<'public'>,4:3] +[@4,41:45='const',<'const'>,4:10] +[@5,47:49='int',<'int'>,4:16] +[@6,51:58='Constant',,4:20] +[@7,60:60='=',<'='>,4:29] +[@8,62:64='100',,4:31] +[@9,65:65=';',<';'>,4:34] +[@10,83:89='private',<'private'>,7:3] +[@11,91:96='static',<'static'>,7:11] +[@12,98:100='int',<'int'>,7:18] +[@13,102:106='field',,7:22] +[@14,107:107=';',<';'>,7:27] +[@15,130:132='int',<'int'>,10:3] +[@16,134:135='M1',,10:7] +[@17,136:136='(',<'('>,10:9] +[@18,137:137=')',<')'>,10:10] +[@19,138:138=';',<';'>,10:11] +[@20,143:151='protected',<'protected'>,11:3] +[@21,153:155='new',<'new'>,11:13] +[@22,157:159='int',<'int'>,11:17] +[@23,161:162='M2',,11:21] +[@24,163:163='(',<'('>,11:23] +[@25,164:164=')',<')'>,11:24] +[@26,166:166='{',<'{'>,11:26] +[@27,168:173='return',<'return'>,11:28] +[@28,175:176='42',,11:35] +[@29,177:177=';',<';'>,11:37] +[@30,179:179='}',<'}'>,11:39] +[@31,184:192='protected',<'protected'>,12:3] +[@32,194:196='new',<'new'>,12:13] +[@33,198:200='int',<'int'>,12:17] +[@34,202:203='M3',,12:21] +[@35,204:204='(',<'('>,12:23] +[@36,205:205=')',<')'>,12:24] +[@37,207:208='=>',<'=>'>,12:26] +[@38,210:211='24',,12:29] +[@39,212:212=';',<';'>,12:31] +[@40,235:237='int',<'int'>,15:3] +[@41,239:240='P1',,15:7] +[@42,242:242='{',<'{'>,15:10] +[@43,244:246='get',<'get'>,15:12] +[@44,247:247=';',<';'>,15:15] +[@45,249:249='}',<'}'>,15:17] +[@46,254:259='public',<'public'>,16:3] +[@47,261:263='new',<'new'>,16:10] +[@48,265:267='int',<'int'>,16:14] +[@49,269:270='P2',,16:18] +[@50,272:272='{',<'{'>,16:21] +[@51,274:276='get',<'get'>,16:23] +[@52,278:278='{',<'{'>,16:27] +[@53,280:285='return',<'return'>,16:29] +[@54,287:288='10',,16:36] +[@55,289:289=';',<';'>,16:38] +[@56,291:291='}',<'}'>,16:40] +[@57,293:293='}',<'}'>,16:42] +[@58,314:318='event',<'event'>,19:3] +[@59,320:331='EventHandler',,19:9] +[@60,333:334='E1',,19:22] +[@61,335:335=';',<';'>,19:24] +[@62,340:345='sealed',<'sealed'>,20:3] +[@63,347:351='event',<'event'>,20:10] +[@64,353:364='EventHandler',,20:16] +[@65,366:367='E2',,20:29] +[@66,369:369='{',<'{'>,20:32] +[@67,371:373='add',<'add'>,20:34] +[@68,375:375='{',<'{'>,20:38] +[@69,377:377='}',<'}'>,20:40] +[@70,379:384='remove',<'remove'>,20:42] +[@71,386:386='{',<'{'>,20:49] +[@72,388:388='}',<'}'>,20:51] +[@73,390:390='}',<'}'>,20:53] +[@74,413:416='bool',<'bool'>,23:3] +[@75,418:421='this',<'this'>,23:8] +[@76,422:422='[',<'['>,23:12] +[@77,423:425='int',<'int'>,23:13] +[@78,427:429='ix1',,23:17] +[@79,430:430=']',<']'>,23:20] +[@80,432:432='{',<'{'>,23:22] +[@81,434:436='set',<'set'>,23:24] +[@82,437:437=';',<';'>,23:27] +[@83,439:439='}',<'}'>,23:29] +[@84,444:451='internal',<'internal'>,24:3] +[@85,453:456='bool',<'bool'>,24:12] +[@86,458:461='this',<'this'>,24:17] +[@87,462:462='[',<'['>,24:21] +[@88,463:465='int',<'int'>,24:22] +[@89,467:469='ix2',,24:26] +[@90,470:470=']',<']'>,24:29] +[@91,472:472='{',<'{'>,24:31] +[@92,474:476='get',<'get'>,24:33] +[@93,478:478='{',<'{'>,24:37] +[@94,480:485='return',<'return'>,24:39] +[@95,487:490='true',<'true'>,24:46] +[@96,491:491=';',<';'>,24:50] +[@97,493:493='}',<'}'>,24:52] +[@98,495:495='}',<'}'>,24:54] +[@99,500:507='internal',<'internal'>,25:3] +[@100,509:512='bool',<'bool'>,25:12] +[@101,514:517='this',<'this'>,25:17] +[@102,518:518='[',<'['>,25:21] +[@103,519:521='int',<'int'>,25:22] +[@104,523:525='ix3',,25:26] +[@105,526:526=']',<']'>,25:29] +[@106,528:529='=>',<'=>'>,25:31] +[@107,531:535='false',<'false'>,25:34] +[@108,536:536=';',<';'>,25:39] +[@109,570:575='static',<'static'>,28:3] +[@110,577:579='KAI',,28:10] +[@111,580:580='(',<'('>,28:13] +[@112,581:581=')',<')'>,28:14] +[@113,583:583='{',<'{'>,28:16] +[@114,585:589='field',,28:18] +[@115,591:591='=',<'='>,28:24] +[@116,593:594='50',,28:26] +[@117,595:595=';',<';'>,28:28] +[@118,597:597='}',<'}'>,28:30] +[@119,621:626='static',<'static'>,31:3] +[@120,628:630='KAI',,31:10] +[@121,632:639='operator',<'operator'>,31:14] +[@122,640:641='++',<'++'>,31:22] +[@123,642:642='(',<'('>,31:24] +[@124,643:645='KAI',,31:25] +[@125,647:650='arg1',,31:29] +[@126,651:651=')',<')'>,31:33] +[@127,652:652=';',<';'>,31:34] +[@128,657:662='public',<'public'>,32:3] +[@129,664:669='static',<'static'>,32:10] +[@130,671:673='KAI',,32:17] +[@131,675:682='operator',<'operator'>,32:21] +[@132,683:684='--',<'--'>,32:29] +[@133,685:685='(',<'('>,32:31] +[@134,686:688='KAI',,32:32] +[@135,690:693='arg1',,32:36] +[@136,694:694=')',<')'>,32:40] +[@137,696:696='{',<'{'>,32:42] +[@138,698:703='return',<'return'>,32:44] +[@139,705:708='arg1',,32:51] +[@140,709:709=';',<';'>,32:55] +[@141,711:711='}',<'}'>,32:57] +[@142,716:721='public',<'public'>,33:3] +[@143,723:728='static',<'static'>,33:10] +[@144,730:732='KAI',,33:17] +[@145,734:741='operator',<'operator'>,33:21] +[@146,742:743='--',<'--'>,33:29] +[@147,744:744='(',<'('>,33:31] +[@148,745:747='KAI',,33:32] +[@149,749:752='arg1',,33:36] +[@150,753:753=')',<')'>,33:40] +[@151,755:756='=>',<'=>'>,33:42] +[@152,758:761='arg1',,33:45] +[@153,762:762=';',<';'>,33:49] +[@154,782:790='interface',<'interface'>,36:3] +[@155,792:797='Nested',,36:13] +[@156,802:802='{',<'{'>,37:3] +[@157,828:833='public',<'public'>,39:6] +[@158,835:839='const',<'const'>,39:13] +[@159,841:843='int',<'int'>,39:19] +[@160,845:852='FortyTwo',,39:23] +[@161,854:854='=',<'='>,39:32] +[@162,856:857='42',,39:34] +[@163,858:858=';',<';'>,39:36] +[@164,863:863='}',<'}'>,40:3] +[@165,865:865='}',<'}'>,41:0] +[@166,866:865='',,41:1] diff --git a/tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/Reference/sample.tree.red.txt b/tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/Reference/sample.tree.red.txt new file mode 100644 index 000000000..bd92d82f3 --- /dev/null +++ b/tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/Reference/sample.tree.red.txt @@ -0,0 +1 @@ +(prog (compilation_unit (interface_declaration interface (identifier KAI) (interface_body { (interface_member_declaration (constant_declaration (constant_modifier public) const (type (integral_type int)) (constant_declarators (constant_declarator (identifier Constant) = (constant_expression (literal 100)))) ;)) (interface_member_declaration (field_declaration (field_modifier private) (field_modifier static) (type (integral_type int)) (variable_declarators (identifier field)) ;)) (interface_member_declaration (method_declaration method_modifiers (return_type (integral_type int)) (method_header (member_name (identifier M1)) ( )) (method_body ;))) (interface_member_declaration (method_declaration (method_modifiers (method_modifier (ref_method_modifier protected)) (method_modifier (ref_method_modifier new))) (return_type (integral_type int)) (method_header (member_name (identifier M2)) ( )) (method_body (block { (statement_list (return_statement return (expression (literal 42)) ;)) })))) (interface_member_declaration (method_declaration (method_modifiers (method_modifier (ref_method_modifier protected)) (method_modifier (ref_method_modifier new))) (return_type (integral_type int)) (method_header (member_name (identifier M3)) ( )) (method_body => (expression (literal 24)) ;))) (interface_member_declaration (property_declaration (type (integral_type int)) (member_name (identifier P1)) (property_body { (accessor_declarations (get_accessor_declaration get (accessor_body ;))) }))) (interface_member_declaration (property_declaration (property_modifier public) (property_modifier new) (type (integral_type int)) (member_name (identifier P2)) (property_body { (accessor_declarations (get_accessor_declaration get (accessor_body (block { (statement_list (return_statement return (expression (literal 10)) ;)) })))) }))) (interface_member_declaration (event_declaration event (type (identifier EventHandler)) (variable_declarators (identifier E1)) ;)) (interface_member_declaration (event_declaration (event_modifier sealed) event (type (identifier EventHandler)) (member_name (identifier E2)) { (event_accessor_declarations (add_accessor_declaration add (block { })) (remove_accessor_declaration remove (block { }))) })) (interface_member_declaration (indexer_declaration (indexer_declarator (type (simple_type bool)) this [ (parameter_list (fixed_parameter (type (integral_type int)) (identifier ix1))) ]) (indexer_body { (accessor_declarations (set_accessor_declaration set (accessor_body ;))) }))) (interface_member_declaration (indexer_declaration (indexer_modifier internal) (indexer_declarator (type (simple_type bool)) this [ (parameter_list (fixed_parameter (type (integral_type int)) (identifier ix2))) ]) (indexer_body { (accessor_declarations (get_accessor_declaration get (accessor_body (block { (statement_list (return_statement return (expression (boolean_literal true)) ;)) })))) }))) (interface_member_declaration (indexer_declaration (indexer_modifier internal) (indexer_declarator (type (simple_type bool)) this [ (parameter_list (fixed_parameter (type (integral_type int)) (identifier ix3))) ]) (indexer_body => (expression (boolean_literal false)) ;))) (interface_member_declaration (static_constructor_declaration (static_constructor_modifiers static) (identifier KAI) ( ) (static_constructor_body (block { (statement_list (expression_statement (statement_expression (assignment (unary_expression (identifier field)) (assignment_operator =) (expression (literal 50)))) ;)) })))) (interface_member_declaration (operator_declaration (operator_modifier static) (operator_declarator (unary_operator_declarator (type (identifier KAI)) operator (overloadable_unary_operator ++) ( (fixed_parameter (type (identifier KAI)) (identifier arg1)) ))) (operator_body ;))) (interface_member_declaration (operator_declaration (operator_modifier public) (operator_modifier static) (operator_declarator (unary_operator_declarator (type (identifier KAI)) operator (overloadable_unary_operator --) ( (fixed_parameter (type (identifier KAI)) (identifier arg1)) ))) (operator_body (block { (statement_list (return_statement return (expression (identifier arg1)) ;)) })))) (interface_member_declaration (operator_declaration (operator_modifier public) (operator_modifier static) (operator_declarator (unary_operator_declarator (type (identifier KAI)) operator (overloadable_unary_operator --) ( (fixed_parameter (type (identifier KAI)) (identifier arg1)) ))) (operator_body => (expression (identifier arg1)) ;))) (interface_member_declaration (interface_declaration interface (identifier Nested) (interface_body { (interface_member_declaration (constant_declaration (constant_modifier public) const (type (integral_type int)) (constant_declarators (constant_declarator (identifier FortyTwo) = (constant_expression (literal 42)))) ;)) }))) })))) diff --git a/tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/Reference/sample.tree.svg b/tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/Reference/sample.tree.svg new file mode 100644 index 000000000..9e6f787db --- /dev/null +++ b/tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/Reference/sample.tree.svg @@ -0,0 +1,2005 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[ + + + +operator_declarator + + + +interface_member_declaration + + + +type + + + +type + + + +] + + + +identifier + + + +expression + + + +bool + + + +identifier + + + +type + + + +=> + + + +identifier + + + +identifier + + + +operator_declaration + + + +int + + + +} + + + +operator + + + +static_constructor_body + + + +event_declaration + + + +type + + + +literal + + + +static + + + +boolean_literal + + + +} + + + +{ + + + +; + + + +static_constructor_declaration + + + +expression_statement + + + +variable_declarators + + + +arg1 + + + +] + + + +type + + + +constant_declaration + + + +prog + + + +get_accessor_declaration + + + +) + + + +} + + + +indexer_body + + + +; + + + +ix2 + + + +method_declaration + + + +identifier + + + +get + + + +method_body + + + +M2 + + + +interface_member_declaration + + + += + + + +parameter_list + + + +operator_body + + + +{ + + + +accessor_declarations + + + +method_modifier + + + +50 + + + +member_name + + + +public + + + +constant_declarator + + + +method_body + + + +new + + + +identifier + + + +type + + + +method_modifier + + + +add_accessor_declaration + + + +identifier + + + +{ + + + +) + + + +integral_type + + + +; + + + +event_accessor_declarations + + + +property_declaration + + + +statement_expression + + + +} + + + +fixed_parameter + + + +24 + + + +integral_type + + + +protected + + + +identifier + + + +; + + + +-- + + + +KAI + + + +remove + + + +constant_declarators + + + +E1 + + + +indexer_declarator + + + +overloadable_unary_operator + + + +} + + + +member_name + + + +KAI + + + +type + + + +identifier + + + +accessor_declarations + + + +literal + + + +expression + + + +interface_member_declaration + + + +int + + + +( + + + +42 + + + +} + + + +property_modifier + + + +; + + + +compilation_unit + + + +type + + + +get + + + +assignment_operator + + + +integral_type + + + +type + + + +sealed + + + +; + + + +{ + + + +ref_method_modifier + + + +get_accessor_declaration + + + +property_declaration + + + +expression + + + +method_declaration + + + +10 + + + +operator_modifier + + + +return + + + +protected + + + +} + + + +indexer_body + + + +interface_member_declaration + + + +interface + + + +return + + + +type + + + +return_type + + + +[ + + + +ix3 + + + +literal + + + +literal + + + +interface_member_declaration + + + +{ + + + +identifier + + + +event_modifier + + + +( + + + +expression + + + +simple_type + + + +get_accessor_declaration + + + +; + + + +( + + + +operator_declarator + + + +M3 + + + +identifier + + + +indexer_modifier + + + +} + + + +[ + + + +interface + + + +integral_type + + + +method_header + + + +member_name + + + +method_declaration + + + +identifier + + + +get + + + +method_body + + + +{ + + + +] + + + +type + + + +identifier + + + +M1 + + + +KAI + + + +return_statement + + + +type + + + +private + + + +this + + + +add + + + +integral_type + + + +constant_declarator + + + +arg1 + + + +field + + + +accessor_declarations + + + +int + + + +identifier + + + +field + + + +; + + + +method_modifiers + + + +integral_type + + + +type + + + +operator_body + + + +FortyTwo + + + +operator_modifier + + + +arg1 + + + +integral_type + + + +type + + + +; + + + +expression + + + +literal + + + +this + + + +identifier + + + += + + + +; + + + +; + + + +block + + + +{ + + + +operator_declarator + + + +static + + + +static + + + +operator_modifier + + + +unary_operator_declarator + + + +static + + + +return_type + + + +( + + + +remove_accessor_declaration + + + +{ + + + +identifier + + + +( + + + +integral_type + + + +; + + + +overloadable_unary_operator + + + +fixed_parameter + + + +return + + + +indexer_modifier + + + +integral_type + + + +assignment + + + +fixed_parameter + + + +public + + + +block + + + +member_name + + + +ref_method_modifier + + + +interface_declaration + + + += + + + +static + + + +interface_member_declaration + + + +property_body + + + +EventHandler + + + +interface_member_declaration + + + +field_modifier + + + +indexer_declaration + + + +method_modifier + + + +int + + + +interface_member_declaration + + + +E2 + + + +int + + + +interface_member_declaration + + + +constant_declarators + + + +Constant + + + +type + + + +ref_method_modifier + + + +block + + + +expression + + + +arg1 + + + +) + + + +constant_expression + + + +identifier + + + +operator_modifier + + + +public + + + +event + + + +KAI + + + +; + + + +member_name + + + +int + + + +42 + + + +interface_member_declaration + + + +arg1 + + + +; + + + +accessor_body + + + +identifier + + + +property_modifier + + + +bool + + + +identifier + + + +=> + + + +} + + + +operator + + + +event + + + +method_header + + + +member_name + + + +variable_declarators + + + +{ + + + +simple_type + + + +int + + + +{ + + + +identifier + + + +block + + + +-- + + + +overloadable_unary_operator + + + +property_body + + + +indexer_declarator + + + +expression + + + +public + + + +=> + + + +block + + + +{ + + + +method_header + + + +; + + + +integral_type + + + +type + + + +100 + + + +event_declaration + + + +constant_declaration + + + +return + + + +method_modifier + + + +method_modifiers + + + +interface_body + + + +{ + + + +identifier + + + +interface_member_declaration + + + +new + + + +accessor_body + + + +operator_declaration + + + +field_declaration + + + +int + + + +) + + + +simple_type + + + +statement_list + + + +identifier + + + +} + + + +indexer_declaration + + + +int + + + +ix1 + + + +operator_modifier + + + +constant_modifier + + + +method_modifiers + + + +set + + + +return_statement + + + +constant_expression + + + +static_constructor_modifiers + + + +return_statement + + + +{ + + + +type + + + +indexer_declaration + + + +identifier + + + +interface_body + + + +identifier + + + +expression + + + +interface_declaration + + + +identifier + + + +KAI + + + +P1 + + + +} + + + +interface_member_declaration + + + +accessor_body + + + +interface_member_declaration + + + +int + + + +const + + + +) + + + +statement_list + + + +operator_declaration + + + +const + + + +true + + + +false + + + +new + + + +field_modifier + + + +type + + + +Nested + + + +accessor_declarations + + + +{ + + + +; + + + +unary_expression + + + +literal + + + +KAI + + + +++ + + + +KAI + + + +( + + + +interface_member_declaration + + + +parameter_list + + + +fixed_parameter + + + +) + + + +KAI + + + +block + + + +statement_list + + + +block + + + +EventHandler + + + +P2 + + + +statement_list + + + +boolean_literal + + + +return_statement + + + +fixed_parameter + + + +fixed_parameter + + + +type + + + +interface_member_declaration + + + +} + + + +operator_body + + + +) + + + +set_accessor_declaration + + + +} + + + +this + + + +( + + + +bool + + + +unary_operator_declarator + + + +identifier + + + +indexer_body + + + +ref_method_modifier + + + +identifier + + + +identifier + + + +return_type + + + +public + + + +parameter_list + + + +accessor_body + + + +interface_member_declaration + + + +integral_type + + + +internal + + + +internal + + + +indexer_declarator + + + +} + + + +interface_member_declaration + + + +int + + + +statement_list + + + +identifier + + + +constant_modifier + + + +interface_member_declaration + + + +unary_operator_declarator + + + +identifier + + + +operator + + \ No newline at end of file diff --git a/tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/_Sample_Options.txt b/tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/_Sample_Options.txt new file mode 100644 index 000000000..c3810f510 --- /dev/null +++ b/tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/_Sample_Options.txt @@ -0,0 +1 @@ +-ms Rules -rt \ No newline at end of file diff --git a/tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/sample.cs b/tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/sample.cs new file mode 100644 index 000000000..b16d045ec --- /dev/null +++ b/tools/GrammarTesting/Tests/Parsing/Samples/v8/Expanded Interfaces/sample.cs @@ -0,0 +1,41 @@ +interface KAI +{ + // constant + public const int Constant = 100; + + // field + private static int field; + + // methods + int M1(); + protected new int M2() { return 42; } + protected new int M3() => 24; + + // properties + int P1 { get; } + public new int P2 { get { return 10; } } + + // event + event EventHandler E1; + sealed event EventHandler E2 { add { } remove { } } + + // indexer + bool this[int ix1] { set; } + internal bool this[int ix2] { get { return true; } } + internal bool this[int ix3] => false; + + // static constructor + static KAI() { field = 50; } + + // operator + static KAI operator++(KAI arg1); + public static KAI operator--(KAI arg1) { return arg1; } + public static KAI operator--(KAI arg1) => arg1; + + // type + interface Nested + { + // constant + public const int FortyTwo = 42; + } +} \ No newline at end of file From 8f8d0126dee05459b03a4ec75208e9a7174610bd Mon Sep 17 00:00:00 2001 From: Nigel-Ecma Date: Thu, 20 Nov 2025 17:02:22 +1300 Subject: [PATCH 2/2] Updates in response to review. --- standard/basic-concepts.md | 2 +- standard/interfaces.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/standard/basic-concepts.md b/standard/basic-concepts.md index c7ef84d25..7781e771e 100644 --- a/standard/basic-concepts.md +++ b/standard/basic-concepts.md @@ -402,7 +402,7 @@ As described in [§7.4](basic-concepts.md#74-members), all members of a base cla ### 7.5.4 Protected access -When a `protected` or `private protected` instance member is accessed outside the program text of the class in which it is declared, and when a `protected internal` instance member is accessed outside the program text of the program in which it is declared, the access shall take place within a class declaration that derives from the class in which it is declared. Furthermore, the access is required to take place *through* an instance of that derived class type or a class type constructed from it. This restriction prevents one derived class from accessing protected members of other derived classes, even when the members are inherited from the same base class. Instance interface members defined with `protected` or `private protected` access cannot be accessed from a `class` or `struct` that implements that interface; these can be accessed only from derived interfaces. However, `class` and `struct` types can override `protected` instance members declared in an interface they implement. +When a `protected` or `private protected` instance member is accessed outside the program text of the class in which it is declared, and when a `protected internal` instance member is accessed outside the program text of the program in which it is declared, the access shall take place within a class declaration that derives from the class in which it is declared. Furthermore, the access is required to take place *through* an instance of that derived class type or a class type constructed from it. This restriction prevents one derived class from accessing protected members of other derived classes, even when the members are inherited from the same base class. Instance interface members defined with `protected` or `private protected` access cannot be accessed from a `class` or `struct` that implements that interface; these can be accessed only from derived interfaces. However, `class` and `struct` types can implement `protected` instance members declared in an interface they implement. Let `B` be a base class that declares a protected instance member `M`, and let `D` be a class that derives from `B`. Within the *class_body* of `D`, access to `M` can take one of the following forms: diff --git a/standard/interfaces.md b/standard/interfaces.md index 7e4bc18de..88cbcfd86 100644 --- a/standard/interfaces.md +++ b/standard/interfaces.md @@ -476,7 +476,7 @@ Interface indexers are declared using *indexer_declaration*s ([§15.9](classes.m This clause augments the description of *operator_declaration* members in classes [§15.10](classes.md#1510-operators) for operators declared in interfaces. -For an *operator_declaration* in an interface the *operator_body* may only be a block body ([§15.6.1](classes.md#1561-general)) or an expression body ([§15.6.1](classes.md#1561-general)). +For an *operator_declaration* in an interface the *operator_body* shall only be a block body ([§15.6.1](classes.md#1561-general)) or an expression body ([§15.6.1](classes.md#1561-general)). It is a compile-time error for an interface to declare a conversion, equality, or inequality operator. @@ -1066,7 +1066,7 @@ When a generic method implicitly implements an interface method, the constraints ### 19.6.5 Interface mapping -A class or struct shall provide implementations for all abstract members of the interfaces that are listed in the base class list of the class or struct which are not implemented in any of those listed interfaces. The process of locating implementations of interface members in an implementing class or struct is known as ***interface mapping***. +A class or struct shall provide implementations for all abstract members of the interfaces that are listed in the base class list of the class or struct which do not have a reachable implementation; where an implementation can become unreachable due to reabstraction [§19.4.3](interfaces.md#1943-interface-methods). The process of locating implementations of interface members in an implementing class or struct is known as ***interface mapping***. Interface mapping for a class or struct `C` locates an implementation for each member of each interface specified in the base class list of `C`. The implementation of a particular interface member `I.M`, where `I` is the interface in which the member `M` is declared, is determined by examining each class, interface, or struct `S`, starting with `C` and repeating for each successive base class and implemented interface of `C`, until a match is located: @@ -1463,7 +1463,7 @@ When a class implements an interface, it implicitly also implements all that int ### 19.6.8 Abstract classes and interfaces -Like a non-abstract class, an abstract class shall provide implementations of all abstract members of the interfaces that are listed in the base class list of the class which are not implemented in any of those listed interfaces. However, an abstract class is permitted to map interface methods onto abstract methods. +Like a non-abstract class, an abstract class shall provide implementations for all abstract members of the interfaces that are listed in the base class list of the class or struct which do not have a reachable implementation; where an implementation can become unreachable due to reabstraction [§19.4.3](interfaces.md#1943-interface-methods). However, an abstract class is permitted to map interface methods onto abstract methods. > *Example*: >