5
Goal ::= hierarchical_identifier [ { '[' expression ']' } '[' range_expression ']' ]
9
Goal ::= [ class_qualifier | package_scope ] hierarchical_identifier select
11
class_qualifier ::= ['local' '::'] [ implicit_class_handle '.' | class_scope ]
13
implicit_class_handle ::= 'this' | 'super' | 'this' '.' 'super'
15
class_scope ::= class_type '::'
17
class_type ::= ps_class_identifier [pva] { '::' identifier [pva] }
19
ps_class_identifier ::= [package_scope] identifier
21
package_scope ::= identifier '::'
25
Simplification. Let's not support 'local' yet. This reduces class_qualifier to:
27
class_qualifier ::= [ implicit_class_handle '.' | class_scope ]
29
Simplification. Let's not support 'this' or 'super' yet. This eliminates the
30
implicit_class_handle case and just leaves us with:
32
class_qualifier ::= [class_scope]
36
Goal ::= [ class_scope | package_scope ] hierarchical_identifier select
38
A package_scope is almost a class_scope.
45
Reduction 1. package_scope is a subset of class_qualifier, so we can just
48
Goal ::= [class_qualifier] hierarchical_identifier select
50
Explanation: package_scope can be one of two things:
58
Note that package_scope and class_scope are redundant.
60
In particular, everything in "class_type" is optional except for ps_class_identifier
63
foo::bar ps-class-identifier
71
So, inlining package_scope:
73
ps_class_identifier ::= identifier
74
| identifier '::' identifier
75
| '$unit' '::' identifier
79
class_type ::= identifier [pva] { '::' identifier [pva] }
80
| identifier '::' identifier [pva] { '::' identifier [pva] }
81
| '$unit' '::' identifier [pva] { '::' identifier [pva] }
85
class_scope ::= identifier [pva] { '::' identifier [pva] } '::'
86
| identifier '::' identifier [pva] { '::' identifier [pva] } '::'
87
| '$unit' '::' identifier [pva] { '::' identifier [pva] } '::'
89
---------------------------------------------------------------
93
Goal ::= hierarchical_identifier select
94
| class_qualifier hierarchical_identifier select
95
| identifier '::' hierarchical_identifier select
96
| '$unit' '::' hierarchical_identifier select
98
class_qualifier ::= ['local' '::'] [ implicit_class_handle '.' | class_scope ]
100
implicit_class_handle ::= 'this' | 'super' | 'this' '.' 'super'
102
class_scope ::= identifier [pva] { '::' identifier [pva] } '::'
103
| identifier '::' identifier [pva] { '::' identifier [pva] } '::'
104
| '$unit' '::' identifier [pva] { '::' identifier [pva] } '::'
106
---------------------------------------------------------------
110
So, if this starts with an identifier,