Возможны ли языки программирования с подсветкой синтаксиса, использующие регулярные выражения?

Мы все уже знаем, что синтаксический анализ HTML с использованием регулярных выражений в общем случае невозможен, так как это будет синтаксический анализ контекстно-зависимой грамматики, в то время как регулярные выражения могут анализировать только обычные грамматики. То же самое, безусловно, верно и для других языков программирования.

Недавно было объявлено о подсветке синтаксиса Rainbow.js. Его предпосылка описывается как очень простая:

Радуга сама по себе очень проста. Он проходит через блоки кода, обрабатывает шаблоны регулярных выражений и заключает соответствующие шаблоны в теги.

Я понял, что подсветка синтаксиса — задача такой же сложности, как и синтаксический анализ языка, если предположить, что она должна быть одновременно хорошей и подходящей для многих языков. Тем не менее, несмотря на довольно много критикиэтой библиотеки, ни она, ни обсуждение HackerNews(взятое в качестве примера для обсуждения технически склонными) не упоминают, что подсветка синтаксиса использование регулярных выражений в общем случае практически невозможно, что я считаю серьезным недостатком, останавливающим показ.

Теперь вопрос: есть ли что-то, что я упускаю? В частности:

  1. Возможна ли вообще подсветка синтаксиса с помощью регулярных выражений?
  2. Является ли это примером применяемого правила 80/20, когда регулярные выражения могут быть как раз достаточными, чтобы быть полезными?

11
задан Nikolai Prokoschenko 31 March 2012 в 12:44
поделиться