Исследование 42 языков программирования выявило удивительное разнообразие в их лексическом синтаксисе. Например, в языке C, помимо устаревших триграфов, позволяющих заменять символы ASCII, однострочные комментарии могут продолжаться на следующих строках, используя обратный слеш. Haskell, в свою очередь, поддерживает вложенные многострочные комментарии, в отличие от C. D, развивая эту идею, поддерживает рекурсивные комментарии, и в то же время оба типа комментариев C.
Неожиданные возможности обнаружены в именах переменных Tcl, допускающих кавычки, и в регулярных выражениях JavaScript, где экранирование слешей зависит от их контекста. В JavaScript также есть невидимые символы UNICODE, которые интерпретируются как концы строк. Shell-скрипты позволяют использовать пустые строки в качестве маркеров конца heredoc, а также допускают встраивание нескольких heredoc в одну строку.
Интерполяция строк в Kotlin, Scala и TypeScript выходит за рамки простого включения переменных, позволяя вставлять код. Синтаксис строк C, допускает любое количество кавычек для их обрамления, а Swift использует произвольное количество символов для этой цели. Lua в свою очередь использует двойные квадратные скобки, между которыми можно поместить любое число знаков равенства, что применимо и к комментариям.
Сложность лексического анализа значительно варьируется. FORTH считается наиболее простым языком из-за его простого синтаксиса, а Ruby, с его контекстно-зависимым и плохо документированным синтаксисом, является наиболее сложным. Примечательно, что даже хорошо отлаженные редакторы, такие как Emacs, не всегда корректно обрабатывают такие неочевидные языковые конструкции.
Изображение носит иллюстративный характер
Неожиданные возможности обнаружены в именах переменных Tcl, допускающих кавычки, и в регулярных выражениях JavaScript, где экранирование слешей зависит от их контекста. В JavaScript также есть невидимые символы UNICODE, которые интерпретируются как концы строк. Shell-скрипты позволяют использовать пустые строки в качестве маркеров конца heredoc, а также допускают встраивание нескольких heredoc в одну строку.
Интерполяция строк в Kotlin, Scala и TypeScript выходит за рамки простого включения переменных, позволяя вставлять код. Синтаксис строк C, допускает любое количество кавычек для их обрамления, а Swift использует произвольное количество символов для этой цели. Lua в свою очередь использует двойные квадратные скобки, между которыми можно поместить любое число знаков равенства, что применимо и к комментариям.
Сложность лексического анализа значительно варьируется. FORTH считается наиболее простым языком из-за его простого синтаксиса, а Ruby, с его контекстно-зависимым и плохо документированным синтаксисом, является наиболее сложным. Примечательно, что даже хорошо отлаженные редакторы, такие как Emacs, не всегда корректно обрабатывают такие неочевидные языковые конструкции.