Message 326648 - Python tracker (original) (raw)

The DFA for the rule

with_stmt: 'with' ( with_item (',' with_item)* | '(' with_item (',' with_item)* [','] ')' ) ':' suite

is:

DFA for with_stmt [512/2103] State 0 'with' -> 1 State 1 '(' -> 2 with_item -> 3 State 2 with_item -> 4 State 3 ',' -> 5 ':' -> 6 State 4 ')' -> 7 ',' -> 8 State 5 with_item -> 3 State 6 suite -> 10 State 7 ':' -> 6 State 8 ')' -> 7 with_item -> 4 State 9 ',' -> 5 ':' -> 6 State 10 (final) State 11 ')' -> 7 ',' -> 8

It works because the transition from State 1 into a "(" is going to prioritize the path:

0 -> 1 -> "(" -> 2

instead if

0 -> 1 -> with_item -> 3