Estaba revisando la especificación de la gramática de python y encontré la siguiente declaración,
for_stmt:
| 'for' star_targets 'in' ~ star_expressions ':' [TYPE_COMMENT] bloque [else_block]
¿Qué significa ~ en esta regla gramatical?. Los otros símbolos usados en la gramática (como & , ! , | ) ya están documentados pero no ~ .
La notación es una mezcla de
EBNFyPEG. En particular,&seguido de un símbolo, token o grupo entre paréntesis indica una anticipación positiva (es decir, se requiere para que coincida pero no se consume), mientras que!indica una anticipación negativa (es decir, se requiere que no coincida). Usamos el|separador para indicar la "elección ordenada" de PEG (escrito como/en las gramáticas tradicionales de PEG)
.
Está documentado en PEP 617 bajo Grammar Expressions:
~
Comprométase con la alternativa actual, incluso si falla al analizar.
rule_name: '(' ~ some_rule ')' | some_altEn este ejemplo, si se analiza un paréntesis izquierdo, no se considerará la otra alternativa, incluso si alguna_regla o ')' no se analizan.
El ~ básicamente indica que una vez que lo alcanza, está bloqueado en la regla particular y no puede pasar a la siguiente regla si el análisis falla. PEP 617 menciona anteriormente que | some_alt se puede escribir en la siguiente línea.