Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры [4747 вопросов].doc
Скачиваний:
83
Добавлен:
15.06.2014
Размер:
407.04 Кб
Скачать

5.Конечные автоматы. Способы задания. Методы построения конечных автоматов. Преобразование конечных автоматов.

Конечный автомат – это математическая модель, которая задается множествами состояний Q, входных символов , функций переходов , начальное состояние , и конечных состояний Z.

Распознавателем языка называется программа, которая получает на вход строку х и отвечает "да", если х — предложение языка, или в противном случае "нет". Мы компилируем регулярное выражение в распознаватель путем построения обобщен­ной диаграммы переходов, называемой конечным автоматом. Такой автомат может быть детерминированным или недетерминированным (недетерминированный автомат может иметь более одного перехода из состояния при одном и том же входном символе).

Как детерминированные, так и недетерминированные конечные автоматы способны к распознаванию точных регулярных множеств. Таким образом, они могут распознавать все, что могут обозначать регулярные выражения. Однако детерминированные конечные автоматы, которые приводят к более быстрому распознаванию, обычно больше по раз­меру, чем эквивалентные недетерминированные.

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

Таблицы состояний: Li (столбец) – i-ый входной символ, Qi (строка) – i-ое состояние

Диаграмма имеет вид графа. Li – i-ый входной символ (дуги диаграммы),Qi – i-ое состояние (узлы диаграммы)

При этом двойной узел обозначает конечное состояние автомата.

Состояние конечного автомата описывается парой Qi Lj, т.е. конечный автомат переходит в данное состояние при условии что на вход подан входной символ Li и автомат находится в состоянии Qi.

6 Лексический анализ. Методы и средства построения лексического анализатора.

Исходное текстовое представление программы совсем не для работы компилятора, поэтому во время анализа программа прежде всего разбивается на последовательность строк, или, как принято говорить, лексем (lexeme). Множество лексем разбивается на непересекающиеся подмножества (лексические классы). Лексемы попадают в один лексический класс, если они неразличимы с точки зрения синтаксического анализатора.

В большинстве языков программирования имеются следующие лексические классы: ключевые слова (по одному на каждое ключевое слово), идентификаторы, строковые литералы, числовые константы. Каждому подмножеству сопоставляется некоторое число, называемое идентификатором лексического класса (token) или, короче, лексическим классом

7 Распознавание цепочек символов с помощью конечных автоматов.

При анализе цепочки w = ababa автомат из примера 3.3, а, может сделать следующую последовательность тактов:

(1, ababa) (1, baba) (1, aba) (2, ba) (3, a) (4, e).

Состояние 4 является заключительным, следовательно, цепочка w допускается этим автоматом.

При анализе цепочки w = ababab автомат из примера 3.3, б, должен сделать следующую последовательность тактов:

(1, ababab) (2, babab) (7, abab) (8, bab) (7, ab) (8, b) (7, e).

Так как состояние 7 не является заключительным, цепочка w не допускается этим автоматом.