Какой лучший способ определить грамматики для текстового редактора?

StackOverflow https://stackoverflow.com/questions/4170180

Вопрос

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

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

  • Определить языки в основном с серией Regex Pattern Conting. (похоже на то, как TextMate определяет свои языки)
  • Определить языки с формальная грамматика как BNF или PEG

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top