Какой синтаксический анализатор ориентирован на Java для простого проекта (ANTLR, DIY и т. Д.) - PullRequest
7 голосов
/ 04 марта 2009

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

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

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

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

Ответы [ 9 ]

8 голосов
/ 04 марта 2009

ANTLR или JavaCC - это те два, которые я знаю. Я бы порекомендовал ANTLR первым.

3 голосов
/ 05 марта 2009

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

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

2 голосов
/ 09 ноября 2012

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

1 голос
/ 05 марта 2009

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

1 голос
/ 05 марта 2009

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

1 голос
/ 04 марта 2009

SableCC

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

0 голосов
/ 05 марта 2009

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

0 голосов
/ 04 марта 2009

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

0 голосов
/ 04 марта 2009

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

...