Используйте лексер pygments с целью antl python - PullRequest
0 голосов
/ 05 сентября 2011

Теренс Парр сам говорит об antlr3: «К сожалению, кажется, что все еще сложнее создать токенизатор с ANTLR, чем с традиционным лексоподобным подходом».Где у pygments есть лексеры практически для любого языка, о котором вы можете подумать: http://pygments.org/languages/

Кто-нибудь пробовал использовать лексер pygments с целью antlr python?У antlr2 был пример использования flex с целью cpp, к сожалению, для antlr3 таких примеров нет.
Могу ли я просто написать файл grammarname.tokens, который парсер antlr может импортировать?Когда я использую лексер antlr, есть куча анонимных токенов, могу ли я просто удалить их?В качестве альтернативы, возможно, фрагменты могут быть изменены для принятия файла antlr .tokens для его токенов.Поток токенов pygments просто должен реализовать интерфейс потока токенов antlr.

Ответы [ 2 ]

1 голос
/ 05 сентября 2011

Навин писал:

Кто-нибудь пробовал использовать лексер pygments с целью python antlr?

Я сомневаюсь в этом. По крайней мере, я никогда не видел, чтобы кто-то упоминал об этом ни здесь, ни в SO, ни в списках рассылки ANTLR (которые я наблюдаю уже довольно давно).

Навин писал:

Могу ли я просто написать файл grammarname.tokens, который может импортировать анализатор antlr?

Нет. Парсер ожидает экземпляр объекта Lexer, который присутствует во время выполнения (Python). Файл .tokens не должен редактироваться вручную.

Навин писал:

Когда я использую лексер antlr, есть куча анонимных токенов, могу ли я просто удалить их?

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

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

0 голосов
/ 26 октября 2011

этот другой вопрос был очень полезен: ANTLR Parser с ручным лексером также считывал фрагменты stax и jflex: http://www.antlr.org/wiki/display/ANTLR3/Interfacing+StAX+to+ANTLR http://www.antlr.org/pipermail/antlr-interest/2007-October/023957.html

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

, но, наконец, я понял: я понял: http://github.com/tinku99/antlr-pygments

...