#compiler-construction #lexical-analysis
#компилятор-построение #лексический анализ
Вопрос:
Раздел 3.4.3 книги dragon «Компиляторы: принципы, методы и инструменты» (2-е издание) описывает процесс распознавания чисел с необязательными .
и E
частями в соответствии со следующей схемой перехода.
Моя проблема в том, почему нет исходящих ребер с надписью «other» из состояний 14, 16 или 17? Что, если мы столкнемся с «другими» символами в этих состояниях? Например, как он обрабатывает входную строку 1.2345E a
?
Ответ №1:
Исходящие ребра состояния в автомате и их метки описывают допустимый ввод в этом состоянии. Если во входной строке встречается какой-либо другой символ, когда автомат находится в этом состоянии, он не примет строку. Если вы рассмотрите строку в вашем примере 1.2345E a
, с которой столкнется автомат a
, когда она находится в состоянии 17, и поскольку a
она не является цифрой, автомат отклонит строку, как и ожидалось.
Комментарии:
1. В конце раздела 3.4.4 он гласит: «Мы разрешаем диаграмме перехода считывать входные данные до тех пор, пока не будет возможного следующего состояния, а затем берем самую длинную лексему, которая соответствует любому шаблону «. В соответствии с этой стратегией, разве она не должна возвращать
1.2345
,E
,, и
a
?2. Я опробовал это в
flex
, он возвращает1.2345
,E
,, и
a
.