Справочник от Автор24
Поделись лекцией за скидку на Автор24

Языки и их представления

  • 👀 230 просмотров
  • 📌 161 загрузка
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Языки и их представления» pdf
Языки и их представления Цепочки символов α и β равны (α = β), если они имеют один и тот же состав символов, одно и то же их количество и одинаковый порядок следования символов в цепочке. Количество символов в цепочке определяет её длину. Длина цепочки α обозначается как | α |. ПРИМЕР Для цепочки abbba префиксом является любая цепочка из множества L1 = {e, a, ab, abb, abbb, abbba}, суффиксом является любая цепочка из множества L2 = {e, a, ba, bba, bbba, abbba}, подцепочкой является любая цепочка из множества L1 U L2. Длиной цепочки w (обозначается |w|) называется число символов в ней. Например, |abababa| = 7, а |e| = 0. Язык в алфавите V - это некоторое множество цепочек в алфавите V Пример Пусть дан алфавит V = {a, b}. Вот некоторые языки в алфавите V : L1 = Ø - пустой язык; L2 = {e} - язык, содержащий только пустую цепочку (заметим, что L1 и L2 - различные языки); L3 = {e, a, b, aa, ab, ba, bb} - язык, содержащий цепочки из a и b, длина которых не превосходит 2; L4 - язык, включающий всевозможные цепочки из a и b, содержащие четное число a и четное число b; L5 = {an2 |n > 0} - язык цепочек из a, длины которых представляют собой квадраты натуральных чисел. Определения Если V – некоторый алфавит, то: V+ – множество всех цепочек над алфавитом V без пустой цепочки; V* – множество всех цепочек над алфавитом V, включая пустую цепочку. Языком L над алфавитом V (L (V)) называется некоторое счётное под-множество цепочек конечной длины из множества всех цепочек над алфавитом V. Операции над цепочками символов • • • • • Конкатенация Замена (подстановка ) обращение итерация Регулярные множества Пусть T - конечный алфавит. Регулярное множество в алфавите T определяется рекурсивно следующим образом : 1.{}∅(пустое множество) - регулярное множество в алфавите T; 2.{a}-регулярное множество в алфавите T для каждого a∈T ; 3.{e}-регулярное множество в алфавите T (e-пустая цепочка); 4.Если P и Q - регулярные множества в алфавите T, то таковы же и множества ● a) P∪Q (объединение), ● б) PQ(конкатенация, т.е. множество pq|p∈P, q∈Q), ● в) P*(итерация):P*={e}PPPPPP... ;(замыкание Клини) 5. Ничто другое не является регулярным множеством в алфавите T. Регулярные выражения Регулярное выражение в алфавите T и обозначаемое им регулярное множество в алфавите T определяются рекурсивно следующим образом: ∅ – регулярное выражение, обозначающее множество ∅; e – регулярное выражение, обозначающее множество {e}; a – регулярное выражение, обозначающее множество {a}; если p и q – регулярные выражения, обозначающие регулярные множества P и Q соответственно, то (а) (p|q) – регулярное выражение, обозначающее регулярное множество P ∪Q, (б) (pq) – регулярное выражение, обозначающее регулярное мно- жество P Q, (в) (p ) – регулярное выражение, обозначающее регулярное множество P ; ∗ ∗ Допущение Мы будем опускать лишние скобки в регулярных выражениях, договорившись о том, что операция итерации имеет наивысший приоритет, затем идет операции конкатенации, наконец, операция объединения имеет наименьший приоритет. Кроме того, мы будем пользоваться записью p+ для обозначения pp∗. Таким образом, запись (a|((ba)(a∗))) эквивалентна a|ba+. Наконец, мы будем использовать запись L(r) для регулярного множества, обозначаемого регулярным выражением r. Пример а) a(e|a)|b – обозначает множество {a, b, aa}; б) a(a|b)∗– обозначает множество всевозможных цепочек, состоящих из a и b, начинающихся с a; в) (a|b)∗(a|b)(a|b)∗– обозначает множество всех непустых цепочек, состоя+ щих из a и b, т.е. множество {a, b} ; г) ((0|1)(0|1)(0|1))∗– обозначает множество всех цепочек, состоящих из нулей и единиц, длины которых делятся на 3. Лемма. Пусть p, q и r - регулярные выражения. Тогда справедливы следующие соотношения: p|q = q|p ; ● {*}∅* = e ; ● p|(q|r) = (p|q)|r ; ● p(qr) = (pq)r ; ● p(q|r) = pq|pr ; ● (p|q)r = pr|qr ; ● pe = ep = p ; ● ∅p = p∅ = ∅ ; ● p* = p|p* ; ● (p*)* = p* ; ● p|p = p ; ● p|∅ = p ; ● Регулярные выражения для множества идентификаторов Letter = a | b| c| d| ...|x|y|z| Digit=0|1|...| 9 Identifier = Letter(Letter | Digit)* Язык можно определить тремя способами 1.перечислением всех допустимых цепочек языка; 2.указанием способа порождения цепочек языка (заданием грамматики языка); 3.определением метода распознавания цепочек языка. Порождающая грамматика G ● ● ● ● ● это четверка (VT, VN, P, S), где VT - алфавит терминальных символов (терминалов), VN - алфавит нетерминальных символов (нетерминалов), не пересекающийся с VT, P - конечное подмножество множества (VT Ս VN)+ ´ (VT Ս VN)*; элемент (a, b) множества P называется правилом вывода и записывается в виде a -> b, S - начальный символ (цель) грамматики, S ϵ VN. Язык, заданный грамматикой G, обозначается как L (G). Две грамматики, G и G', называются эквивалентными, если они определяют один и тот же язык: L (G) = L (G'). Две грамматики, G и G', называются почти эквивалент-ными, если заданные ими языки различаются не более чем на пустую цепочку символов: L (G) {ε} = L (G') {ε}. α → β1, α → β2, …, α → βn α → β1 | β2 | … | βn форма Бэкуса-Наура (БНФ) G ({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, –, +}, {<число>, <чс>, <цифра>}, Р, <число>) Р: <число> → <чс> | +<чс> | –<чс> <чс> → <цифра> | <чс><цифра> <цифра> → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 Грамматика для языка целых десятичных чисел со знаком G' ({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, –, +}, {S, T, F}, Р, S) Р: S → Т | +Т | –Т Т → F | TF F→0|l|2|3|4|5|6|7|8|9 Пример ● ● ● ● ● Грамматика G = ({S, B, C}, {a, b, c}, P, S), где P = {S →aSBC, S → aBC, CB → BC, aB → ab, bB → bb, bC → bc, cC→ cc}, порождает язык L(G) = {anbncn|n > 0}. Действительно, применяем n- 1 раз правило 1 и получаем an1S(BC)n-1, затем один раз правило 2 и получаем an(BC)n, затем n(n- 1)/2 раз правило 3 и получаем anBnCn. Затем используем правило 4 и получаем anbBn-1Cn. Затем применяем n- 1 раз правило 5 и получаем anbnCn. Затем применяем правило 6 и n - 1 раз правило 7 и получаем anbncn. Можно показать, что язык L(G) состоит из цепочек только такого вида. Классификация грамматик по Хомскому Тип 0: G (VT, VN, P, S), V = VN VT, правила имеют вид α → β, где α V+, βV*. Тип 1: контекстно-зависимые (КЗ) и неукорачивающие грамматики КЗ G (VT, VN, P, S), V = VN VT, правила вида α1Аα2 → α1βα2, где α1,α2 ∈V*, А∈ VN, β ∈V+. G (VT, VN, P, S), V = VN VT, имеют правила вида: α → β, где α, β V+, |β| ≥ |α|. Классификация грамматик по Хомскому Тип 2: контекстно-свободные (КС) грамматики (НКС) G (VT, VN, P, S), V = VN VT, имеют правила вида А → β, где А ∈VN, β∈ V+ (УКС) G (VT, N, P, S), V = VN VT, правила которых могут иметь вид: А →β, где А∈VN, β∈ V*. Классификация грамматик по Хомскому Тип 3: регулярные грамматики: леволинейные и праволинейные. Леволинейные G (VT, VN, P, S), V = VN VT, могут иметь правила двух видов: А → Bγ или А → γ, где А, В∈ VN, γ∈ VT*. Праволинейные G (VT, VN, P, S), V = VN VT, могут иметь правила тоже двух видов: А → γВ или А → γ, где А, В∈ VN, γ ∈VT*. Сентенциальная форма грамматики G (VT, VN, P, S), V = VT U VN, если она выводима из целевого символа грамматики S: S ═>* α. Если цепочка α ∈ VT* получена в результате законченного вывода, то она называется конечной сентенциальной формой. G' ({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, –, +}, {S, T, F}, Р, S) Р: S → Т | +Т | –Т Т → F | TF F→0|l|2|3|4|5|6|7|8|9 S ═>–T ═>–TF═> –TFF═> –FFF═> –4FF═> –47F═> –479 2) S═> T═> TF═> T8═> F8═> 18 3) T═> TF═> T0═> TF0═> T50═> F50═> 350 4) F ═>5 Пример для цепочки a+b+a G ({a, b, +}, {S, T}, P, S) P: S → T | T+S; T→a|b можно построить выводы: 1) S ═> T+S ═>T+T+S ═>T+T+T ═> a+T+T ═> a+b+T ═> a+b+a 2) S ═>T+S ═> a+S ═> a+T+S ═> a+b+S ═> a+b+T ═> a+b+a 3) S ═> T+S ═> T+T+S ═> T+T+T ═>T+T+a ═> T+b+a ═> a+b+a Пример праволинейной грамматики ● G2 = ({S,}, {0,1}, P, S), где ● P: ● S → 0S; ● S → 1S; ● S → ε, Пример КС-грамматики ● G3 = ({E, T, F}, {a, +, *, (,)}, P, E) где ● P: ● E →T ● E→E+T ● T→F ● T→T*F ● F → (E) ● F → a. Пример КЗ грамматики ● G4 = ({B, C, S}, {a, b, c}, P, S) где ● P: ● 1. S → aSBC; ● 2. S → abc; ● 3. CB → BC; ● 4. bB → bb; ● 5. bC → bc; ● 6. cC → сc, Деревом вывода грамматики G (VT, VN, P, S) называется 1.каждая вершина дерева обозначается символом грамматики А∈(VT U VN U {ε}); 2.корнем дерева является вершина, обозначенная целевым символом грамматики – S; 3.листьями дерева (концевыми вершинами) являются вершины, обозна-ченные терминальными символами грамматики или символом пустой цепочки ε; 4.если некоторый узел дерева обозначен нетерминальным символом А∈ VN, а связанные с ним узлы – символами b1, b2, …, bn; n > 0 для любого i, 0 ≤ i≤ n: bi ∈(VT U VN U {ε}), то в грамматике G (VT, VN, P, S) существует правило A → b1 | b2 | … | bn ∈Р Примеры деревьев вывода для грамматики целых десятичных чисел со знаком S → if b then S else S | if b then S | a if b then if b then a else a: 1) S =>if b then S else S =>if b then if b then S else S=> if b then if b then a else S => if b then if b then a else a 2) S=> if b then S=> if b then if b then S else S=> if b then if b then a else S=> if b then if b then a else a первая из них – if b then (if b then a) else a, вторая – if b then (if b then a else a). Правила неоднозначности 1) А → АА | α 2) А → АαА | β 3) А → αА | Aβ | γ 4) А → αА | αAβA | γ Здесь A VN; α, β, γ (VN VT)*. Алгоритм удаления бесплодных символов Вход: КС-грамматика G (VT, VN, P, S). Выход: КС-грамматика G (VT, VN, P, S), не содержащая бесплодных сим-волов, для которой L (G) = L (G). Метод: Рекурсивно строим множества N0, N1, ..., Nm 1. N0 =∅ , i = 1. 2. Ni = {A | (A → α) ∈P и α ∈(Ni–1 VT)*}U Ni–1. 3. Если Ni ≠ Ni–1, то i = i + 1 и переходим к шагу 2, иначе VN = Ni; P состоит из правил множества P, содержащих только символы из VN U VT; G (VT, VN, P, S). Пример Дана грамматика G ({a, b, c}, {A, B, C, D, E, F, G, S}, P, S) с правилами P: S aAB | E A aA | bB B ACb | b C A | bA | cC | aE E cE | aE | Eb | ED | FG D a | c | Fb F BC | EC | AC G Ga | Gb G ({a, b, c}, {A, B, C, D, F, S}, P, S) P: S aAB A aA | bB B ACb | b C A | bA | cC D a | c | Fb F BC | AC Алгоритм удаления недостижимых символов Вход: КС-грамматика G (VT, VN, P, S) Выход: КС-грамматика G' (VT', VN', P', S), не содержащая недостижимых символов, для которой L (G) = L (G). Метод: 1. V0 = {S}; i = 1. 2. Vi = {x | x ∈(VT VN), в P есть A → αхβ и A∈ Vi–1, α, β ∈(VT UVN)*} U Vi–1. 3. Если Vi≠ Vi–1, то i = i + 1 и переходим к шагу 2, иначе VN = Vi ∩VN; VT = Vi∩ VT; P состоит из правил множества P, содержащих только сим-волы из Vi; G' (VT', VN', P', S). Пример G ({a, b, c}, {A, B, C, D, F, S}, P, S) P’: S aAB Gʺ ({a, b, c}, {A, B, C, S}, Pʺ, S)Pʺ: A aA | bB B ACb | b C A | bA | cC D a | c | Fb F BC | AC S aAB A aA | bB B ACb | b C A | bA | cC Алгоритм устранения ε-правил: Вход: КС-грамматика G (VT, VN, P, S). Выход: КС-грамматика G '(VT, VN', P', S), не содержащая ε-правил, для которой L (G) = L (G). Метод: 1. W0 = {A: (A→ε )∈ P}, i = 1. 2. Wi = Wi–1 {A: (A ) P, Wi–1}*. 3. Если Wi ≠Wi–1, i = i + 1, то перейти к шагу 2, иначе перейти к шагу 4. 4. VN' = VN, VT' = VT, в P' входят все правила из Р, кроме правил вида A →ε. 5. Если A →α0B1α1B2 … Bkαk ∈P, где k≥ 0, Bj ∈Wi и ни один из сим-волов цепочек i не содержит символов из Wi, то включить в Р все правила вида A→ α0X1α1X2 … Xkαk, где Xj = Bj или X = ε. 6. Если S ∈Wi , то значит ε∈ L (G), и тогда в VN добавляется новый символ S', который становится целевым символом грамматики, а в Р' добавляются правила: S'→ε | S. Пример Дана грамматика G ({a, b, c}, {A, B, C, S}, P, S) с правилами Р: S AaB | aB | cC A AB | a | b | B B Ba | C AB | c VN' = {A, B, C, S}, VT' = {a, b, c} P': S AaB | aB | cC A AB | a | b | B B Ba C AB | c Алгоритм устранения цепных правил Для всех нетерминальных символов повторять шаги 2-4, затем перейти к 5. 1. NX0 = {X}, i = 1. 2. NXi = NХi–1 U{B: (A→ B)∈ P, A∈ NХi–1}. Если NXi ≠ NХi–1 , то i = i + 1 и перейти к 3, иначе NX= NХi–1 – {Х} и продол-жить цикл по шагу 1. VN' = VN, VT' = VT, в P' входят все правила из Р, кроме правил вида A →B, S' = S. Для всех правил (B→ α)∈ P', если В∈ NА, В≠ А, то в P' добавляются пра-вила вида A→α . Алгоритм приведения грамматики: 1) обнаруживаются и удаляются все бесплодные нетерминалы; 2) обнаруживаются и удаляются все недостижимые символы; 3) удаляются правила с пустыми цепочками (-правила); 4) удаляются цепные правила. Удаление символов сопровождается удалением правил вывода, содержащих эти символы. Замечание: шаги преобразования должны выполняться в указанном порядке! A=> +α Aβ, где α,β (VT U VN)*. Если α=ε и β≠ε Вход: КС-грамматика G (VT, VN, P, S) Выход: КС-грамматика G' (VT', VN', P', S), не содержащая левой рекурсии, для которой L (G) = L (G'). Метод: 1. VN = {A1, A2, …, An}, i = 1 2. Правила для Ai. Если в правилах нет левой рекурсии, то они записываются в P' без изменений, а Ai добавляется в VN'. Иначе правила для Аi записываются в виде Ai Ai1 | Ai2 | … | Aim | 1 | 2 | … | p , где ни одна из цепочек j не начинается с Ak таких, что k i. Вместо этих правил в P записываются правила вида: Ai 1 | 2 | … | p | 1Ai | 2Ai | … | pAi Ai 1 |2 |…|m | 1Ai | 2Ai | … | mAi Аi и Аi включаются в VN. 3. Если i = n, то G построена, перейти к 6, иначе i = i + 1, j = 1, перейти к 4. 4. Для Ai в P заменить все правила вида Ai-> Aj, где (VT VN)*, на правила вида Ai 1α | 2 α | … | αm, причём Aj 1 | 2 | … | m – все правила для Aj. 5. Если j = i – 1, перейти к 2, иначе j = j + 1 и перейти к 4. 6. Целевым символом грамматики G становится Ak, соответствующий сим-волу S исходной грамматики.
«Языки и их представления» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Помощь с рефератом от нейросети
Написать ИИ
Получи помощь с рефератом от ИИ-шки
ИИ ответит за 2 минуты

Тебе могут подойти лекции

Смотреть все 588 лекций
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot