Pythonic способ реализовать токенизатор - PullRequest
12 голосов
/ 27 марта 2009

Я собираюсь реализовать токенайзер в Python, и мне было интересно, не могли бы вы дать какой-нибудь совет по стилю?

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

Типы списочных токенов:

Например, в Java у меня был бы список полей, например:

public static final int TOKEN_INTEGER = 0

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

Возвращение токенов из токенизатора:

Есть ли лучшая альтернатива простому возвращению списка кортежей, например,

[ (TOKEN_INTEGER, 17), (TOKEN_STRING, "Sixteen")]?

Приветствия

Пит

Ответы [ 12 ]

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

Когда я запускаю что-то новое в Python, я обычно сначала смотрю на некоторые модули или библиотеки для использования. + 90% + вероятность того, что что-то уже есть.

Для токенизаторов и парсеров это, безусловно, так. Вы смотрели на PyParsing ?

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

«Есть ли лучшая альтернатива простому возвращению списка кортежей»

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

...