generalized tabular ll-analysis

20
Международная научно-практическая конференция: Инструменты и методы анализа программ, TMPA-2014 14-15 ноября 2014, г. Кострома, РФ Обобщённый табличный LL-анализ Автор: Рагозина Анастасия Лаборатория JetBrains на Математико-Механическом факультете Санкт-Петербургского государственного университета 15 ноября 2014г. Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 1 / 20

Upload: iosif-itkin

Post on 02-Jul-2015

1.167 views

Category:

Science


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Generalized Tabular LL-Analysis

Международная научно-практическая

конференция: Инструменты и методы

анализа программ, TMPA-2014

14-15 ноября 2014, г. Кострома, РФ

Обобщённый табличный LL-анализ

Автор: Рагозина Анастасия

Лаборатория JetBrains на Математико-Механическом факультетеСанкт-Петербургского государственного университета

15 ноября 2014г.

Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 1 / 20

Page 2: Generalized Tabular LL-Analysis

ВведениеАвтоматический анализ кода

I компиляторыI верификаторыI средства анализа

Для анализа кода необходимо получить егоструктурное представление – абстрактноесинтаксическое дерево

Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 2 / 20

Page 3: Generalized Tabular LL-Analysis

Встроенные языкиIF @X = @Y

SET @TABLE = ’#table1’ELSE

SET @TABLE = ’table2’EXECUTE

(’SELECT x FROM’ + @TABLE + ’ WHERE ISNULL(n,0) > 1’)

JavaScript в JavaString script =

"function hello(name) print(’Hello, ’ + name); ";engine.eval(script);Invocable inv = (Invocable) engine;inv.invokeFunction("hello", "Scripting!!!" );

Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 3 / 20

Page 4: Generalized Tabular LL-Analysis

Абстрактный анализАвторы: Kyung-Goo Doh, Hyunha Kim, David A.Schmidt

I Анализ потока данных + LR-анализ для обработкисложного (нелинейного) входа

Для каждого выражения строится аппроксимациямножества всех его значений, над которойпроизводится синтаксический анализ

Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 4 / 20

Page 5: Generalized Tabular LL-Analysis

Пример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

Page 6: Generalized Tabular LL-Analysis

Абстрактный анализ

Оригинальный подход: LALR-таблицыВ лаборатории JetBrains: обобщённый LR

I Поддержка произвольных КС-грамматикI Проблема: диагностика ошибок

Надежда на обобщённый LL-анализ: хорошеекачество диагностики ошибок

Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 6 / 20

Page 7: Generalized Tabular LL-Analysis

Синтаксический анализНисходящий

I Структура анализатора имеет тесную связь сграмматикой, что упрощает понимание

I Легко и быстро могут быть написаны вручнуюI Хорошая диагностика ошибокI К сожалению, обрабатывает узкий класс

обрабатываемых языковВосходящий

I Расширяет класс обрабатываемых языковI Более сложная структура парсераI Сложности с диагностикой ошибок

Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 7 / 20

Page 8: Generalized Tabular LL-Analysis

Обобщённый анализGeneralized LR

I Впервые предложен ТомитойI Существует множество модификацийI Сложная для отладки структура анализатора

Generalized LLI Elizabeth Scott, Adrian Johnstone, 2010I Поддержка всех КС-грамматик (левая рекурсия,

скрытая левая рекурсия)I Наследует преимущества нисходящих анализаторов

Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 8 / 20

Page 9: Generalized Tabular LL-Analysis

Принцип работы

При возникновении неоднозначностейрассматриваются все возможные вариантыразбораВетвление стека: для каждого варианта создаётсясвой стекРезультат работы: лес разбора

Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 9 / 20

Page 10: Generalized Tabular LL-Analysis

Структуры данных

На каждый вариант разбора свой стек и дерево –дорогоGraph Structured Stack (GSS)Shared Packed Parsing Forest (SPPF)

Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 10 / 20

Page 11: Generalized Tabular LL-Analysis

GSS

Позволяет комбинировать стеки в компактнуюструктуруПри возникновении конфликта стек разветвляетсяВсе вершины хранятся в единственномэкземпляре – склейка вариантов разбора

Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 11 / 20

Page 12: Generalized Tabular LL-Analysis

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

Page 13: Generalized Tabular LL-Analysis

SPPF

Переиспользование узловТипы узлов:

I Nonterminal symbol nodesI Terminal symbol nodesI Packed nodes

В GLL есть дополнительные:I Intermidiate nodes

Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 13 / 20

Page 14: Generalized Tabular LL-Analysis

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

Page 15: Generalized Tabular LL-Analysis

GLL-анализатор

Анализатор состоит из набора функцийДля каждой альтернативы генерируется отдельнаяфункция, управление между которыми передаётсяс помощью команды goto()Некоторые goto() могут иметь несколько целевыхметок (неоднозначности в грамматике)

Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 15 / 20

Page 16: Generalized Tabular LL-Analysis

Дескрипторы, множестваДескриптор – (L, s, i , t)

I L – меткаI s – вершина стекаI i – позиция во входном потокеI t – корень соответствующего поддерева

Очередь дескрипторов RПроблема: количество дескрипторов можетэкспоненцально зависеть от входа, созданиеповторных при левой реккурсии – циклРешение: U – множество уже созданныхдескрипторов

Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 16 / 20

Page 17: Generalized Tabular LL-Analysis

Описание

(L, i) – на вершинах стекаЧасти уже построенного дерева хранятся нарёбрах стека(T |N, j , i) – терминальный и нетерминальныйузел дерева(X = x1x2 · x3x4, j , i) – промежуточные ячейки

Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 17 / 20

Page 18: Generalized Tabular LL-Analysis

Возможные ситуации

Перед терминалом: увеличить позицию вовходном потоке, создать терминальный узелдереваПеред нетерминалом: создать вершину стека,записать новый дескрипторПравило закончилось

I извлечь вершину со стекаI создать новый дескриптор с использованием метки,

записанной в вершине

Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 18 / 20

Page 19: Generalized Tabular LL-Analysis

Табличный анализ

Выбор альтернативы проиходит с использованиемLL-таблицМетки заменены на позицию в грамматике ихранится пара чиселБыли выделены общие ситуации: процесс разбораосуществляется с помощью парывзаимнорекурсивных функций

Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 19 / 20

Page 20: Generalized Tabular LL-Analysis

Контактная информация

Рагозина Анастасия: [email protected]Григорьев Семён: [email protected]Исходный код YaccConstructor:http://recursive-ascent.googlecode.com

Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 20 / 20