Зачем использовать лексические анализаторы?
-
10-07-2019 - |
Вопрос
Я создаю свой собственный язык с помощью Flex, но хочу знать кое-что:
- Зачем мне использовать лексические анализаторы?
- Они собираются мне чем-то помочь?
- Они обязательны?
Решение
Лексический анализ помогает упростить синтаксический анализ, поскольку лексемы можно рассматривать как абстрактные сущности, а не как конкретные последовательности символов.
Однако для создания вашего языка вам понадобится нечто большее, чем просто гибкость:Лексический анализ – это лишь первый шаг.
Другие советы
Каждый раз, когда вы преобразуете входную строку в строки, разделенные пробелами, и/или числовые значения, вы выполняете лексический анализ.Написание каскадной серии else if (strcmp (..)==0) ...
высказывания считаются лексическим анализом.Даже такие противные инструменты, как sscanf и strtok, являются инструментами лексического анализа.
Вы захотите использовать такой инструмент, как flex, вместо одного из вышеперечисленных по одной из нескольких причин:
- Обработку ошибок можно сделать намного лучше.
- С помощью flex вы можете быть гораздо более гибкими в выборе различных вещей.Например, сложно правильно проанализировать шестнадцатеричное значение формата C с помощью процедур сканирования.сканирование в значительной степени должно знать приходит шестнадцатеричное значение.Лекс может разобраться с этим за тебя.
- Сканеры Lex работают быстрее.Если вы анализируете много файлов и/или больших файлов, это может оказаться важным.
Вы могли бы рассмотреть возможность использования лексического анализатора, потому что вы можете использовать BNF (или EBNF) для декларативного описания вашего языка (грамматики), а затем просто использовать синтаксический анализатор для анализа программы, написанной на вашем языке, и поместить ее в структуру в памяти, а затем свободно манипулировать им.
Это не обязательно, и вы, конечно, можете написать свой собственный, но это зависит от того, насколько сложен язык и сколько времени у вас есть на изобретение велосипеда.
Кроме того, тот факт, что вы можете использовать язык (BNF) для описания своего языка без изменения самого лексического анализатора, позволяет вам проводить множество экспериментов и изменять грамматику вашего языка, пока вы не получите именно то, что вам подходит.