Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка 15.02.docx
Скачиваний:
2
Добавлен:
07.05.2019
Размер:
240.61 Кб
Скачать

Задачи и упражнения

Вход лексического анализатора:

  1. Файл с текстом программы на одном из языков.

Выход лексического анализатора:

  1. Таблица символов.

  2. Распечатка лексической структуры программы.

Порядок выполнения работы:

  1. Построить грамматику для заданного языка (см. Таблица 5) в виде продукций.

  2. Построить грамматику для распознавания токенов в виде продукций.

  3. Получить регулярные выражения для распознавания токенов.

  4. Построить -НКА для регулярных выражений.

  5. Провести преобразование в -НКА в ДКА.

  6. Реализовать полученный анализатор на любом языке.

Контрольные вопросы

  1. Какова задача лексических анализаторов?

  2. Что такое токены, шаблоны, лексемы? Приведите пример.

  3. Что является ошибкой лексического анализа?

  4. Приведите примеры восстановления после лексической ошибки.

  5. Какие ошибки распознает лексической анализатор:

    1. while (a < b) } {;

    2. if (2d > 3) {};

    3. or (int I = 5;;){};

    4. int g == 8;

  1. Можно ли язык, представленный регулярным выражением, задать некоторым конечным автоматом?

  2. Какие шаги нужно выполнить, чтобы добиться распознавания токенов?

S–грамматики. Автоматы с магазинной памятью.

Автоматы с магазинной памятью

МП-автомат – это конечный автомат, снабжённый дополнительным стеком (магазином) для хранения промежуточной информации потенциально бесконечного объёма.

МПА = <S, S0, F, , Г, >

где S – множество внутренних состояний автомата; F – множество допускающих состояний; S0 – начальное состояние автомата;  – конечный алфавит входных сигналов; Г – конечный алфавит магазина;  – функция переходов, вида (si, x, top(гГ))  {sj, push(гГ)}

Рисунок 5. Автомат с магазинной памятью.

Пример 9. МП-Автомат, распознающий сбалансированные скобочные выражения

M = ({s}, s, {s}, {(,)}, {A}, )

(s, “(”, Г)  {s, push(“A”)}

(s, “)”, Г)  {s, pop()}

Протокол:

<“(”, >  A 

<“(”, A>  AA

<“)”, AA>  A

<“)”, A>  

S-грамматики

Грамматики вида: A  a, где a T, (TN)*

МП-автомат с одним состоянием, с алфавитом  = (TN)

Алгоритм:

  1. Начальное состояние: поместить в магазин начальный символ грамматики.

  2. Рекурсивно: по очередному символу цепочки и верхнему символу магазина определить цепочку, которая должна быть помещена в магазин:

    1. Если верхний символ магазина – нетерминал, то очередной входной терминал является ключом, определяющий правую часть правила грамматики, которой должен быть заменён нетерминал;

    2. Если верхний символ магазина – терминал, он должен совпадать с очередным терминалом цепочки. При совпадении терминал выбрасывается из магазина и на его место записывается пустая цепочка ().

  3. Произвести сдвиг по входной цепочке.

Пример 10. Вывод цепочки с помощью s-грамматики.

S  acSbA | bAb

A aaB | cbSb

B bAa | a

Произвести вывод цепочки acbaaabbaaa

Таблица 9.Переходы МП-автомата.

a

b

c

S

cSbA

Ab

Ошибка

A

aB

Ошибка

bSb

B

Aa

Ошибка

a

Ошибка

Ошибкa

b

Ошибка

Ошибка

c

Ошибка

Ошибка

a  S 

c  cSbA 

b  SbA 

a  AbbA 

a  aBbbA 

a  BbbA 

b  bbA 

b  bA 

a  A 

a  aB 

a  B 