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

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

  1. В чём особенности детерминированного и недетерминированного конечных автоматов?

  2. Как производится построение -НКА из ДКА?

  3. Опишите операции, используемые при отслеживания множеств состояний НКА.

  4. Может ли любой недетерминированный конечный автомат может быть преобразован в детерминированный так, чтобы их языки совпадали?

  5. Как зависит число состояний ДКА, полученного из НКА от количества состояний исходного автомата в худшем случае?

  6. Назовите известные вам способы описания конечного автомата.

  7. Сколько может быть состояний, в которые может перейти ДКА для каждой последовательности входных символов?

Регулярные грамматики. Лексический анализатор. Роль лексических анализаторов

Задача: чтение символов исходного текста программы и выдача последовательности токенов.

  1. Удаление комментариев и не несущих смысловой нагрузки пробелов (табуляции и т.п.) из строки исходного кода.

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

  3. Реализация макросов и директив препроцессора.

Фазы:

  1. Сканирование

  2. Лексический анализ

Таблица 6. Токены, шаблоны, лексемы.

Токен

Лексема

Шаблон (неформально)

const

const

const

if

if

if

relation

<,>,<=,>=,=,<>,>,>=

< или <= или >= или…

id

Pi, count, p2

Буква, за которой следуют буквы и цифры

num

3.141592, 0, -1

Любая числовая константа

literal

‘This is a test of pattern’

Любые символы между кавычками, исключая сами кавычки

Токен – терминальный символ грамматики.

Лексема – строка символов исходного языка, соответствующая шаблону токена.

Шаблон – правило, описывающее набор лексем

Лексические ошибки

Ошибкой лексического анализа является невозможность распознать лексему по заданным возможным шаблонам.

Восстановление после ошибки:

  • удалить лишние символы;

  • вставить пропущенные;

  • замена неверного символа верным;

  • перестановка соседних символов.

Синтаксические ошибки не распознаются:

  • fi (a == f(x)).

Регулярные выражения

E – регулярное выражение

L(E) – язык регулярного выражения

Базис:

  1. Константы  и  являются регулярными выражениями, определяющие языки L() = {} и L() = .

  2. Если aпроизвольный символ, то aрегулярное выражение, определяющее язык L(a) ={a}

Индукция:

  1. Если E и F – регулярные выражения, то E+F – регулярное выражение (объединение)

  2. Если E и F – регулярные выражения, то EF – регулярное выражение (конкатенация)

  3. Если E – регулярное выражение, то Е* - регулярное выражение, определяющее итерацию языка L(E). Т.е. L(E*) = (L(E))*

  4. Если E – регулярное выражение, то (Е) - регулярное выражение, определяющее тот же язык L(E), что и E. Т.е. L((E)) = L(E)

Пример 7. Задать множество цепочек, чередующихся нулей и единиц:

    • 010101…01

    • 101010...10

    • 0101010

    • 1010101

Решение №1:

(01)* + (10)* + 0(10)* + 1(01)*

Решение №2:

(+1)(01)*(+0)

G = <{0,1, }, {S,A,B,C}, {S}, R>

R:

S  ABC

A  1 | 

B  01B | 01

C  0 | 