Каков наилучший способ определения грамматики для текстового редактора? - PullRequest
3 голосов
/ 13 ноября 2010

Я мазохистски пишу текстовый редактор с открытым исходным кодом для Mac и, наконец, достиг той точки, когда я хочу добавить подсветку синтаксиса. В течение последних нескольких дней я изучал различные решения и наконец решил открыть этот вопрос для более широкой аудитории.

Вот варианты, которые я вижу:

  • Определение языков в основном с помощью серии соответствия регулярных выражений (аналогично тому, как TextMate определяет свои языки)
  • Определение языков с формальной грамматикой , такой как BNF или PEG

Использование сопоставления с регулярным выражением кажется менее чем идеальным, поскольку оно не может формально представлять язык почти так же хорошо, как формальная грамматика; однако некоторым менее формальным языкам будет трудно вписаться в BNF (т.е. Markdown - хотя я знаю, что есть отличная реализация PEG ).

Каковы компромиссы производительности для подсветки синтаксиса в реальном времени? А как насчет гибкости для широкого спектра языков?

Если я пойду по маршруту BNF, Тодд Дитчендорф создал потрясающий ParseKit фреймворк, который будет отлично работать из коробки. Кто-нибудь знает что-нибудь подобное для PEG?

Ответы [ 3 ]

7 голосов
/ 13 ноября 2010

Если вы не хотите сражаться за получение полной контекстно-свободной (или, что еще хуже, полностью контекстно-зависимой) грамматики, полностью правильной для каждого языка, который вы хотите обрабатывать (или, что еще хуже, для каждого диалекта языка, который вы хотите обработать ... сколько видов C ++ существует?), для целей подсветка синтаксиса вам, вероятно, лучше отказаться от полной корректности и принять, что иногда вы получитеэто неправильно.В этом случае регулярные выражения кажутся очень хорошим ответом.Они также могут быть очень быстрыми, поэтому они не будут мешать человеку, выполняющему редактирование.

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

Иногда лучше не быть слишком серьезным.98% решение, которое вы можете получить, лучше, чем 100% решение, которое никогда не материализуется.

3 голосов
/ 13 ноября 2010

Это может быть не совсем то, что вам нужно, так как вы сами пишете редактор, но есть замечательная среда под названием Xtext, которая фактически генерирует полный редактор с цветовой подсветкой синтаксиса, настраиваемым контурным представлением и автозаполнением и т. Д. На основе грамматика для вашего языка: http://eclipse.org/Xtext

0 голосов
/ 18 ноября 2010

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

...