Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_po_EVM.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
2.78 Mб
Скачать

II.7.2. Определение границ лексем

Язык констант и идентификаторов является регулярным, т.е. может быть описан с помощью регулярных грамматик. Распознавателем является КА (конечный автомат), поэтому основой для реализации являются КА. Существуют правила, при которых может быть построен КА, распознающий цепочки языка, заданного данной грамматикой. Он для каждой входной цепочки языка определяет, принадлежит ли она языку, заданному автоматом. Кроме того, он выполняет следующие действия:

    1. определяет границы лексем, которые в тексте исходной программы не указаны;

    2. выполняет действия для сохранения информации о обнаруженной лексеме и выдает сообщение об ошибке, если она не верна.

II.7.3. Выполнение действий, связанных с лексемами

В большинстве компиляторов ЛА и СА – это взаимосвязанные части. Для организации взаимосвязи применяют два метода – это последовательный и параллельный. При 1ом ЛА просматривает весь текст исходной программы от начала до конца и преобразует его в ТЛ, которая заполняется сразу полностью. Компилятор использует ее для следующих фаз компиляции, не изменяя ее. Если в процессе разбора он не смог правильно определить тип лексемы, то считается, что исходная программа содержит ошибку. При параллельном варианте ЛА текста исходной программы выполняется поэтапно (по шагам). Он выделяет лексему в коде и передает ее в СА. СА, выполнив разбор конструкции языка может подтвердить правильность найденной лексемы и обратиться к ЛА за следующей лексемой либо отвергнуть найденную лексему. В этом случае он может проинформировать ЛА о том, что надо вернуться назад, к уже рассмотренному ранее элементу исходного кода и сообщить ему дополнительную информацию о том, какого типа лексему следует ожидать. В взаимодействии между собой, они могут перебрать несколько возможных вариантов лексем и если ни один из них не подойдет, будет считаться, что исходная программа содержит ошибку. Только после того, как СА успешно выполнит разбор очередной конструкции исходного языка, ЛА помещает лексему в ЛА и в ТИ и продолжается разбор в том же порядке.

Их последовательная работа – это самый простой вариант взаимодействия. Она обеспечивает скорость работы компилятора, чем их параллельное взаимодействие.

II.7.4. Применение конечных автоматов (ка) для построения ла

Конечным автоматом называют

M( Q, V, δ , q0 ,F ), где

Q – конечное множество состояний автомата

V – конечное множество допустимых входных сигналов (алфавит автомата)

δ – функция перехода, отображающая V*Q( декартовое произведение множеств во множестве подмножеств)

Q: R(Q), т.е.

δ ( a,q)=R, a ∈ V, q ∈ Q,

R ≤  Q

q0 - начальное состояние автомата

q0 ∈ Q

F – непустое множество конечных состояний автомата

F ≤Q, F 0

II.7.5. Алгоритм построения ка

Построение КА M( Q, V, δ , q0 ,F ) на основе автоматной леволинейной грамматики G(VT,VN,P,S) выполняется по следующему алгоритму:

  1. строят множество состояний автомата Q таким образом, чтобы каждому нетерминальному символу из множества VN данной грамматики G соответствовало одно состояние из множества Q автомата M. В множество состояний автомата добавляется одно дополнительное состояние, обозначаемое H. Сохраняя обозначение нетерминальных символов гр. G для множества состояний M можно записать Q=VN ∪{H}

  2. входным алфавитом автомата М является множество терминальных символов гр. G V=VT.

  3. просмотрев всё множество правил исходной программы, если встречается правило вида

A → t ∈P, где A∈ VN, t ∈VT, то функция переходов δ (H,t) добавляют состояние A и

получают A ∈ δ(H,t). Если встречается правило вида A →B t ∈P, где A,B∈ VN, t ∈VT, то в функцию перехода δ (B,t) автомата М добавляется состояние A: A ∈ δ(B,t).

  1. начальное состояние автомата М является состоянием Н

H: q0 = H

  1. множество конечных состояний автомата М состоит из 1 состояния, которое соответствует целевому символу гр. G

G:F={S}

На этом построение автомата заканчивается.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]