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, г. Кост...
Введение
Автоматический анализ кода
компиляторы
верификаторы
средства анализа
Для анализа кода необходимо получить его
стр...
Встроенные языки
IF @X = @Y
SET @TABLE = ’#table1’
ELSE
SET @TABLE = ’table2’
EXECUTE
(’SELECT x FROM’ + @TABLE + ’ WHERE ...
Абстрактный анализ
Авторы: Kyung-Goo Doh, Hyunha Kim, David A.
Schmidt
Анализ потока данных + LR-анализ для обработки
слож...
Пример
IF @X = @Y
SET @TABLE = ’#table1’
ELSE
SET @TABLE = ’table2’
EXECUTE
(’SELECT x FROM ’ + @TABLE + ’ WHERE ISNULL(n,...
Абстрактный анализ
Оригинальный подход: LALR-таблицы
В лаборатории JetBrains: обобщённый LR
Поддержка произвольных КС-грам...
Синтаксический анализ
Нисходящий
Структура анализатора имеет тесную связь с
грамматикой, что упрощает понимание
Легко и бы...
Обобщённый анализ
Generalized LR (GLR)
Впервые предложен Томитой
Существует множество модификаций
Сложная для отладки стру...
Принцип работы
При возникновении неоднозначностей
рассматриваются все возможные варианты
разбора
Ветвление стека: для кажд...
Структуры данных
На каждый вариант разбора свой стек и дерево –
дорого
Graph Structured Stack (GSS)
Shared Packed Parsing ...
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
S2, 1
S1, 2
S3,...
SPPF
Переиспользование узлов
Типы узлов:
Nonterminal symbol nodes
Terminal symbol nodes
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 1 prod 1
t B...
GLL-анализатор
Анализатор состоит из набора функций
Для каждой альтернативы генерируется отдельная
функция, управление меж...
Дескрипторы, множества
Дескриптор – (L, s, i, t)
L – метка
s – вершина стека
i – позиция во входном потоке
t – корень соот...
Описание
(L, i) – на вершинах стека
Части уже построенного дерева хранятся на
рёбрах стека
(T|N, j, i) – терминальный и не...
Возможные ситуации
Перед терминалом: увеличить позицию во
входном потоке, создать терминальный узел
дерева
Перед нетермина...
Табличный анализ
Выбор альтернативы проиходит с использованием
LL-таблиц
Метки заменены на позицию в грамматике и
хранится...
Контактная информация
Рагозина Анастасия: ragozina.anastasiya@gmail.com
Григорьев Семён: Semen.Grigorev@jetbrains.com
Исхо...
Upcoming SlideShare
Loading in …5
×

Tmpa-2014. table-based GLL parsing.

421 views

Published on

Generalized LL parsing algorithm and it's modification for migration from full code generation to GLL table generation are described. Also we explain correspondence between GLL, GLR and static analysis of string embedded languages.

Published in: Software
  • Parsing algorithm https://adrenaline-studios.com/ As mentioned in previous sections, parsing HTML code cannot be performed using standard descending or ascending analyzers. The reasons for this are listed below.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Tmpa-2014. table-based GLL parsing.

  1. 1. Международная научно-практическая конференция: Инструменты и методы анализа программ, TMPA-2014 14-15 ноября 2014, г. Кострома, РФ Обобщённый табличный LL-анализ Автор: Рагозина Анастасия Лаборатория JetBrains на Математико-Механическом факультете Санкт-Петербургского государственного университета 15 ноября 2014г. Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 1 / 20
  2. 2. Введение Автоматический анализ кода компиляторы верификаторы средства анализа Для анализа кода необходимо получить его структурное представление – абстрактное синтаксическое дерево Рагозина Анастасия (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 Анализ потока данных + 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’} Аппроксимация: 1 2 "SELECT x FROM " 3 "#table1" "table2" 4 " WHERE ISNULL(n,0) > 1" Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 5 / 20
  6. 6. Абстрактный анализ Оригинальный подход: LALR-таблицы В лаборатории JetBrains: обобщённый LR Поддержка произвольных КС-грамматик Проблема: диагностика ошибок Надежда на обобщённый LL-анализ: хорошее качество диагностики ошибок Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 6 / 20
  7. 7. Синтаксический анализ Нисходящий Структура анализатора имеет тесную связь с грамматикой, что упрощает понимание Легко и быстро могут быть написаны вручную Хорошая диагностика ошибок К сожалению, обрабатывает узкий класс обрабатываемых языков Восходящий Расширяет класс обрабатываемых языков Более сложная структура парсера Сложности с диагностикой ошибок Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 7 / 20
  8. 8. Обобщённый анализ Generalized LR (GLR) Впервые предложен Томитой Существует множество модификаций Сложная для отладки структура анализатора Generalized LL (GLL) Elizabeth Scott, Adrian Johnstone, 2010 Поддержка всех КС-грамматик (левая рекурсия, скрытая левая рекурсия) Наследует преимущества нисходящих анализаторов Рагозина Анастасия (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 Переиспользование узлов Типы узлов: Nonterminal symbol nodes Terminal symbol nodes Packed nodes В GLL есть дополнительные: 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 0prod 0 n s n sn 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) L – метка s – вершина стека 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. Возможные ситуации Перед терминалом: увеличить позицию во входном потоке, создать терминальный узел дерева Перед нетерминалом: создать вершину стека, записать новый дескриптор Правило закончилось извлечь вершину со стека создать новый дескриптор с использованием метки, записанной в вершине Рагозина Анастасия (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

×