Международная научно-практическая конференция: Инструменты и методы анализа программ, TMPA-2014 14-15 ноября 2014, г. Кострома, РФ Обобщённый табличный LL-анализ Автор: Рагозина Анастасия Лаборатория JetBrains на Математико-Механическом факультете Санкт-Петербургского государственного университета 15 ноября 2014г. Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 1 / 20
Anastasiia Ragozina, Semyon Grigorev, СПбГУ, JetBrains, Saint Petersburg
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Международная научно-практическая
конференция: Инструменты и методы
анализа программ, TMPA-2014
14-15 ноября 2014, г. Кострома, РФ
Обобщённый табличный LL-анализ
Автор: Рагозина Анастасия
Лаборатория JetBrains на Математико-Механическом факультетеСанкт-Петербургского государственного университета
15 ноября 2014г.
Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 1 / 20
ВведениеАвтоматический анализ кода
I компиляторыI верификаторыI средства анализа
Для анализа кода необходимо получить егоструктурное представление – абстрактноесинтаксическое дерево
Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 2 / 20
Встроенные языкиIF @X = @Y
SET @TABLE = ’#table1’ELSE
SET @TABLE = ’table2’EXECUTE
(’SELECT x FROM’ + @TABLE + ’ WHERE ISNULL(n,0) > 1’)
Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 8 / 20
Принцип работы
При возникновении неоднозначностейрассматриваются все возможные вариантыразбораВетвление стека: для каждого варианта создаётсясвой стекРезультат работы: лес разбора
Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 9 / 20
Структуры данных
На каждый вариант разбора свой стек и дерево –дорогоGraph Structured Stack (GSS)Shared Packed Parsing Forest (SPPF)
Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 10 / 20
GSS
Позволяет комбинировать стеки в компактнуюструктуруПри возникновении конфликта стек разветвляетсяВсе вершины хранятся в единственномэкземпляре – склейка вариантов разбора
Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 11 / 20
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
SPPF
Переиспользование узловТипы узлов:
I Nonterminal symbol nodesI Terminal symbol nodesI Packed nodes
В GLL есть дополнительные:I Intermidiate nodes
Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 13 / 20
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
GLL-анализатор
Анализатор состоит из набора функцийДля каждой альтернативы генерируется отдельнаяфункция, управление между которыми передаётсяс помощью команды goto()Некоторые goto() могут иметь несколько целевыхметок (неоднозначности в грамматике)
Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 15 / 20
Дескрипторы, множестваДескриптор – (L, s, i , t)
I L – меткаI s – вершина стекаI i – позиция во входном потокеI t – корень соответствующего поддерева
Очередь дескрипторов RПроблема: количество дескрипторов можетэкспоненцально зависеть от входа, созданиеповторных при левой реккурсии – циклРешение: U – множество уже созданныхдескрипторов
Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 16 / 20
Описание
(L, i) – на вершинах стекаЧасти уже построенного дерева хранятся нарёбрах стека(T |N, j , i) – терминальный и нетерминальныйузел дерева(X = x1x2 · x3x4, j , i) – промежуточные ячейки
Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 17 / 20
Возможные ситуации
Перед терминалом: увеличить позицию вовходном потоке, создать терминальный узелдереваПеред нетерминалом: создать вершину стека,записать новый дескрипторПравило закончилось
I извлечь вершину со стекаI создать новый дескриптор с использованием метки,
записанной в вершине
Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 18 / 20
Табличный анализ
Выбор альтернативы проиходит с использованиемLL-таблицМетки заменены на позицию в грамматике ихранится пара чиселБыли выделены общие ситуации: процесс разбораосуществляется с помощью парывзаимнорекурсивных функций
Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 19 / 20
Контактная информация
Рагозина Анастасия: [email protected]Григорьев Семён: [email protected]Исходный код YaccConstructor:http://recursive-ascent.googlecode.com
Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 20 / 20