@@ -96,18 +96,84 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
96
96
%token <ast> T_STRING_VARNAME " variable name (T_STRING_VARNAME)"
97
97
%token <ast> T_NUM_STRING " number (T_NUM_STRING)"
98
98
99
+ %token <ident> T_INCLUDE " include (T_INCLUDE)"
100
+ %token <ident> T_INCLUDE_ONCE " include_once (T_INCLUDE_ONCE)"
101
+ %token <ident> T_EVAL " eval (T_EVAL)"
102
+ %token <ident> T_REQUIRE " require (T_REQUIRE)"
103
+ %token <ident> T_REQUIRE_ONCE " require_once (T_REQUIRE_ONCE)"
104
+ %token <ident> T_LOGICAL_OR " or (T_LOGICAL_OR)"
105
+ %token <ident> T_LOGICAL_XOR " xor (T_LOGICAL_XOR)"
106
+ %token <ident> T_LOGICAL_AND " and (T_LOGICAL_AND)"
107
+ %token <ident> T_PRINT " print (T_PRINT)"
108
+ %token <ident> T_YIELD " yield (T_YIELD)"
109
+ %token <ident> T_YIELD_FROM " yield from (T_YIELD_FROM)"
110
+ %token <ident> T_INSTANCEOF " instanceof (T_INSTANCEOF)"
111
+ %token <ident> T_NEW " new (T_NEW)"
112
+ %token <ident> T_CLONE " clone (T_CLONE)"
113
+ %token <ident> T_EXIT " exit (T_EXIT)"
114
+ %token <ident> T_IF " if (T_IF)"
115
+ %token <ident> T_ELSEIF " elseif (T_ELSEIF)"
116
+ %token <ident> T_ELSE " else (T_ELSE)"
117
+ %token <ident> T_ENDIF " endif (T_ENDIF)"
118
+ %token <ident> T_ECHO " echo (T_ECHO)"
119
+ %token <ident> T_DO " do (T_DO)"
120
+ %token <ident> T_WHILE " while (T_WHILE)"
121
+ %token <ident> T_ENDWHILE " endwhile (T_ENDWHILE)"
122
+ %token <ident> T_FOR " for (T_FOR)"
123
+ %token <ident> T_ENDFOR " endfor (T_ENDFOR)"
124
+ %token <ident> T_FOREACH " foreach (T_FOREACH)"
125
+ %token <ident> T_ENDFOREACH " endforeach (T_ENDFOREACH)"
126
+ %token <ident> T_DECLARE " declare (T_DECLARE)"
127
+ %token <ident> T_ENDDECLARE " enddeclare (T_ENDDECLARE)"
128
+ %token <ident> T_AS " as (T_AS)"
129
+ %token <ident> T_SWITCH " switch (T_SWITCH)"
130
+ %token <ident> T_ENDSWITCH " endswitch (T_ENDSWITCH)"
131
+ %token <ident> T_CASE " case (T_CASE)"
132
+ %token <ident> T_DEFAULT " default (T_DEFAULT)"
133
+ %token <ident> T_BREAK " break (T_BREAK)"
134
+ %token <ident> T_CONTINUE " continue (T_CONTINUE)"
135
+ %token <ident> T_GOTO " goto (T_GOTO)"
136
+ %token <ident> T_FUNCTION " function (T_FUNCTION)"
137
+ %token <ident> T_FN " fn (T_FN)"
138
+ %token <ident> T_CONST " const (T_CONST)"
139
+ %token <ident> T_RETURN " return (T_RETURN)"
140
+ %token <ident> T_TRY " try (T_TRY)"
141
+ %token <ident> T_CATCH " catch (T_CATCH)"
142
+ %token <ident> T_FINALLY " finally (T_FINALLY)"
143
+ %token <ident> T_THROW " throw (T_THROW)"
144
+ %token <ident> T_USE " use (T_USE)"
145
+ %token <ident> T_INSTEADOF " insteadof (T_INSTEADOF)"
146
+ %token <ident> T_GLOBAL " global (T_GLOBAL)"
147
+ %token <ident> T_STATIC " static (T_STATIC)"
148
+ %token <ident> T_ABSTRACT " abstract (T_ABSTRACT)"
149
+ %token <ident> T_FINAL " final (T_FINAL)"
150
+ %token <ident> T_PRIVATE " private (T_PRIVATE)"
151
+ %token <ident> T_PROTECTED " protected (T_PROTECTED)"
152
+ %token <ident> T_PUBLIC " public (T_PUBLIC)"
153
+ %token <ident> T_VAR " var (T_VAR)"
154
+ %token <ident> T_UNSET " unset (T_UNSET)"
155
+ %token <ident> T_ISSET " isset (T_ISSET)"
156
+ %token <ident> T_EMPTY " empty (T_EMPTY)"
157
+ %token <ident> T_HALT_COMPILER " __halt_compiler (T_HALT_COMPILER)"
158
+ %token <ident> T_CLASS " class (T_CLASS)"
159
+ %token <ident> T_TRAIT " trait (T_TRAIT)"
160
+ %token <ident> T_INTERFACE " interface (T_INTERFACE)"
161
+ %token <ident> T_EXTENDS " extends (T_EXTENDS)"
162
+ %token <ident> T_IMPLEMENTS " implements (T_IMPLEMENTS)"
163
+ %token <ident> T_NAMESPACE " namespace (T_NAMESPACE)"
164
+ %token <ident> T_LIST " list (T_LIST)"
165
+ %token <ident> T_ARRAY " array (T_ARRAY)"
166
+ %token <ident> T_CALLABLE " callable (T_CALLABLE)"
167
+ %token <ident> T_LINE " __LINE__ (T_LINE)"
168
+ %token <ident> T_FILE " __FILE__ (T_FILE)"
169
+ %token <ident> T_DIR " __DIR__ (T_DIR)"
170
+ %token <ident> T_CLASS_C " __CLASS__ (T_CLASS_C)"
171
+ %token <ident> T_TRAIT_C " __TRAIT__ (T_TRAIT_C)"
172
+ %token <ident> T_METHOD_C " __METHOD__ (T_METHOD_C)"
173
+ %token <ident> T_FUNC_C " __FUNCTION__ (T_FUNC_C)"
174
+ %token <ident> T_NS_C " __NAMESPACE__ (T_NS_C)"
175
+
99
176
%token END 0 " end of file"
100
- %token T_INCLUDE " include (T_INCLUDE)"
101
- %token T_INCLUDE_ONCE " include_once (T_INCLUDE_ONCE)"
102
- %token T_EVAL " eval (T_EVAL)"
103
- %token T_REQUIRE " require (T_REQUIRE)"
104
- %token T_REQUIRE_ONCE " require_once (T_REQUIRE_ONCE)"
105
- %token T_LOGICAL_OR " or (T_LOGICAL_OR)"
106
- %token T_LOGICAL_XOR " xor (T_LOGICAL_XOR)"
107
- %token T_LOGICAL_AND " and (T_LOGICAL_AND)"
108
- %token T_PRINT " print (T_PRINT)"
109
- %token T_YIELD " yield (T_YIELD)"
110
- %token T_YIELD_FROM " yield from (T_YIELD_FROM)"
111
177
%token T_PLUS_EQUAL " += (T_PLUS_EQUAL)"
112
178
%token T_MINUS_EQUAL " -= (T_MINUS_EQUAL)"
113
179
%token T_MUL_EQUAL " *= (T_MUL_EQUAL)"
@@ -131,7 +197,6 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
131
197
%token T_SPACESHIP " <=> (T_SPACESHIP)"
132
198
%token T_SL " << (T_SL)"
133
199
%token T_SR " >> (T_SR)"
134
- %token T_INSTANCEOF " instanceof (T_INSTANCEOF)"
135
200
%token T_INC " ++ (T_INC)"
136
201
%token T_DEC " -- (T_DEC)"
137
202
%token T_INT_CAST " (int) (T_INT_CAST)"
@@ -141,70 +206,8 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
141
206
%token T_OBJECT_CAST " (object) (T_OBJECT_CAST)"
142
207
%token T_BOOL_CAST " (bool) (T_BOOL_CAST)"
143
208
%token T_UNSET_CAST " (unset) (T_UNSET_CAST)"
144
- %token T_NEW " new (T_NEW)"
145
- %token T_CLONE " clone (T_CLONE)"
146
- %token T_EXIT " exit (T_EXIT)"
147
- %token T_IF " if (T_IF)"
148
- %token T_ELSEIF " elseif (T_ELSEIF)"
149
- %token T_ELSE " else (T_ELSE)"
150
- %token T_ENDIF " endif (T_ENDIF)"
151
- %token T_ECHO " echo (T_ECHO)"
152
- %token T_DO " do (T_DO)"
153
- %token T_WHILE " while (T_WHILE)"
154
- %token T_ENDWHILE " endwhile (T_ENDWHILE)"
155
- %token T_FOR " for (T_FOR)"
156
- %token T_ENDFOR " endfor (T_ENDFOR)"
157
- %token T_FOREACH " foreach (T_FOREACH)"
158
- %token T_ENDFOREACH " endforeach (T_ENDFOREACH)"
159
- %token T_DECLARE " declare (T_DECLARE)"
160
- %token T_ENDDECLARE " enddeclare (T_ENDDECLARE)"
161
- %token T_AS " as (T_AS)"
162
- %token T_SWITCH " switch (T_SWITCH)"
163
- %token T_ENDSWITCH " endswitch (T_ENDSWITCH)"
164
- %token T_CASE " case (T_CASE)"
165
- %token T_DEFAULT " default (T_DEFAULT)"
166
- %token T_BREAK " break (T_BREAK)"
167
- %token T_CONTINUE " continue (T_CONTINUE)"
168
- %token T_GOTO " goto (T_GOTO)"
169
- %token T_FUNCTION " function (T_FUNCTION)"
170
- %token T_FN " fn (T_FN)"
171
- %token T_CONST " const (T_CONST)"
172
- %token T_RETURN " return (T_RETURN)"
173
- %token T_TRY " try (T_TRY)"
174
- %token T_CATCH " catch (T_CATCH)"
175
- %token T_FINALLY " finally (T_FINALLY)"
176
- %token T_THROW " throw (T_THROW)"
177
- %token T_USE " use (T_USE)"
178
- %token T_INSTEADOF " insteadof (T_INSTEADOF)"
179
- %token T_GLOBAL " global (T_GLOBAL)"
180
- %token T_STATIC " static (T_STATIC)"
181
- %token T_ABSTRACT " abstract (T_ABSTRACT)"
182
- %token T_FINAL " final (T_FINAL)"
183
- %token T_PRIVATE " private (T_PRIVATE)"
184
- %token T_PROTECTED " protected (T_PROTECTED)"
185
- %token T_PUBLIC " public (T_PUBLIC)"
186
- %token T_VAR " var (T_VAR)"
187
- %token T_UNSET " unset (T_UNSET)"
188
- %token T_ISSET " isset (T_ISSET)"
189
- %token T_EMPTY " empty (T_EMPTY)"
190
- %token T_HALT_COMPILER " __halt_compiler (T_HALT_COMPILER)"
191
- %token T_CLASS " class (T_CLASS)"
192
- %token T_TRAIT " trait (T_TRAIT)"
193
- %token T_INTERFACE " interface (T_INTERFACE)"
194
- %token T_EXTENDS " extends (T_EXTENDS)"
195
- %token T_IMPLEMENTS " implements (T_IMPLEMENTS)"
196
209
%token T_OBJECT_OPERATOR " -> (T_OBJECT_OPERATOR)"
197
210
%token T_DOUBLE_ARROW " => (T_DOUBLE_ARROW)"
198
- %token T_LIST " list (T_LIST)"
199
- %token T_ARRAY " array (T_ARRAY)"
200
- %token T_CALLABLE " callable (T_CALLABLE)"
201
- %token T_LINE " __LINE__ (T_LINE)"
202
- %token T_FILE " __FILE__ (T_FILE)"
203
- %token T_DIR " __DIR__ (T_DIR)"
204
- %token T_CLASS_C " __CLASS__ (T_CLASS_C)"
205
- %token T_TRAIT_C " __TRAIT__ (T_TRAIT_C)"
206
- %token T_METHOD_C " __METHOD__ (T_METHOD_C)"
207
- %token T_FUNC_C " __FUNCTION__ (T_FUNC_C)"
208
211
%token T_COMMENT " comment (T_COMMENT)"
209
212
%token T_DOC_COMMENT " doc comment (T_DOC_COMMENT)"
210
213
%token T_OPEN_TAG " open tag (T_OPEN_TAG)"
@@ -216,8 +219,6 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
216
219
%token T_DOLLAR_OPEN_CURLY_BRACES " ${ (T_DOLLAR_OPEN_CURLY_BRACES)"
217
220
%token T_CURLY_OPEN " {$ (T_CURLY_OPEN)"
218
221
%token T_PAAMAYIM_NEKUDOTAYIM " :: (T_PAAMAYIM_NEKUDOTAYIM)"
219
- %token T_NAMESPACE " namespace (T_NAMESPACE)"
220
- %token T_NS_C " __NAMESPACE__ (T_NS_C)"
221
222
%token T_NS_SEPARATOR " \\ (T_NS_SEPARATOR)"
222
223
%token T_ELLIPSIS " ... (T_ELLIPSIS)"
223
224
%token T_COALESCE " ?? (T_COALESCE)"
@@ -268,6 +269,8 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
268
269
%type <ptr> backup_lex_pos
269
270
%type <str> backup_doc_comment
270
271
272
+ %type <ident> reserved_non_modifiers semi_reserved
273
+
271
274
%% /* Rules */
272
275
273
276
start :
@@ -293,7 +296,7 @@ identifier:
293
296
T_STRING { $$ = $1 ; }
294
297
| semi_reserved {
295
298
zval zv;
296
- zend_lex_tstring (&zv);
299
+ zend_lex_tstring (&zv, $ 1 );
297
300
$$ = zend_ast_create_zval(&zv);
298
301
}
299
302
;
@@ -847,7 +850,8 @@ trait_alias:
847
850
trait_method_reference T_AS T_STRING
848
851
{ $$ = zend_ast_create(ZEND_AST_TRAIT_ALIAS, $1 , $3 ); }
849
852
| trait_method_reference T_AS reserved_non_modifiers
850
- { zval zv; zend_lex_tstring(&zv); $$ = zend_ast_create(ZEND_AST_TRAIT_ALIAS, $1 , zend_ast_create_zval(&zv)); }
853
+ { zval zv; zend_lex_tstring(&zv, $3 );
854
+ $$ = zend_ast_create(ZEND_AST_TRAIT_ALIAS, $1 , zend_ast_create_zval(&zv)); }
851
855
| trait_method_reference T_AS member_modifier identifier
852
856
{ $$ = zend_ast_create_ex(ZEND_AST_TRAIT_ALIAS, $3 , $1 , $4 ); }
853
857
| trait_method_reference T_AS member_modifier
0 commit comments