[Кто-нибудь знает] другие грамматические "особенности" современных языков программирования?
Один из моих любимых, Modula-3 , был разработан в 1990 году с благословения Никлауса Вирта как последнего тогда языка в «семье Паскаля». Кто-нибудь еще помнит эти ужасные бои о том, где точка с запятой должна быть разделителем или терминатором ? В Modula-3 выбор за вами! EBNF для последовательности утверждений
stmt ::= BEGIN [stmt {; stmt} [;]] END
Аналогично, при написании альтернатив в выражении CASE
, Modula-3 позволяет использовать вертикальную черту |
в качестве разделителя или префикса. Чтобы вы могли написать
CASE c OF
| 'a', 'e', 'i', 'o', 'u' => RETURN Char.Vowel
| 'y' => RETURN Char.Semivowel
ELSE RETURN Char.Consonant
END
или вы можете оставить начальный бар, возможно, потому что вы предпочитаете писать OF
в этой позиции.
Я думаю, что мне понравилось больше всего, так как сам дизайн был осознанием дизайнерами того, что идет религиозная война, и их настойчивостью в поиске способа поддержать обе стороны.
Пусть программист выберет!
P.S. Objective Caml позволяет разрешительное использование |
в выражениях падежа, тогда как более ранний и тесно связанный диалект Standard ML не допускает. В результате в стандартном коде ML выражения регистра часто бывают ужаснее.
EDIT : Увидев ответ TED, я проверил грамматику Modula-2 и он правильный, Modula-2 также поддерживает точку с запятой в качестве терминатора, но через устройство пустого оператора, что делает такие вещи, как
x := x + 1;;;;;; RETURN x
юридическое. Я полагаю, это не плохо. Однако Modula-2 не позволила гибко использовать разделитель корпуса |
; Похоже, что это произошло от Modula-3.