spoPresentation2
.pdfЛексический анализ и регулярные грамматики
Если L1 и L2 – регулярные языки, то замыкание Клини L1*, сцепление L1L2 и объединение L1 L2 – тоже регулярные
языки
Теорема Клини. Каждому регулярному языку из А* соответствует регулярное
выражение над множеством А
101
Лемма о разрастании регулярного языка
Лемма о разрастании языка (лемма о накачке) Пусть L – регулярный язык:
D L, р 1 > 0, |D|tp, G, E, J V* | D = GEJ, 0<|E|dp, D’ = GE iJ, i 1t0, D’ L.
В любой достаточно длинной строке регулярного языка всегда можно найти непустую подстроку, повторение которой произвольное кол-во раз порождает новые строки того же языка
102
Лемма о разрастании регулярного языка
Если для данного языка условия леммы не выполняются, то язык не регулярный
Если выполняются, то он регулярный
L = {0m1n | m,nt0} регулярный
L = {0n1n | nt1} нерегулярный
103
Разрешимые проблемы регулярных языков
Проблема эквивалентности. Даны два регулярных языка L1(A) и L2(A). Существует алгоритм проверки их на эквивалентность
Проблема принадлежности цепочки языку. Дан регулярный язык L(A) и цепочка D А*.
Существует алгоритм проверки цепочки на принадлежность языку
Проблема пустоты языка. Дан регулярный язык L(A). Существует алгоритм проверки, является ли этот язык пустым, т.е.
существует ли хотя бы одна цепочка DzO,
D L(A) |
104 |
Способы задания регулярных языков
Регулярные (праволинейные и леволинейные) грамматики
конечные автоматы
регулярные множества (регулярные выражения)
105
Преобразование регулярной грамматики к автоматному виду
Дано: регулярная грамматика G(T,N,P,S)
Получить: почти эквивалентную автоматную грамматику G’(T’,N’,P’,S’)
Дополнительные условия: будем использовать леволинейную грамматику
1. N’ = N, T’ = T, S’ = S. Терминальные и нетерминальные словари переносятся в новую грамматику без изменений, аксиома сохраняется
106
Преобразование регулярной грамматики к автоматному виду
2. P’ = { p | А o Вa, либо А o a, A, B N, a T, p P }. Правила этого вида переносятся в G’
без изменений
3. P’ = P’ { p’ | Ak o Ak-1ak, k = 1,2,…,n, где
An=A, A0 = X, p P | А o Xa1a2…an, n > 1, A N, X=O либо X N, ai T, i = 1,2,…,n }, N’ = N’
{ A1, A2, …, An-1 }. Для правил с терминальной цепочкой в правой части длиной n добавляется n-1 нетерминал и n новых правил
107
Преобразование регулярной грамматики к автоматному виду
4. P’ = P’ { p | А o B, либо А o O, A, B N , p
P } цепные и O-правила переносятся в G’
без изменений
5. P’ = P’ { p | { AoC | AoCa | Aoa | AoO },p’ P’ | АoB, и p’’ P’ | { BoC | BoCa | Boa | BoO }, A,B,C N’, a T’ } \ { p | АoB }.
Цепное правило заменяется “синонимами” и удаляется
108
Преобразование регулярной грамматики к автоматному виду
6. P’ = P’ { p | { BoO | Boa }, p’ P’ | АoO, иp’’ P’ | { BoA | BoAa }, A,B, N’, A z S’, a T’
} \ { p | АoO }. O -правило заменяется
“синонимами” и удаляется
7. Если p P’ | { АoB, АoO}, вернуться к
шагу 5
109
Преобразование регулярной грамматики к автоматному виду
Пример. Грамматика описывает строковые выражения, соответствующие комментариям в С. G = ( { /,*,a,p,m }, { F,C,K }, P, F ). Здесь p - символ перевода строки (chr(13)), m - символ возврата каретки
(chr(10)), a – любой символ, кроме /,*,p,m.
Парой p,m в текстовых файлах
отмечается конец строки.
P:F o C*/ | Kpm
C o /* | C/ | C* | Ca | Cpm K o // | K/ | K* | Ka
110