@@ -708,10 +708,10 @@ type_param_starred_default[expr_ty]: '=' e=star_expression {
708708# -----------
709709
710710expressions[expr_ty]:
711- | a=expression b=(',' c=expression { c })+ [','] {
712- _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)), Load, EXTRA) }
713- | a=expression ',' { _PyAST_Tuple( CHECK(asdl_expr_seq*, _PyPegen_singleton_seq (p, a)), Load, EXTRA) }
714- | expression
711+ | a=expression b=[ (',' c=expression { c })+] trailing= [','] {
712+ (b ? b : trailing) ? _PyAST_Tuple(
713+ b ? CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front (p, a, b)) :
714+ CHECK(asdl_expr_seq*, _PyPegen_singleton_seq(p, a)), Load, EXTRA) : a }
715715
716716expression[expr_ty] (memo):
717717 | invalid_if_expression
@@ -729,10 +729,10 @@ yield_expr[expr_ty]:
729729 | 'yield' a=[star_expressions] { _PyAST_Yield(a, EXTRA) }
730730
731731star_expressions[expr_ty]:
732- | a=star_expression b=(',' c=star_expression { c })+ [','] {
733- _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)), Load, EXTRA) }
734- | a=star_expression ',' { _PyAST_Tuple( CHECK(asdl_expr_seq*, _PyPegen_singleton_seq (p, a)), Load, EXTRA) }
735- | star_expression
732+ | a=star_expression b=[ (',' c=star_expression { c })+] trailing= [','] {
733+ (b ? b : trailing) ? _PyAST_Tuple(
734+ b ? CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front (p, a, b)) :
735+ CHECK(asdl_expr_seq*, _PyPegen_singleton_seq(p, a)), Load, EXTRA) : a }
736736
737737star_expression[expr_ty] (memo):
738738 | '*' a=bitwise_or { _PyAST_Starred(a, Load, EXTRA) }
@@ -761,18 +761,14 @@ named_expression[expr_ty]:
761761 | expression !':='
762762
763763disjunction[expr_ty] (memo):
764- | a=conjunction b=('or' c=conjunction { c })+ { _PyAST_BoolOp(
765- Or,
766- CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)),
767- EXTRA) }
768- | conjunction
764+ | a=conjunction b=[('or' c=conjunction { c })+] {
765+ b ? _PyAST_BoolOp(Or,
766+ CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)), EXTRA) : a }
769767
770768conjunction[expr_ty] (memo):
771- | a=inversion b=('and' c=inversion { c })+ { _PyAST_BoolOp(
772- And,
773- CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)),
774- EXTRA) }
775- | inversion
769+ | a=inversion b=[('and' c=inversion { c })+] {
770+ b ? _PyAST_BoolOp(And,
771+ CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)), EXTRA) : a }
776772
777773inversion[expr_ty] (memo):
778774 | 'not' a=inversion { _PyAST_UnaryOp(Not, a, EXTRA) }
@@ -782,13 +778,10 @@ inversion[expr_ty] (memo):
782778# --------------------
783779
784780comparison[expr_ty]:
785- | a=bitwise_or b=compare_op_bitwise_or_pair+ {
786- _PyAST_Compare(
787- a,
781+ | a=bitwise_or b=[compare_op_bitwise_or_pair+] {
782+ b ? _PyAST_Compare(a,
788783 CHECK(asdl_int_seq*, _PyPegen_get_cmpops(p, b)),
789- CHECK(asdl_expr_seq*, _PyPegen_get_exprs(p, b)),
790- EXTRA) }
791- | bitwise_or
784+ CHECK(asdl_expr_seq*, _PyPegen_get_exprs(p, b)), EXTRA) : a }
792785
793786compare_op_bitwise_or_pair[CmpopExprPair*]:
794787 | eq_bitwise_or
@@ -832,24 +825,24 @@ bitwise_and[expr_ty]:
832825 | shift_expr
833826
834827shift_expr[expr_ty]:
835- | a=shift_expr '<<' b=sum { _PyAST_BinOp(a, LShift, b, EXTRA) }
836- | a=shift_expr '>>' b=sum { _PyAST_BinOp(a, RShift, b, EXTRA) }
828+ | a=shift_expr op[Token*]=( '<<' | '>>') b=sum {
829+ _PyAST_BinOp(a, op->type == LEFTSHIFT ? LShift : RShift, b, EXTRA) }
837830 | sum
838831
839832# Arithmetic operators
840833# --------------------
841834
842835sum[expr_ty]:
843- | a=sum '+' b=term { _PyAST_BinOp(a, Add, b, EXTRA) }
844- | a=sum '-' b=term { _PyAST_BinOp(a, Sub, b, EXTRA) }
836+ | a=sum op[Token*]=( '+' | '-') b=term {
837+ _PyAST_BinOp(a, op->type == PLUS ? Add : Sub, b, EXTRA) }
845838 | invalid_arithmetic
846839 | term
847840
848841term[expr_ty]:
849- | a=term '*' b=factor { _PyAST_BinOp(a, Mult, b, EXTRA) }
850- | a=term '/' b=factor { _PyAST_BinOp(a, Div, b, EXTRA) }
851- | a=term '//' b=factor { _PyAST_BinOp(a, FloorDiv, b, EXTRA) }
852- | a=term '%' b=factor { _PyAST_BinOp(a, Mod, b, EXTRA) }
842+ | a=term op[Token*]=( '*' | '/' | '//' | '%') b=factor {
843+ _PyAST_BinOp(a, op->type == STAR ? Mult :
844+ op->type == SLASH ? Div :
845+ op->type == DOUBLESLASH ? FloorDiv : Mod, b, EXTRA) }
853846 | a=term '@' b=factor { CHECK_VERSION(expr_ty, 5, "The '@' operator is", _PyAST_BinOp(a, MatMult, b, EXTRA)) }
854847 | factor
855848
@@ -861,8 +854,8 @@ factor[expr_ty] (memo):
861854 | invalid_factor
862855
863856power[expr_ty]:
864- | a=await_primary '**' b =factor { _PyAST_BinOp(a, Pow, b, EXTRA) }
865- | await_primary
857+ | a=await_primary b=[ '**' c =factor { c }] {
858+ b ? _PyAST_BinOp(a, Pow, b, EXTRA) : a }
866859
867860# Primary elements
868861# ----------------
0 commit comments