Я хотел бы понять, можно ли изменить синтаксис Python, сделав необязательные двоеточия составных операторов , когда они находятся в конце строки , кроме пробелов и комментариев. Например:
if so()
print("yes")
else
print("no")
Будет ли это изменение нарушать существующий Python код? Будут ли неоднозначные конструкции? Станет ли парсер чрезвычайно плохим в диагностике какой-либо ошибки? Будет ли еще одна проблема, о которой я не могу думать сейчас?
Конечно, я знаю аргумент, что двоеточие облегчает чтение кода. Я думаю, что это спорно, но я абсолютно не хочу обсуждать мнения здесь. Мой вопрос о возможных технических проблемах.
В соответствии с синтаксисом составных операторов в документации перед suite
всегда стоит ":"
, где suite
определяется как
suite ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT
Взяв в качестве примера оператор if
if_stmt ::= "if" expression ":" suite
("elif" expression ":" suite)*
["else" ":" suite]
, синтаксис, по-видимому, можно изменить следующим образом:
suite ::= ":" stmt_list NEWLINE | [":"] NEWLINE INDENT statement+ DEDENT
if_stmt ::= "if" expression suite
("elif" expression suite)*
["else" suite]
В Файл грамматики исходного кода CPython (также доступен здесь ) немного отличается и немного усложняется необязательным комментарием типа после двоеточие в некоторых конструкциях, но в целом мне кажется, что можно изменить синтаксис аналогично приведенному выше.
Какие технические препятствия будут иметь место?
Обновление: ниже может быть более LL (1) -дружественный синтаксис для suite
:
suite ::= colon_suite | indented_suite
colon_suite ::= ":" (stmt_list NEWLINE | indented_suite)
indented_suite ::= NEWLINE INDENT statement+ DEDENT