Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Международная научно-практическая 
конференция: Инструменты и методы 
анализа программ, TMPA-2014 
14-15 ноября 2014, г. К...
Введение 
Автоматический анализ кода 
I компиляторы 
I верификаторы 
I средства анализа 
Для анализа кода необходимо получ...
Встроенные языки 
IF @X = @Y 
SET @TABLE = ’#table1’ 
ELSE 
SET @TABLE = ’table2’ 
EXECUTE 
(’SELECT x FROM’ + @TABLE + ’ ...
Абстрактный анализ 
Авторы: Kyung-Goo Doh, Hyunha Kim, David A. 
Schmidt 
I Анализ потока данных + LR-анализ для обработки...
Пример 
IF @X = @Y 
SET @TABLE = ’#table1’ 
ELSE 
SET @TABLE = ’table2’ 
EXECUTE 
(’SELECT x FROM ’ + @TABLE + ’ WHERE ISN...
Абстрактный анализ 
Оригинальный подход: LALR-таблицы 
В лаборатории JetBrains: обобщённый LR 
I Поддержка произвольных КС...
Синтаксический анализ 
Нисходящий 
I Структура анализатора имеет тесную связь с 
грамматикой, что упрощает понимание 
I Ле...
Обобщённый анализ 
Generalized LR 
I Впервые предложен Томитой 
I Существует множество модификаций 
I Сложная для отладки ...
Принцип работы 
При возникновении неоднозначностей 
рассматриваются все возможные варианты 
разбора 
Ветвление стека: для ...
Структуры данных 
На каждый вариант разбора свой стек и дерево – 
дорого 
Graph Structured Stack (GSS) 
Shared Packed Pars...
GSS 
Позволяет комбинировать стеки в компактную 
структуру 
При возникновении конфликта стек разветвляется 
Все вершины хр...
GSS: пример 
S1, 0 
S0, 0 
bottom 
S1, 1 
S2, 1 
S1, 0 
S0, 0 
bottom 
S1, 2 
S3, 1 
S2, 1 
S1, 0 
S0, 0 
bottom 
→ 
S1, 1...
SPPF 
Переиспользование узлов 
Типы узлов: 
I Nonterminal symbol nodes 
I Terminal symbol nodes 
I Packed nodes 
В GLL ест...
SPPF: пример 
Грамматика: 
strat → s; 
s → ss|B 
Вход: 
B B B 
prod 2 
n s 
prod 0 
n s n s 
prod 0 prod 1 
n s n s 
prod ...
GLL-анализатор 
Анализатор состоит из набора функций 
Для каждой альтернативы генерируется отдельная 
функция, управление ...
Дескрипторы, множества 
Дескриптор – (L, s, i, t) 
I L – метка 
I s – вершина стека 
I i – позиция во входном потоке 
I t ...
Описание 
(L, i) – на вершинах стека 
Части уже построенного дерева хранятся на 
рёбрах стека 
(T|N, j, i) – терминальный ...
Возможные ситуации 
Перед терминалом: увеличить позицию во 
входном потоке, создать терминальный узел 
дерева 
Перед нетер...
Табличный анализ 
Выбор альтернативы проиходит с использованием 
LL-таблиц 
Метки заменены на позицию в грамматике и 
хран...
Контактная информация 
Рагозина Анастасия: ragozina.anastasiya@gmail.com 
Григорьев Семён: Semen.Grigorev@jetbrains.com 
И...
Upcoming SlideShare
Loading in …5
×

Generalized Tabular LL-Analysis

2,110 views

Published on

Anastasiia Ragozina, Semyon Grigorev, СПбГУ, JetBrains, Saint Petersburg

Published in: Science
  • Be the first to comment

  • Be the first to like this

Generalized Tabular LL-Analysis

  1. 1. Международная научно-практическая конференция: Инструменты и методы анализа программ, TMPA-2014 14-15 ноября 2014, г. Кострома, РФ Обобщённый табличный LL-анализ Автор: Рагозина Анастасия Лаборатория JetBrains на Математико-Механическом факультете Санкт-Петербургского государственного университета 15 ноября 2014г. Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 1 / 20
  2. 2. Введение Автоматический анализ кода I компиляторы I верификаторы I средства анализа Для анализа кода необходимо получить его структурное представление – абстрактное синтаксическое дерево Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 2 / 20
  3. 3. Встроенные языки IF @X = @Y SET @TABLE = ’#table1’ ELSE SET @TABLE = ’table2’ EXECUTE (’SELECT x FROM’ + @TABLE + ’ WHERE ISNULL(n,0) > 1’) JavaScript в Java String script = "function hello(name) print(’Hello, ’ + name); "; engine.eval(script); Invocable inv = (Invocable) engine; inv.invokeFunction("hello", "Scripting!!!" ); Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 3 / 20
  4. 4. Абстрактный анализ Авторы: Kyung-Goo Doh, Hyunha Kim, David A. Schmidt I Анализ потока данных + LR-анализ для обработки сложного (нелинейного) входа Для каждого выражения строится аппроксимация множества всех его значений, над которой производится синтаксический анализ Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 4 / 20
  5. 5. Пример IF @X = @Y SET @TABLE = ’#table1’ ELSE SET @TABLE = ’table2’ EXECUTE (’SELECT x FROM ’ + @TABLE + ’ WHERE ISNULL(n,0) > 1’) Множество значений: {’SELECT x FROM #table1 WHERE ISNULL(n,0) > 1’ ; ’SELECT x FROM table2 WHERE ISNULL(n,0) > 1’} Аппроксимация: "SELECT x FROM " 1 2 3 "#table1" "table2" 4 " WHERE ISNULL(n,0) > 1" Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 5 / 20
  6. 6. Абстрактный анализ Оригинальный подход: LALR-таблицы В лаборатории JetBrains: обобщённый LR I Поддержка произвольных КС-грамматик I Проблема: диагностика ошибок Надежда на обобщённый LL-анализ: хорошее качество диагностики ошибок Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 6 / 20
  7. 7. Синтаксический анализ Нисходящий I Структура анализатора имеет тесную связь с грамматикой, что упрощает понимание I Легко и быстро могут быть написаны вручную I Хорошая диагностика ошибок I К сожалению, обрабатывает узкий класс обрабатываемых языков Восходящий I Расширяет класс обрабатываемых языков I Более сложная структура парсера I Сложности с диагностикой ошибок Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 7 / 20
  8. 8. Обобщённый анализ Generalized LR I Впервые предложен Томитой I Существует множество модификаций I Сложная для отладки структура анализатора Generalized LL I Elizabeth Scott, Adrian Johnstone, 2010 I Поддержка всех КС-грамматик (левая рекурсия, скрытая левая рекурсия) I Наследует преимущества нисходящих анализаторов Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 8 / 20
  9. 9. Принцип работы При возникновении неоднозначностей рассматриваются все возможные варианты разбора Ветвление стека: для каждого варианта создаётся свой стек Результат работы: лес разбора Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 9 / 20
  10. 10. Структуры данных На каждый вариант разбора свой стек и дерево – дорого Graph Structured Stack (GSS) Shared Packed Parsing Forest (SPPF) Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 10 / 20
  11. 11. GSS Позволяет комбинировать стеки в компактную структуру При возникновении конфликта стек разветвляется Все вершины хранятся в единственном экземпляре – склейка вариантов разбора Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 11 / 20
  12. 12. GSS: пример S1, 0 S0, 0 bottom S1, 1 S2, 1 S1, 0 S0, 0 bottom S1, 2 S3, 1 S2, 1 S1, 0 S0, 0 bottom → S1, 1 S2, 1 S1, 2 S3, 1 S1, 0 S0, 0 bottom Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 12 / 20
  13. 13. SPPF Переиспользование узлов Типы узлов: I Nonterminal symbol nodes I Terminal symbol nodes I Packed nodes В GLL есть дополнительные: I Intermidiate nodes Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 13 / 20
  14. 14. SPPF: пример Грамматика: strat → s; s → ss|B Вход: B B B prod 2 n s prod 0 n s n s prod 0 prod 1 n s n s prod 1 prod 1 t B t B t B prod 2 n s prod 0 n s n s prod 1 t B prod 0 n s n s prod 1 prod 1 t B t B → prod 2 n s prod 0 prod 0 n s n s n s n s prod 0 prod 1 prod 1 t B n s prod 1 prod 0 t B t B Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 14 / 20
  15. 15. GLL-анализатор Анализатор состоит из набора функций Для каждой альтернативы генерируется отдельная функция, управление между которыми передаётся с помощью команды goto() Некоторые goto() могут иметь несколько целевых меток (неоднозначности в грамматике) Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 15 / 20
  16. 16. Дескрипторы, множества Дескриптор – (L, s, i, t) I L – метка I s – вершина стека I i – позиция во входном потоке I t – корень соответствующего поддерева Очередь дескрипторов R Проблема: количество дескрипторов может экспоненцально зависеть от входа, создание повторных при левой реккурсии – цикл Решение: U – множество уже созданных дескрипторов Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 16 / 20
  17. 17. Описание (L, i) – на вершинах стека Части уже построенного дерева хранятся на рёбрах стека (T|N, j, i) – терминальный и нетерминальный узел дерева (X = x1x2 · x3x4, j, i) – промежуточные ячейки Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 17 / 20
  18. 18. Возможные ситуации Перед терминалом: увеличить позицию во входном потоке, создать терминальный узел дерева Перед нетерминалом: создать вершину стека, записать новый дескриптор Правило закончилось I извлечь вершину со стека I создать новый дескриптор с использованием метки, записанной в вершине Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 18 / 20
  19. 19. Табличный анализ Выбор альтернативы проиходит с использованием LL-таблиц Метки заменены на позицию в грамматике и хранится пара чисел Были выделены общие ситуации: процесс разбора осуществляется с помощью пары взаимнорекурсивных функций Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 19 / 20
  20. 20. Контактная информация Рагозина Анастасия: ragozina.anastasiya@gmail.com Григорьев Семён: Semen.Grigorev@jetbrains.com Исходный код YaccConstructor: http://recursive-ascent.googlecode.com Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 20 / 20

×