@@ -276,13 +276,22 @@ literal_expr[expr_ty]:
276
276
| 'False' { _PyAST_Constant(Py_False, NULL, EXTRA) }
277
277
278
278
complex_number[expr_ty]:
279
- | real=signed_number '+' imag=imaginary_number { _PyAST_BinOp(real, Add, imag, EXTRA) }
280
- | real=signed_number '-' imag=imaginary_number { _PyAST_BinOp(real, Sub, imag, EXTRA) }
279
+ | real=signed_real_number '+' imag=imaginary_number {
280
+ _PyAST_BinOp(real, Add, imag, EXTRA) }
281
+ | real=signed_real_number '-' imag=imaginary_number {
282
+ _PyAST_BinOp(real, Sub, imag, EXTRA) }
281
283
282
284
signed_number[expr_ty]:
283
285
| NUMBER
284
286
| '-' number=NUMBER { _PyAST_UnaryOp(USub, number, EXTRA) }
285
287
288
+ signed_real_number[expr_ty]:
289
+ | real_number
290
+ | '-' real=real_number { _PyAST_UnaryOp(USub, real, EXTRA) }
291
+
292
+ real_number[expr_ty]:
293
+ | real=NUMBER { _PyPegen_ensure_real(p, real) }
294
+
286
295
imaginary_number[expr_ty]:
287
296
| imag=NUMBER { _PyPegen_ensure_imaginary(p, imag) }
288
297
@@ -343,7 +352,7 @@ mapping_pattern[pattern_ty]:
343
352
NULL,
344
353
EXTRA) }
345
354
items_pattern[asdl_seq*]:
346
- | items= ','.key_value_pattern+ { items }
355
+ | ','.key_value_pattern+
347
356
key_value_pattern[KeyPatternPair*]:
348
357
| key=(literal_expr | attr) ':' pattern=pattern {
349
358
_PyPegen_key_pattern_pair(p, key, pattern) }
@@ -373,7 +382,7 @@ class_pattern[pattern_ty]:
373
382
positional_patterns[asdl_pattern_seq*]:
374
383
| args[asdl_pattern_seq*]=','.pattern+ { args }
375
384
keyword_patterns[asdl_seq*]:
376
- | keywords[asdl_seq*]= ','.keyword_pattern+ { keywords }
385
+ | ','.keyword_pattern+
377
386
keyword_pattern[KeyPatternPair*]:
378
387
| arg=NAME '=' value=pattern { _PyPegen_key_pattern_pair(p, arg, value) }
379
388
@@ -954,12 +963,12 @@ invalid_finally_stmt:
954
963
| a='finally' ':' NEWLINE !INDENT {
955
964
RAISE_INDENTATION_ERROR("expected an indented block after 'finally' statement on line %d", a->lineno) }
956
965
invalid_except_stmt_indent:
957
- | a='except' expression ['as' NAME ] ':' NEWLINE !INDENT {
966
+ | a='except' expression ['as' NAME ] ':' NEWLINE !INDENT {
958
967
RAISE_INDENTATION_ERROR("expected an indented block after 'except' statement on line %d", a->lineno) }
959
968
| a='except' ':' NEWLINE !INDENT { RAISE_SYNTAX_ERROR("expected an indented block after except statement on line %d", a->lineno) }
960
969
invalid_match_stmt:
961
970
| "match" subject_expr !':' { CHECK_VERSION(void*, 10, "Pattern matching is", RAISE_SYNTAX_ERROR("expected ':'") ) }
962
- | a="match" subject=subject_expr ':' NEWLINE !INDENT {
971
+ | a="match" subject=subject_expr ':' NEWLINE !INDENT {
963
972
RAISE_INDENTATION_ERROR("expected an indented block after 'match' statement on line %d", a->lineno) }
964
973
invalid_case_block:
965
974
| "case" patterns guard? !':' { RAISE_SYNTAX_ERROR("expected ':'") }
0 commit comments