Должен ли я использовать регулярные выражения при попытке написать токенизатор? - PullRequest
1 голос
/ 17 августа 2010

Я написал небольшой и простой токенизатор, но без использования регулярных выражений.

Я начинаю с первого индекса и перебираю каждый символ до конца и создаю необходимые токены.

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

Так я должен переписать и ожидать, что это будет "лучше"?

Ответы [ 4 ]

3 голосов
/ 17 августа 2010

Обычно токенизация может быть выполнена с помощью конечного автомата, который эквивалентен каноническим регулярным выражениям.Если вы сделаете правильные регулярные выражения, это будет намного легче читать и поддерживать, чем домашний FSA.Используйте такие инструменты, как flex или jflex и т. Д., Они скомпилируют регулярные выражения в минимальные FSA, обеспечивая очень хорошую производительностьДелать это вручную следует только в качестве упражнения.

Lexer существует в нескольких реализациях, вполне возможно для вашего любимого языка.

2 голосов
/ 17 августа 2010

Два вопроса, которые вы должны задать:

a) Если что-то изменится, какой из них будет проще всего поддерживать?

b) Если он работает и вы не ожидаете каких-либоизменить, вы действительно хотите тратить на это больше времени?

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

1 голос
/ 17 августа 2010

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

0 голосов
/ 17 августа 2010

Очень сильно зависит от разбора языка и вашего определения «лучше».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...