6bc7feaef1e2a909526a0a8d7b4b1d52.ppt
- Количество слайдов: 21
LR(K) - ГРАММАТИКИ 1. Понятие LR-грамматики 2. Метод разбора 3. Пример восходящего разбора 4. Сдвиг и свертка 5. Построение таблицы разбора 6. Алгоритм построения Лекция: LR(0) таблицы разбора - построение таблицы - заполнение таблицы - преобразование таблицы - пример LR(0) таблицы разбора 7. Алгоритм построения SLR(1) таблицы разбора - пример SLR(1) таблицы разбора 8. LALR(1)-грамматики - пример LALR(1) таблицы разбора Заключение Практические задания LR-грамматики. Построение LR-таблиц разбора.
LR(K) - ГРАММАТИКИ 1. Понятие LR-грамматики 2. Метод разбора 3. Пример восходящего разбора 4. Сдвиг и свертка 5. Построение таблицы разбора 6. Алгоритм построения LR(0) таблицы разбора - построение таблицы - заполнение таблицы - преобразование таблицы - пример LR(0) таблицы разбора 7. Алгоритм построения SLR(1) таблицы разбора - пример SLR(1) таблицы разбора 8. LALR(1)-грамматики - пример LALR(1) таблицы разбора Заключение Практические задания Название “ LR-грамматики ” указывает на то, что для нее существует МП автомат, который • начинает просмотр входной цепочки слева направо (Left); • выбирает основу для замены на соответствующий нетерминал, когда добирается до самого правого (Rightmost) ее символа; • может обнаружить основу просмотром k-го количества символов, расположенных правее последнего входного символа основы. На практике чаще всего к=1 (LR(1) грамматика) или к=0 (LR(0) грамматика).
LR(K) - ГРАММАТИКИ 1. Понятие LR-грамматики 2. Метод разбора 3. Пример восходящего разбора 4. Сдвиг и свертка 5. Построение таблицы разбора 6. Алгоритм построения LR(0) таблицы разбора LR-грамматики основаны на восходящем методе разбора, то есть разборе снизу-вверх, при котором промежуточные выводы перемещаются по дереву по направлению к корню. При восходящем методе разбора: 1) все правила грамматики обязательно нумеруются; 2) рассматривается пополненная грамматика , то есть грамматика, для которой из аксиомы выводится только одна альтернатива. - построение таблицы - заполнение таблицы - преобразование таблицы - пример LR(0) таблицы разбора 7. Алгоритм построения SLR(1) таблицы разбора - пример SLR(1) таблицы разбора 8. LALR(1)-грамматики - пример LALR(1) таблицы разбора Заключение Практические задания Суть всех восходящих методов разбора заключается в следующем: сначала в стек символ за символом помещают входную цепочку, до тех пор, пока в стеке не будет находиться основа. Символы основы извлекаются из стека, заменяются на соответствующий нетерминал. Процесс поиска основы и замены ее на нетерминал продолжается до тех пор, пока в стеке не окажется аксиома, а во входной цепочке - символ конца.
LR(K) - ГРАММАТИКИ 1. Понятие LR-грамматики 2. Метод разбора 3. Пример восходящего разбора 4. Сдвиг и свертка 5. Построение таблицы разбора 6. Алгоритм построения LR(0) таблицы разбора - построение таблицы - заполнение таблицы - преобразование таблицы - пример LR(0) таблицы разбора 7. Алгоритм построения SLR(1) таблицы разбора - пример SLR(1) таблицы разбора 8. LALR(1)-грамматики - пример LALR(1) таблицы разбора Заключение Практические задания 1 шаг. В стек помещается первый символ предложения real. 2 шаг. В стек помещается второй символ А. 3 шаг. Происходит замена символа А на нетерминал
LR(K) - ГРАММАТИКИ 1. Понятие LR-грамматики 2. Метод разбора 3. Пример восходящего разбора 4. Сдвиг и свертка 5. Построение таблицы разбора 6. Алгоритм построения LR(0) таблицы разбора - построение таблицы - заполнение таблицы - преобразование таблицы - пример LR(0) таблицы разбора 7. Алгоритм построения SLR(1) таблицы разбора - пример SLR(1) таблицы разбора 8. LALR(1)-грамматики - пример LALR(1) таблицы разбора Заключение Практические задания В данном методе восходящего разбора использовались две операции: • 1 операция – это сдвиг. Она состоит в том, что в стек заносится символ входной цепочки, и параллельно с этим происходит сдвиг по входной цепочке. • 2 операция – операция свертки. Она заключается в следующем: из верхушки стека достаются символы, которые сворачиваются по некоторому правилу. Основной проблемой восходящего разбора является детерминированность, то есть на каждом шаге алгоритма хотелось бы знать, что производить сдвиг или свертку и по какому правилу. Говорят о конфликте сдвиг-свертка, если в некоторый момент разбора для одной цепочки допустимы и сдвиг, и свертка. И говорят о конфликте свертка-свертка, если в некоторый момент разбора допустимы свертки по различным правилам.
LR(K) - ГРАММАТИКИ 1. Понятие LR-грамматики 2. Метод разбора 3. Пример восходящего разбора 4. Сдвиг и свертка 5. Построение таблицы разбора 6. Алгоритм построения LR(0) таблицы разбора - построение таблицы - заполнение таблицы - преобразование таблицы - пример LR(0) таблицы разбора Основная идея. При построении дерева разбора предложения языка, всегда однозначно можно установить соответствие вершинам дерева и грамматическим вхождениям. Hапример, в грамматике 1. S → a b 2. S → c 3. A → b 4. A → b 5. B → a 6. B → c Разбор предложения aabcbb можно представить деревом. Каждой вершине в соответствие поставлено грамматическое вхождение. 7. Алгоритм построения SLR(1) таблицы разбора - пример SLR(1) таблицы разбора 8. LALR(1)-грамматики - пример LALR(1) таблицы разбора Заключение Практические задания Далее продолжение…
LR(K) - ГРАММАТИКИ 1. Понятие LR-грамматики 2. Метод разбора Переход по щелчку 3. Пример восходящего разбора 4. Сдвиг и свертка 5. Построение таблицы 6. Алгоритм построения Грамматическим вхождением символа называется позиция этого символа в правой части правила. Грамматические вхождения обозначаются индексами: номер правила, номер позиции символа в этом правиле, LR(0) таблицы разбора например: разбора - построение таблицы - заполнение таблицы 5. А → a b a c e c - преобразование таблицы - пример LR(0) таблицы разбора 7. Алгоритм построения SLR(1) таблицы разбора - пример SLR(1) таблицы разбора 8. LALR(1)-грамматики - пример LALR(1) таблицы разбора Заключение Практические задания a 51 a 53 Символ а: 5 правило, 3 позиция b 52 Символ b: 5 правило, 2 позиция Символ а: 5 правило, 1 позиция
LR(K) - ГРАММАТИКИ 1. Понятие LR-грамматики 2. Метод разбора Переход по щелчку 3. Пример восходящего разбора 4. Сдвиг и свертка 5. Построение таблицы разбора 6. Алгоритм построения 1. S → a b 2. S → c 3. A → b 4. A → b 5. B → a S a b LR(0) таблицы разбора - построение таблицы - заполнение таблицы b - преобразование таблицы - пример LR(0) таблицы разбора a 7. Алгоритм построения SLR(1) таблицы разбора - пример SLR(1) таблицы разбора 8. LALR(1)-грамматики - пример LALR(1) таблицы разбора Заключение Практические задания b a a b c b b Рассматриваем правило А→b и Рассматриваем правило S→ab, Рассматриваем правило A→b и Рассматриваем правило S→c и Рассматриваем правило B→a и выделяем терминал b выделяем в предложении терминалы a и b выделяем терминал с выделяем терминал а c
LR(K) - ГРАММАТИКИ 1. Понятие LR-грамматики 2. Метод разбора 3. Пример восходящего разбора 4. Сдвиг и свертка 5. Построение таблицы разбора 6. Алгоритм построения LR(0) таблицы разбора - построение таблицы - заполнение таблицы - преобразование таблицы - пример LR(0) таблицы разбора 7. Алгоритм построения SLR(1) таблицы разбора - пример SLR(1) таблицы разбора 8. LALR(1)-грамматики - пример LALR(1) таблицы разбора Заключение Практические задания При грамматическом разборе предложения языка, зная соответствие очередного рассматриваемого символа предложения грамматическому вхождению (т. е. правилу и позиции в этом правиле) можно определить, какой символ может быть следующим в предложении и соответствующее грамматическое вхождение. Поэтому можно определить МП-автомат и соответствующую таблицу разбора следующим образом: строки (состояния автомата) – помечаются грамматическими вхождениями, а столбцы - символами алфавита V (терминальными и нетерминальными). Hа пересечении строки грамматического вхождения и столбца допустимого входного символа ставится переход к следующему грамматическому вхождению или, если грамматическое вхождение соответствует последнему символу правила, то в строке ставится свертка. Перед определением алгоритма введем отношение, которое будем использовать в дальнейшем: Q <= Yj грам. вход. тогда и только тогда, когда: 1. существует Zj грам. вход. : найдется такое U: : =. . . QZi и Zi FIRST * Yj 2. если Q=S 0 (аксиома), то S 0 FIRST* Yj
LR(K) - ГРАММАТИКИ 1. Понятие LR-грамматики 2. Метод разбора 3. Пример восходящего разбора 4. Сдвиг и свертка 5. Построение таблицы разбора 6. Алгоритм построения LR(0) таблицы разбора - построение таблицы - заполнение таблицы - преобразование таблицы - пример LR(0) таблицы разбора 7. Алгоритм построения SLR(1) таблицы разбора - пример SLR(1) таблицы разбора 8. LALR(1)-грамматики - пример LALR(1) таблицы разбора Заключение Практические задания Строим таблицу: - столбцы соответствуют символам грамматики (Vt, Vn), - строки - грамматическим вхождениям. Причем, если грамматические вхождения неразличимы, т. е. А <= Yj и A <= Yi , то строится одна строка таблицы и помечается (Yi, Yj). Таблица строится и заполняется следующим образом:
LR(K) - ГРАММАТИКИ 1. Понятие LR-грамматики 2. Метод разбора 3. Пример восходящего Построение таблицы разбора 4. Сдвиг и свертка 5. Построение таблицы разбора 6. Алгоритм построения Первая строка таблицы соответствует а) пустому стеку б) началу разбора , т. е. входной символ - это первый возможный символ входной цепочки. LR(0) таблицы разбора - построение таблицы - заполнение таблицы - преобразование таблицы - пример LR(0) таблицы разбора 7. Алгоритм построения SLR(1) таблицы разбора - пример SLR(1) таблицы разбора 8. LALR(1)-грамматики - пример LALR(1) таблицы разбора Заключение Практические задания . S 1 Y S OK Yj . . . S FIRST * Yj Элементы в клетках таблицы - это грамматические вхождения. Причем S 0 - соответствует входному символу S. Следующие строки таблицы создаются таким образом – для каждого грамматического вхождения, взятого из предыдущей строки, создается строка, помеченная этим грамматическим вхождением.
LR(K) - ГРАММАТИКИ 1. Понятие LR-грамматики 2. Метод разбора 3. Пример восходящего разбора Заполнение таблицы 4. Сдвиг и свертка 5. Построение таблицы разбора 6. Алгоритм построения LR(0) таблицы разбора - построение таблицы - заполнение таблицы - преобразование таблицы - пример LR(0) таблицы разбора 7. Алгоритм построения SLR(1) таблицы разбора - пример SLR(1) таблицы разбора 8. LALR(1)-грамматики - пример LALR(1) таблицы разбора Заключение Практические задания Элементы строки при построении таблицы заполняются таким образом: символ. Пусть Q - грамматическое вхождение, которым помечена строка, Z - входной а) если Q не самый правый символ любого правила, то для любого Z, такого что Q <= Z - клетки строки таблицы заполняются соответствующими грамматическими вхождениями этих символов. б) если Q - самый правый символ правила L, эта ситуация соответствует свертке по правилу L. Во все клетки строки ставится свертка по правилу L.
LR(K) - ГРАММАТИКИ 1. Понятие LR-грамматики 2. Метод разбора Переход по щечку 3. Пример восходящего разбора Преобразование таблицы 4. Сдвиг и свертка Rn-свертка, где n-номер правила 5. Построение таблицы разбора 6. Алгоритм построения LR(0) таблицы разбора - построение таблицы - заполнение таблицы - преобразование таблицы a b a 11 a 5 b 3 c 6 A 1 Если таблица строится по этому алгоритму, то грамматика является LR(0). a 5 8. LALR(1)-грамматики - пример LALR(1) таблицы разбора Заключение Практические задания B 4 b 1 Название "LR(0) грамматика" указывает на то, что просмотр предложения происходит слева направо, любую основу можно обнаружить без просмотра входных b 1 R 1 R 1 R 1 символов, расположенных правее последнего. R 2 входного символа основы. c 2 R 2 R 2 R 4 - пример SLR(1) таблицы разбора B A 1 b 4 SLR(1) таблицы разбора A S 0 a 1 7. Алгоритм построения S Строки таблицы пронумеровать и заменить переход по грамматическому вхождению нач a 11 c 2 S 0 в клетках таблицы номером соответствующей строки. b 3 - пример LR(0) таблицы разбора c c 2 S 3 R 4 R 4 a 5 b 3 c 6 A 5 R 5 R 5 C 6 R 6 R 6 Обозначим Sn как сдвиг, Rn как свертка или редукция, где n – номер правила. S 3 LR(0)грамматиках свертка помещается во все клетки строки, R 3 R 3 R 3 В соответствующей B 4 b 4 окончанию правила. R 4 A 5 B 4 R 5 R 5 R 6 R 6
LR(K) - ГРАММАТИКИ 1. Понятие LR-грамматики 2. Метод разбора a 3. Пример восходящего b разбора 4. Сдвиг и свертка 5. Построение таблицы разбора 6. Алгоритм построения LR(0) таблицы разбора c S Пример B LR(0)Aтаблицы разбора 1. → b a. A S 2. → S c A 3. → b S A Bb 4. → 5. → a A B 6. → B c Рассматриваем S 2: Рассматриваем S 9: свертка. Рассматриваем S 10: свертка. Рассматриваем S 3: свертка. Рассматриваем S 6: Рассматриваем S 5: c 6: сдвиг S 4; b 3: сдвиг S 5; а 5: сдвиг S 6; В 4: сдвиг S 7; А 1: сдвиг S 8. Рассматриваем S 12: свертка. Рассматриваем S 11: свертка. Рассматриваем S 7: b 4 – сдвиг S 11. Рассматриваем S 8: b 1 – сдвиг S 9. Рассматриваем S 4: свертка. а 5: сдвиг S 6; b 3: сдвиг S 5; c 6: сдвиг S 4; B 4: сдвиг S 7; A 5: сдвиг S 12. а 1: сдвиг S 2; с2: сдвиг S 3; S 3: сдвиг S 10. а 1: сдвиг S 2; c 2: сдвиг S 3. Начнем преобразование Количество столбцов равно количеству терминалов и нетерминалов в правилах 7. Алгоритм построения SLR(1) таблицы разбора - пример SLR(1) таблицы разбора 8. LALR(1)-грамматики - пример LALR(1) таблицы разбора Заключение Практические задания а b c S A B S 2 a 1 c 2 S 3 ОК OK S 2 a 1 S 6 a 5 S 5 b 3 S 4 c 6 A 1 S 8 3 S 8 A 1 b 1 S 9 4 Рассматриваем терминал а 5: Рассматриваем нетерминал далее следует нетерминал S, А 5, переходим к правилу 3 в таблицу записываем (терминал b 3), к правилу 4 – первые терминальные Следующий символ а 1. следует нетерминал В 4 Рассматриваем нетерминал символы Заходим в А 1, переходим на 3 Рассматриваем нетерминал А 1: (переходим к правилу 6 – А 5: он является последним правило, первый терминал – далее идет терминал b 1. Рассматриваем терминал b 1: терминал с6). в правиле 5, поэтому – b 3, далее по 4 правилу в В 4 на он является последним в правиле Рассматриваем терминал с2: сертка. Рассматриваем терминал правило 5, терминал – а 5, на 1, поэтому – свертка. он является последним в правиле Рассматриваем терминал b 3: с6: он является последним в правило 6, терминал – с6. 2, поэтому – свертка. далее следует нетерминал S 3 Рассматриваем нетерминал правиле 6, поэтому – – поэтому рассматриваем 1 S 3, он является последним, Рассматриваем нетерминал В 4 свертка. правило (терминал а 1), 2 поэтому – свертка по 3 правилу. – далее следует терминал b 4. Рассматриваем терминал b 4: правило (терминал с2). он является последним в правиле 4, поэтому – свертка. нач 2 - заполнение таблицы - пример LR(0) таблицы разбора 1 - построение таблицы - преобразование таблицы Переход по щелчку b 1 S 9 R 1 R 1 5 S 3 c 2 R 2 R 2 6 b 3 S 5 a 1 S 2 c 2 S 3 S 10 S 3 7 S 3 S 10 R 3 R 3 8 S 7 B 4 b 4 S 11 9 S 11 b 4 R 4 R 4 10 S 6 a 5 S 5 b 3 c 6 S 4 S 12 A 5 B 4 S 7 11 S 12 A 5 R 5 R 5 12 S 4 с6 R 6 R 6 B 4 S 7 R 3 Далее разбор предложения на основе построенной таблицы …
LR(K) - ГРАММАТИКИ 1. Понятие LR-грамматики 2. Метод разбора a b 3. Пример восходящего Рассмотрим разбор предложения: нач разбора S 3 c 4. Сдвиг и свертка OK 5. Построение таблицы S 5 разбора 6. Алгоритм построения S 9 R 1 S A B aa b S A b A c b S 4 S 8 1. 2. R 1 S 7 b R 1 a В A a Заключение Практические задания S A B S 2 S 3 OK S 6 S 5 S 4 S 8 S 7 3 S 8 S 9 R 1 4 S 9 R 1 R 1 5 S 3 R 2 R 2 6 S 5 S 2 S 3 S 10 7 S 10 R 3 R 3 8 S 7 S 11 R 4 R 4 10 S 6 S 5 S 4 S 12 S 7 11 S 12 R 5 R 5 12 S 6 R 6 R 6 13 S 13 R 7 S 5 S 9 S 7 S 2 нач Заносим в 1 стек четвертый Заносим в 1 стек третий Заносим в 1 стек первый Символы S 5 и S 6 сворачиваются Символ с сворачивается в S 3 по R 4 Заносим в 1 стек второй R 4 R 4 Происходит сдвиг по правилу Сворачивается по правилу S→a. Ab Символы S 3 и S 5 сворачиваются Символы S 7 и S 11 сворачиваются символ с, во 2 – следующий символ b, во 2 – следующий символ а, во 2 – соответствующий в S 13 по правилу B → a. A правилу S → c В 1 стек заносим А, во 2 стек – S 8 А→Вb, в 1 стек заносится В 1 стек заносим b, во 2 стек – S 9 символ а, во 2 – следующий по S 10 в S 12 по правилу A → b. S в S 12 по правилу A → Bb после S 5 – S 3, соответствующий с после S 6 – S 5, соответствующий b ему S 2 S 4 после S 2 – S 6 S 12 S 7 cледующий b, а во 2 стек S 7 - пример SLR(1) таблицы разбора - пример LALR(1) таблицы разбора c S 2 - пример LR(0) таблицы разбора 8. LALR(1)-грамматики R 6 S 4 R 6 нач b 2 S 13 S 8 S 6 S 10 - преобразование таблицы SLR(1) таблицы разбора S 6 a 9 R 1 - построение таблицы S 2 - заполнение таблицы 7. Алгоритм построения R 4 S 11 R 4 1 S 3 c LR(0) таблицы разбора Переход по щелчку R 6 R 6 1. S a b 2. S c R 6 3. A b 4. A b 5. B a 6. B c R 7 R 3 R 5 R 7 Переходим к SLR(1)
LR(K) - ГРАММАТИКИ 1. Понятие LR-грамматики 2. Метод разбора 3. Пример восходящего разбора 4. Сдвиг и свертка 5. Построение таблицы разбора 6. Алгоритм построения LR(0) таблицы разбора - построение таблицы - заполнение таблицы - преобразование таблицы - пример LR(0) таблицы разбора 7. Алгоритм построения SLR(1) таблицы разбора - пример SLR(1) таблицы разбора 8. LALR(1)-грамматики - пример LALR(1) таблицы разбора Заключение Практические задания Алгоритм построения SLR(1)-таблицы: Если для грамматики невозможно построить LR(0) таблицу разбора, т. е. некоторые состояния получаются неадекватными, т. к. в строке необходимо разместить и сдвиг и свертку, переходят на следующий шаг, строят SLR(1)-таблицу разбора. SLR(1)-анализатор иначе называется анализатор с предварительным просмотром входного символа. Элементы строки при построении таблицы заполняются таким образом: Пусть Q - грамматическое вхождение, которым помечена строка, Z - входной символ. а) если Q не самый правый символ любого правила для любого Z: Q <= Z элементы таблицы соответствий входным символом удовлетворяется условием Z FIRST * Y заполняются соответствующими грамматическими вхождениями этих символов (т. е. отмечается номер правила); б) если Q - самое правое вхождение в правиле
LR(K) - ГРАММАТИКИ 1. Понятие LR-грамматики 2. Метод разбора 3. Пример восходящего разбора 4. Сдвиг и свертка 5. Построение таблицы разбора Переход по щечку Пример SLR(1) таблицы разбора Рассматриваем
LR(K) - ГРАММАТИКИ 1. Понятие LR-грамматики 2. Метод разбора Переход по щелчку 3. Пример восходящего Look ahead LR(1) – заглядывать вперед. разбора 4. Сдвиг и свертка Рассмотрим следующий пример: 5. Построение таблицы 1. else F; S T 2. E T 3. i ; T 4. F E E E 5. + i E 6. i разбора 6. Алгоритм построения LR(0) таблицы разбора - построение таблицы Рассмотрим правило S→T else F, заносим нетерминал Т, соответствующие Рассмотрим i 31 по правилу 3 – сдвиг «; » 32. ему по правилу 3 – терминал i 31, по правилу Рассмотрим i 61 – свертка. 2 – нетерминал Е 21 и соответствующие ему Е 51 и i 61 Попытаемся построить SLR(1) таблицу: - заполнение таблицы гр. вхожд. - преобразование таблицы - пример LR(0) таблицы разбора 1 нач 7. Алгоритм построения 2 … … T - пример SLR(1) таблицы разбора 8. LALR(1)-грамматики - пример LALR(1) таблицы разбора Заключение Практические задания ОК F E E 21, E 51 i «; » T 1 «; » 32, R 6 … … «+» else «#» i 31, i 61 SLR(1) таблицы разбора S … … R 6 … … … В строке (i 31, i 61) получаем неадекватность, конфликт свертка – сдвиг. Необходима дополнительная информация, для решения конфликта. Далее продолжение…
LR(K) - ГРАММАТИКИ 1. Понятие LR-грамматики 2. Метод разбора Переход по щелчку 3. Пример восходящего разбора 4. Сдвиг и свертка 5. Построение таблицы разбора 6. Алгоритм построения LR(0) таблицы разбора - построение таблицы - заполнение таблицы - преобразование таблицы - пример LR(0) таблицы разбора 7. Алгоритм построения SLR(1) таблицы разбора - пример SLR(1) таблицы разбора 8. LALR(1)-грамматики - пример LALR(1) таблицы разбора Заключение Практические задания Символы-следователи - это символы, которые могут следовать за левой частью правила при выполнении операций приведения. Строим символы-следователи для всех символов исходя из вывода: A : : = a b c D. . A e | e – символ-следования для a b c D; Символы-следователи приписываются грамматическим вхождениям. Если состояния, имеющие одинаковые грамматические вхождения, но различные следователи, объединены в единое состояние и не порождают неадекватные состояния (противоречия), то они называются LALR(1) с предварительным рассмотрением символов. Отметим символы-следователи для следующего примера: 1. S T else F; «#» else (от E переходим к T(правило 2), далее к S( 2. T E else, т. к. после Т следует else по правило 1)), «+» (Е (правило 5)), 3. T i; правилу 1 «; » , по правилу 1 «+» , else (от E переходим к T(правило 2), далее к 4. F E «; » (от E переходим к F(правило 4), далее к S(правило 1)), 5. E E + i S(правило 1)) «; » (от E переходим к F(правило 4), далее к 6. E i S(правило 1))
LR(K) - ГРАММАТИКИ 1. Понятие LR-грамматики 2. Метод разбора 3. Пример восходящего разбора 4. Сдвиг и свертка 5. Построение таблицы 1. T else F ; S T 2. E T 3. i ; 4. E F E 5. E + i E 6. i Рассмотрим S: Рассмотрим else 12( «#» ): Рассмотрим i 31(else), i 61( «+» , else): Рассмотрим E 21(else), E 51(else, «+» ): Рассмотрим E 4( «; » ), E 51( «; » , «+» ): первый нетерминал Т 1; заносим Рассмотрим T 1: Рассмотрим «; » 14( «#» ): Рассмотрим i 53(else, «+» , «; » ): Рассмотрим i 6( «+» , «; » ): Рассмотрим F( «#» ): Рассмотрим «; » 32 (else) : Рассмотрим «+» 52 ( «+» , else): следует F 1, по 4 правилу следуют Е 4, следует свертка по 6 правилу, либо следует свертка по 2 правилу, либо следует по правилу 4 – свертка, Заменим на сдвиг и свертку в таблицу Е 21 и Е 51, терминал i 61 далее следует else 12 следует свертка по правилу 1 следует свертка по правилу 5 следует свертка по правилу 6 следует «; » 14 по правилу 1 следует свертка по правилу 3 следует i 53 по правилу 5 Е 51, по правилу 6 – i 6 после i следует «; » после Е следует «+» а по 5 правилу после Е – «+» 53 и i 31 гр. вхожд. разбора 1 нач 6. Алгоритм построения 2 S T ОК F T 1( «#» ) S 2 E Переход по щелчку Пример LALR(1) таблицы разбора i «; » «+» T 1( «#» ) E 21(else), S 3 E 51(else, «+» ) else «#» i 31(else), S 4 i 61( «+» , else) else 12( «#» ) S 5 «+» 52 S 6 ( «+» , else) R 2 R 6 LR(0) таблицы разбора 3 E 21(else), E 51(else, «+» ) - построение таблицы 4 i 31(else), i 61( «+» , else) 5 else 12( «#» ) 6 «+» 52 ( «+» , else) 7 «; » 32 (else) 8 F( «#» ) S 12 «; » 14( «#» ) 9 E 4( «; » ), E 51( «; » , «+» ) R 4 - пример SLR(1) таблицы разбора 10 i 6( «+» , «; » ) R 6 11 i 53(else, «+» , «; » ) R 5 8. LALR(1)-грамматики 12 «; » 14( «#» ) - заполнение таблицы - преобразование таблицы - пример LR(0) таблицы разбора 7. Алгоритм построения SLR(1) таблицы разбора - пример LALR(1) таблицы разбора Заключение Практические задания «; » 32 S 7 (else) F( «#» ) S 8 E 4( «; » ), S 9 E 51( «; » , «+» ) i 6( «+» , «; » ) S 10 i 53(else, «+» , «; » ) S 11 R 3 «+» 52 S 13 ( «+» , else) R 5 R 1
LR(K) - ГРАММАТИКИ 1. Понятие LR-грамматики 2. Метод разбора 3. Пример восходящего разбора 4. Сдвиг и свертка 5. Построение таблицы разбора 6. Алгоритм построения LR(0) таблицы разбора - построение таблицы - заполнение таблицы - преобразование таблицы - пример LR(0) таблицы разбора 7. Алгоритм построения SLR(1) таблицы разбора - пример SLR(1) таблицы разбора 8. LALR(1)-грамматики - пример LALR(1) таблицы разбора Заключение Практические задания Заключение Преимущества LR: • LR-анализаторы могут быть созданы для распознавания, по сути, всех конструкций языков программирования, для которых может быть написана контекстносвободная грамматика. • Метод LR-анализа – наиболее общий известный метод ПС-анализа без отказа, который, кроме того, не уступает в эффективности другим методом этого типа. • Класс грамматик, которые могут быть разобраны с использованием LR-методов, представляет собой собственное надмножество класса грамматик, которые могут быть разобраны предиктивными синтаксическими анализаторами. • LR-анализатор может обнаруживать синтаксические ошибки сразу же, как только это становится возможным при сканировании входного потока. Существует три метода построения таблицы LR-анализа для грамматики: 1 метод, простой LR (simple LR, SLR) , является самым легким в реализации, но наименее мощным из них. Он не может построить таблицу разбора для некоторых грамматик, которые успешно обрабатываются другими методами. 2 метод – канонический LR – наиболее мощный, но требующий наибольших ресурсов. 3 метод, метод LR с предпросмотром (lookahead LR, или LALR), по мощности и требуемым ресурсам занимает промежуточное положение. Метод LALR работает с большинством грамматик и может быть эффективно реализован.


