Зачем использовать лексические анализаторы? - PullRequest
3 голосов
/ 30 ноября 2009

Я создаю свой собственный язык с помощью Flex, но я хочу знать кое-что:

  • Почему я должен использовать лексические анализаторы?
  • Они собираются мне чем-то помочь?
  • Они обязательны?

Ответы [ 3 ]

5 голосов
/ 30 ноября 2009

Лексический анализ помогает упростить синтаксический анализ, потому что лексемы могут рассматриваться как абстрактные объекты, а не как конкретные последовательности символов.

Для построения языка вам потребуется нечто большее, чем flex: Лексический анализ - это только первый шаг.

3 голосов
/ 30 ноября 2009

Каждый раз, когда вы конвертируете входную строку в разделенные пробелами строки и / или числовые значения, вы выполняете лексический анализ. Написание каскадной серии else if (strcmp (..)==0) ... операторов считается лексическим анализом. Даже такие неприятные инструменты, как sscanf и strtok, являются инструментами лексического анализа.

Вы хотите использовать инструмент, такой как flex, вместо одного из перечисленных выше по одной из нескольких причин:

  • Обработка ошибок может быть значительно улучшена.
  • Вы можете быть намного более гибкими в том, что разные вещи вы узнаете с помощью flex. Например, трудно правильно проанализировать шестнадцатеричное значение C-формата с помощью процедур scanf. scanf должен знать шестнадцатеричное значение. Лекс может понять это для тебя.
  • Сканеры Lex работают быстрее. Если вы анализируете много файлов и / или большие файлы, это может стать важным.
1 голос
/ 30 ноября 2009

Вы могли бы рассмотреть возможность использования лексического анализатора, потому что вы могли бы использовать BNF (или EBNF) для декларативного описания вашего языка (грамматики), а затем просто использовать анализатор для анализа программы, написанной на вашем языке, и получить ее в структуре в память, а затем свободно манипулировать ею.

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

Кроме того, тот факт, что вы можете использовать язык (BNF) для описания вашего языка без изменения самого лексического анализатора, позволяет вам проводить множество экспериментов и изменять грамматику вашего языка, пока вы не получите именно то, что работает для вас.

...