Лекция 6.Трансляторы автоматных языков, регулярные

advertisement
Лекция 6
Трансляторы автоматных
языков, регулярные множества
и выражений
Основной операцией, выполняемой над
языками программирования, является
их трансляция — сопоставление каждой
цепочке языка некоторого выхода.
Этот выход может быть эквивалентной
программой на языке ассемблера (в
этом случае транслятор называется
компилятором).
Если же выход программы
представляет непосредственно тот
результат, который предполагается
получить при выполнении исходной
программы (и тогда транслятор
называется интерпретатором).
Синтаксисом языка называются
правила построения предложений
языка. Семантикой языка называются
правила интерпретации предложений
языка, то есть правила
сопоставления им значений из
некоторого (произвольного)
множества значений.
Конечный автомат, транслирующий язык L8 и
синтаксическая диаграмма с семантическими
операциями для трансляции L8
Результатом трансляции этих
предложений должно быть число во
внутреннем машинном представлении.
Регулярные множества
Класс множеств цепочек над конечным
словарем, которые очень легко описать
формулами некоторого вида. Эти
множества называются регулярными.
Пусть V1 и V2 — множества цепочек.
Определим три операции
на этих множествах.
• 1. Объединение: V1 V2 = { α|α∈
V1}или α ∈ V2
• 2. Конкатенация (произведение,
склеивание): Vl*V2 = {αβ| α∈ V1, β ∈
V2} Знак операции конкатенации обычно
опускается.
V1 = {abc, Ьа}, V2 = (b, cb}. VIV2 ={abcb,
abccb, bab, bacb}.
•
3. Итерация: V* = V°V1  V2  ... =
α=0Vn
Пример: V = {a, bc}, V* = {ɛ, a, bc, aa, abc,
bcbc, bca, aaa, aabc,...}.
Класс регулярных множеств над
конечным словарем V определяется так:
• 1.Ø — регулярное множество;
• 2.{ɛ} — регулярное множество;
• 3.(a∈ V){a} — регулярное множество; 4Если
S и Т — регулярные множества, то
регулярны:
• объединение ST;
• конкатенация ST
• итерация S* и Т*.
• Если множество не может быть построено
конечным числом применения правил 1-4, то
оно нерегулярно.
Примеры регулярных множеств: {ab,
ba}* {aa}; {b}({c}u{d, ab}*). Примеры
нерегулярных множеств: {anbn| n > 0};
{α| в цепочке α количества вхождений
символов а и b совпадают}
Регулярные выражения
•
•
•
•
•
•
•
Класс регулярных выражений над конечным
словарем V определяется так:
1.Ø и ɛ — регулярные выражения;
2 (a∈V)a — регулярное выражение;
3. Если R1 и R2 — регулярные выражения, то
регулярными выражениями являются:
их сумма R1+R2;
их произведение R1R2;
их итерация R1* и R2*.
4. Если выражение не построено конечным числом
применения правил 1—3, то оно не является
регулярным.
Для уменьшения числа скобок,
используются приоритеты операций:
1. итерация
2. произведение
3. сложение
Пусть R^ — регулярное множество,
соответствующее регулярному
выражению R.
• 1.Если R = 0, то R^=Ø.
•
•
•
•
•
2.Если R=ɛ, то R^={ɛ}.
3.Если R = а, то R^={а}.
4.EcлиR=Rl+R2,тo R^=Rl^R2^.
5 EcлиR=Rl•R2,тoR^=Rl^ R2^.
6 EслиR=Rl*,тoR^=Rl^*.
Примеры регулярных выражений и
соответствующих им языков
Регулярное выражение Соответствующий язык
Ьа*
a*ba*ba*
Все цепочки, начинающиеся с Ь, за
которым следует произвольное число
символов а
Все цепочки из а и Ь, содержащие
ровно два вхождения b
Регулярное
выражение
Соответствующий язык
(a+bb)*
Все цепочки из а и Ь, в которые символы b входят только
парами
(a+b)*(aa+bb)(a+b)*
Все цепочки из а и Ь, содержащие хотя бы одну пару рядом
стоящих а или b
(0+1)*11001(0+1)*
Все цепочки из 0 и 1, содержащие подцепочку 11001
a(a+b)*b
Все цепочки из а и Ь, начинающиеся символом а и
заканчивающиеся символом b
Для любых регулярных
выражений R, S и Т справедливо:
•
1.R+S= S+R; R+R=R; (R+S)+T R+(S+T); Ø+R = R;
• 2. Rɛ = ɛR = R; (RS)T = R(ST); ØR = RØ
=Ø; но в общем случае RS≠SR;
• 3.R(S+T)= RS+RT; (S+T)R = SR+TR;
• 4. R *=ɛ+R+R2+R3+ .. +RkR *; RR *=R *R;
R(SR) * = (RS) *R;
• 5.R+= R+R2+R3+. ; R*R= RR*; R++ɛ = R*.
b (b + аа*Ь) = b (ɛb + аа*b) =b(ɛ + аа*)b
= ba*b. Отсюда b (b + aa*b)= ba*b,
(Теорема Клини.) Классы регулярных
множеств и автоматных языков
совпадают, то есть ΛА = ΛR.
Каждый автоматный язык может быть
задан формулой (регулярным
выражением) и каждое регулярное
множество может быть распознано
конечным автоматом.
Каждый автоматный язык является
регулярным множеством, ΛА⊆ ΛR
Граф переходов с одной начальной и
одной заключительной вершинами
С графом переходов, представленным в
нормализованной форме, могут быть
выполнены две операции редукции —
редукция ребра и редукция вершины —
с сохранением допускаемого этим
графом переходов языка
Каждое регулярное множество
является автоматным языком: ΛА⊆
ΛR
Для каждого регулярного выражения R
может быть построен конечный автомат
AR (возможно, недетерминированный),
распознающий язык, задаваемый R
Пример применения регулярных
выражений: построение лексических
анализаторов алгоритмических языков
Лексемой называется минимальная
структурная единица языка, имеющая
смысл. Символ не является лексемой.
Символ «:» не имеет смысла в языке
Pascal, он может встречаться только
совместно с символом «=», и эта пара
имеет смысл «операция присваивания».
Описания лексем языка
и их семантики
Программа
Построения
Автомата
По регулярному
выражению
Входной поток
символов
Таблица автомата
Интерпретатор конечного
автомата
Лексический анализатор
Выходной
поток лексем
Download