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

Generalized Tabular LL-Analysis

Jul 02, 2015

Download

Science

Iosif Itkin

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
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