Как распознать числа в соответствии с этой диаграммой перехода?

#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 .