Какой Java-ориентированный лексер-парсер для простого проекта (ANTLR, DIY и т. д)

Я работаю над небольшим проектом текстового редактора и хочу добавить базовую подсветку синтаксиса для нескольких языков (Java, XML..просто чтобы назвать несколько). В качестве учебного опыта я хотел добавить один из популярных или непопулярных Java lexer parser.

какой проект вы рекомендуете. Antlr, вероятно, самый известный, но он кажется довольно сложным и тяжелым.

вот вариант, который я знаю.

  1. Antlr
  2. Ragel (да, он может создать источник Java для обработки входных данных)
  3. сделайте это сами (я думаю, я мог бы написать простой синтаксический анализатор токенов и выделить исходный код).

9 ответов


ANTLR или JavaCC были бы двумя, которых я знаю. Сначала я бы рекомендовал ANTLR.


ANTLR может показаться сложным и тяжелым, но вам не нужно использовать все функции, которые он включает; он красиво слоистый. Я большой поклонник использования его для разработки парсеров. Для начала, вы можете использовать отличный ANTLRWorks визуализировать и проверить грамматики, которые вы создаете. Очень приятно наблюдать, как он захватывает токены, строит деревья разбора и проходит через процесс.

для вашего проекта текстового редактора я бы проверил фильтр грамматики!--2-->, которые могли бы удовлетворить твои потребности. Для грамматик фильтра вам не нужно указывать всю лексическую структуру вашего языка, только те части, которые вам нужны (т. е. нужно выделить, цвет или индекс), и вы всегда можете добавить больше, пока не сможете обрабатывать весь язык.


код Google имеет новый проект акации-Лекс. Написанный мной, кажется простым (до сих пор) java lexer с использованием аннотаций javax.


SableCC

другим интересным вариантом (который я еще не пробовал) будет Xtext, который использует Antlr, но также включает инструменты для создания редакторов Eclipse для вашего языка.


ANTLR-это путь. Я бы не стал строить его вручную. Вы также найдете, если вы посмотрите вокруг на веб-сайте ANTLR, что грамматик доступны для Java, XML и т. д.


другой вариант был бы Xtext. Он будет не только генерировать синтаксический анализатор для вашей грамматики, но и полный редактор с синтаксической окраской, маркерами ошибок, content assist и outline view.


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


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


Я не думаю, что вам нужен лексер. все, что вам нужно, это сначала прочитать расширение файла, чтобы обнаружить язык, а затем из xml-файла, в котором перечислены ключевые слова языка легко найти их и выделить их.