2009-03-04 8 views
7

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

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

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

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

ANTLR. без сомнений. –

ответ

8

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

+0

Считаете ли вы, что это слишком тяжело или сложно.Это единственное, что удерживает меня от использования Antlr. Но он популярен и, кажется, очень стабилен. –

+0

Если вы говорите о разборе языка, такого как Java, я бы сказал, что это правильно. Для вас доступны Java-грамматики, поэтому просто нужно идти по AST и генерировать то, что вы хотите от него. – duffymo

+0

Знаете? Рекомендуя один над другим, вы должны были использовать оба, не так ли? –

-1

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

+0

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

1

SableCC

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

0

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

1

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

0

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

1

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

3

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

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

+0

Ваши ссылки действительно полезны !! – tiboo

2

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