@@ -231,6 +231,7 @@ void yyerror(YYLTYPE *yyloc, LFortran::Parser &p, const std::string &msg)
231
231
%type <key_val> dict
232
232
%type <vec_key_val> dict_list
233
233
%type <ast> slice_item
234
+ %type <ast> slice_items
234
235
%type <vec_ast> slice_item_list
235
236
%type <ast> with_statement
236
237
%type <vec_withitem> with_as_items
@@ -281,8 +282,6 @@ void yyerror(YYLTYPE *yyloc, LFortran::Parser &p, const std::string &msg)
281
282
%left " %" " //" " /" " @" " *"
282
283
%precedence UNARY
283
284
%right " **"
284
- %precedence AWAIT
285
- %precedence YIELD
286
285
%precedence " ."
287
286
288
287
%start units
@@ -382,7 +381,11 @@ multi_line_statement
382
381
;
383
382
384
383
expression_statment
385
- : expr { $$ = EXPR_01($1, @$); }
384
+ : tuple_list { $$ = EXPR_01($1, @$); }
385
+ | KW_AWAIT tuple_list { $$ = EXPR_01(AWAIT($2, @$), @$); }
386
+ | KW_YIELD { $$ = EXPR_01(YIELD_01(@$), @$); }
387
+ | KW_YIELD tuple_list { $$ = EXPR_01(YIELD_02($2, @$), @$); }
388
+ | KW_YIELD_FROM tuple_list { $$ = EXPR_01(YIELD_03($2, @$), @$); }
386
389
;
387
390
388
391
pass_statement
@@ -409,20 +412,12 @@ assert_statement
409
412
;
410
413
411
414
target_list
412
- : target_list expr "=" { $$ = $1; LIST_ADD($$, $2); }
413
- | expr "=" { LIST_NEW($$); LIST_ADD($$, $1); }
414
- | target_list expr_list "," expr "=" {
415
- $$ = $1; LIST_ADD($$, TUPLE_01(TUPLE_($2, $4), @$)); }
416
- | expr_list "," expr "=" {
417
- LIST_NEW($$); LIST_ADD($$, TUPLE_01(TUPLE_($1, $3), @$)); }
418
- | target_list expr_list "," "=" { $$ = $1; LIST_ADD($$, TUPLE_03($2, @$)); }
419
- | expr_list "," "=" { LIST_NEW($$); LIST_ADD($$, TUPLE_03($1, @$)); }
415
+ : target_list tuple_list "=" { $$ = $1; LIST_ADD($$, $2); }
416
+ | tuple_list "=" { LIST_NEW($$); LIST_ADD($$, $1); }
420
417
;
421
418
422
419
assignment_statement
423
- : target_list expr { $$ = ASSIGNMENT($1, $2, @$); }
424
- | target_list expr_list "," expr {
425
- $$ = ASSIGNMENT($1, TUPLE_01(TUPLE_($2, $4), @$), @$); }
420
+ : target_list tuple_list { $$ = ASSIGNMENT($1, $2, @$); }
426
421
| target_list expr type_comment { $$ = ASSIGNMENT2($1, $2, $3, @$); }
427
422
;
428
423
@@ -457,10 +452,7 @@ delete_statement
457
452
458
453
return_statement
459
454
: KW_RETURN { $$ = RETURN_01(@$); }
460
- | KW_RETURN expr { $$ = RETURN_02($2, @$); }
461
- | KW_RETURN expr_list "," expr {
462
- $$ = RETURN_02(TUPLE_01(TUPLE_($2, $4), @$), @$); }
463
- | KW_RETURN expr_list "," { $$ = RETURN_02(TUPLE_03($2, @$), @$); }
455
+ | KW_RETURN tuple_list { $$ = RETURN_02($2, @$); }
464
456
;
465
457
466
458
module
@@ -535,18 +527,23 @@ if_statement
535
527
for_target_list
536
528
: expr %prec FOR { $$ = $1; }
537
529
| expr_list "," expr %prec FOR { $$ = TUPLE_01(TUPLE_($1, $3), @$); }
530
+ | expr_list "," %prec FOR { $$ = TUPLE_03($1, @$); }
531
+ ;
532
+
533
+ tuple_list
534
+ : expr { $$ = $1; }
535
+ | expr_list "," expr { $$ = TUPLE_01(TUPLE_($1, $3), @$); }
536
+ | expr_list "," { $$ = TUPLE_03($1, @$); }
538
537
;
539
538
540
539
for_statement
541
- : KW_FOR for_target_list KW_IN expr ":" body_stmts {
540
+ : KW_FOR for_target_list KW_IN tuple_list ":" body_stmts {
542
541
$$ = FOR_01($2, $4, $6, @$); }
543
- | KW_FOR for_target_list KW_IN expr "," ":" body_stmts {
544
- $$ = FOR_01($2, TUPLE_03(A2LIST(p.m_a, $4), @$), $7, @$); }
545
- | KW_FOR for_target_list KW_IN expr ":" body_stmts KW_ELSE ":"
542
+ | KW_FOR for_target_list KW_IN tuple_list ":" body_stmts KW_ELSE ":"
546
543
body_stmts { $$ = FOR_02($2, $4, $6, $9, @$); }
547
- | KW_FOR for_target_list KW_IN expr ":" type_comment TK_NEWLINE
544
+ | KW_FOR for_target_list KW_IN tuple_list ":" type_comment TK_NEWLINE
548
545
statements { $$ = FOR_03($2, $4, $6, $8, @$); }
549
- | KW_FOR for_target_list KW_IN expr ":" type_comment TK_NEWLINE
546
+ | KW_FOR for_target_list KW_IN tuple_list ":" type_comment TK_NEWLINE
550
547
statements KW_ELSE ":" body_stmts {
551
548
$$ = FOR_04($2, $4, $8, $11, $6, @$); }
552
549
;
@@ -766,26 +763,6 @@ while_statement
766
763
$$ = WHILE_02($2, $4, $7, @$); }
767
764
;
768
765
769
- slice_item_list
770
- : slice_item_list "," slice_item { $$ = $1; LIST_ADD($$, $3); }
771
- | slice_item { LIST_NEW($$); LIST_ADD($$, $1); }
772
-
773
- slice_item
774
- : ":" { $$ = SLICE_01(nullptr, nullptr, nullptr, @$); }
775
- | expr ":" { $$ = SLICE_01( $1, nullptr, nullptr, @$); }
776
- | ":" expr { $$ = SLICE_01(nullptr, $2, nullptr, @$); }
777
- | expr ":" expr { $$ = SLICE_01( $1, $3, nullptr, @$); }
778
- | ":" ":" { $$ = SLICE_01(nullptr, nullptr, nullptr, @$); }
779
- | ":" ":" expr { $$ = SLICE_01(nullptr, nullptr, $3, @$); }
780
- | expr ":" ":" { $$ = SLICE_01( $1, nullptr, nullptr, @$); }
781
- | ":" expr ":" { $$ = SLICE_01(nullptr, $2, nullptr, @$); }
782
- | expr ":" ":" expr { $$ = SLICE_01( $1, nullptr, $4, @$); }
783
- | ":" expr ":" expr { $$ = SLICE_01(nullptr, $2, $4, @$); }
784
- | expr ":" expr ":" { $$ = SLICE_01( $1, $3, nullptr, @$); }
785
- | expr ":" expr ":" expr { $$ = SLICE_01( $1, $3, $5, @$); }
786
- | expr { $$ = $1; }
787
- ;
788
-
789
766
expr_list_opt
790
767
: expr_list { $$ = $1; }
791
768
| %empty { LIST_NEW($$); }
@@ -806,21 +783,16 @@ dict_list
806
783
| dict { LIST_NEW($$); LIST_ADD($$, $1); }
807
784
;
808
785
809
- tuple_list
810
- : slice_item_list comma_opt { $$ = TUPLE($1, @$); }
811
- ;
812
-
813
786
id_list
814
- : id_list "," id { $$ = $1; LIST_ADD($$, $3); }
815
- | id { LIST_NEW($$); LIST_ADD($$, $1); }
787
+ : id_list "," id_item { $$ = $1; LIST_ADD($$, $3); }
788
+ | id_item { LIST_NEW($$); LIST_ADD($$, $1); }
816
789
;
817
790
818
791
id_item
819
- : id_list { $$ = ID_TUPLE_01($1, @$); }
820
- | id_list "," { $$ = ID_TUPLE_03($1, @$); }
792
+ : id { $$ = $1; }
821
793
| "(" id ")" { $$ = $2; }
822
794
| "(" id_list "," ")" { $$ = ID_TUPLE_03($2, @$); }
823
- | "(" id_list "," id ")" { $$ = ID_TUPLE_01(TUPLE_($2, $4), @$); }
795
+ | "(" id_list "," id_item ")" { $$ = ID_TUPLE_01(TUPLE_($2, $4), @$); }
824
796
;
825
797
826
798
keyword_item
@@ -840,9 +812,14 @@ primary
840
812
;
841
813
842
814
comp_for
843
- : KW_FOR id_item KW_IN expr { $$ = COMP_FOR_01($2, $4, @$); }
844
- | KW_FOR id_item KW_IN expr KW_IF expr {
845
- $$ = COMP_FOR_02($2, $4, $6, @$); }
815
+ : KW_FOR id_list KW_IN expr {
816
+ $$ = COMP_FOR_01(ID_TUPLE_01($2, @$), $4, @$); }
817
+ | KW_FOR id_list "," KW_IN expr {
818
+ $$ = COMP_FOR_01(ID_TUPLE_03($2, @$), $5, @$); }
819
+ | KW_FOR id_list KW_IN expr KW_IF expr {
820
+ $$ = COMP_FOR_02(ID_TUPLE_01($2, @$), $4, $6, @$); }
821
+ | KW_FOR id_list "," KW_IN expr KW_IF expr {
822
+ $$ = COMP_FOR_02(ID_TUPLE_03($2, @$), $5, $7, @$); }
846
823
;
847
824
848
825
comp_for_items
@@ -878,17 +855,42 @@ function_call
878
855
| "(" expr ")" "(" call_arguement_list ")" { $$ = CALL_01($2, $5, @$); }
879
856
;
880
857
858
+ slice_item_list
859
+ : slice_item_list "," slice_items { $$ = $1; LIST_ADD($$, $3); }
860
+ | slice_items { LIST_NEW($$); LIST_ADD($$, $1); }
861
+ ;
862
+
863
+ slice_items
864
+ : ":" { $$ = SLICE_01(nullptr, nullptr, nullptr, @$); }
865
+ | expr ":" { $$ = SLICE_01( $1, nullptr, nullptr, @$); }
866
+ | ":" expr { $$ = SLICE_01(nullptr, $2, nullptr, @$); }
867
+ | expr ":" expr { $$ = SLICE_01( $1, $3, nullptr, @$); }
868
+ | ":" ":" { $$ = SLICE_01(nullptr, nullptr, nullptr, @$); }
869
+ | ":" ":" expr { $$ = SLICE_01(nullptr, nullptr, $3, @$); }
870
+ | expr ":" ":" { $$ = SLICE_01( $1, nullptr, nullptr, @$); }
871
+ | ":" expr ":" { $$ = SLICE_01(nullptr, $2, nullptr, @$); }
872
+ | expr ":" ":" expr { $$ = SLICE_01( $1, nullptr, $4, @$); }
873
+ | ":" expr ":" expr { $$ = SLICE_01(nullptr, $2, $4, @$); }
874
+ | expr ":" expr ":" { $$ = SLICE_01( $1, $3, nullptr, @$); }
875
+ | expr ":" expr ":" expr { $$ = SLICE_01( $1, $3, $5, @$); }
876
+ | expr { $$ = $1; }
877
+ ;
878
+
879
+ slice_item
880
+ : slice_item_list comma_opt { $$ = TUPLE($1, @$); }
881
+ ;
882
+
881
883
subscript
882
- : primary "[" tuple_list "]" { $$ = SUBSCRIPT_01($1, $3, @$); }
883
- | function_call "[" tuple_list "]" { $$ = SUBSCRIPT_01($1, $3, @$); }
884
- | "[" expr_list_opt "]" "[" tuple_list "]" {
884
+ : primary "[" slice_item "]" { $$ = SUBSCRIPT_01($1, $3, @$); }
885
+ | function_call "[" slice_item "]" { $$ = SUBSCRIPT_01($1, $3, @$); }
886
+ | "[" expr_list_opt "]" "[" slice_item "]" {
885
887
$$ = SUBSCRIPT_01(LIST($2, @$), $5, @$); }
886
- | "{" expr_list "}" "[" tuple_list "]" {
888
+ | "{" expr_list "}" "[" slice_item "]" {
887
889
$$ = SUBSCRIPT_01(SET($2, @$), $5, @$); }
888
- | "(" expr ")" "[" tuple_list "]" { $$ = SUBSCRIPT_01($2, $5, @$); }
889
- | "{" dict_list comma_opt "}" "[" tuple_list "]" {
890
+ | "(" expr ")" "[" slice_item "]" { $$ = SUBSCRIPT_01($2, $5, @$); }
891
+ | "{" dict_list comma_opt "}" "[" slice_item "]" {
890
892
$$ = SUBSCRIPT_01(DICT_02($2, @$), $6, @$); }
891
- | subscript "[" tuple_list "]" { $$ = SUBSCRIPT_01($1, $3, @$); }
893
+ | subscript "[" slice_item "]" { $$ = SUBSCRIPT_01($1, $3, @$); }
892
894
;
893
895
894
896
string
@@ -972,10 +974,6 @@ expr
972
974
973
975
| "{" "}" { $$ = DICT_01(@$); }
974
976
| "{" dict_list comma_opt "}" { $$ = DICT_02($2, @$); }
975
- | KW_AWAIT expr %prec AWAIT { $$ = AWAIT($2, @$); }
976
- | KW_YIELD %prec YIELD { $$ = YIELD_01(@$); }
977
- | KW_YIELD expr %prec YIELD { $$ = YIELD_02($2, @$); }
978
- | KW_YIELD_FROM expr %prec YIELD { $$ = YIELD_03($2, @$); }
979
977
| id ":=" expr { $$ = NAMEDEXPR($1, $3, @$); }
980
978
| "*" expr { $$ = STARRED_ARG($2, @$); }
981
979
0 commit comments