SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
Международная научно-практическая 
конференция: Инструменты и методы 
анализа программ, 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’) 
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
Абстрактный анализ 
Авторы: Kyung-Goo Doh, Hyunha Kim, David A. 
Schmidt 
I Анализ потока данных + LR-анализ для обработки 
сложного (нелинейного) входа 
Для каждого выражения строится аппроксимация 
множества всех его значений, над которой 
производится синтаксический анализ 
Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 4 / 20
Пример 
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
Абстрактный анализ 
Оригинальный подход: LALR-таблицы 
В лаборатории JetBrains: обобщённый LR 
I Поддержка произвольных КС-грамматик 
I Проблема: диагностика ошибок 
Надежда на обобщённый LL-анализ: хорошее 
качество диагностики ошибок 
Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 6 / 20
Синтаксический анализ 
Нисходящий 
I Структура анализатора имеет тесную связь с 
грамматикой, что упрощает понимание 
I Легко и быстро могут быть написаны вручную 
I Хорошая диагностика ошибок 
I К сожалению, обрабатывает узкий класс 
обрабатываемых языков 
Восходящий 
I Расширяет класс обрабатываемых языков 
I Более сложная структура парсера 
I Сложности с диагностикой ошибок 
Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 7 / 20
Обобщённый анализ 
Generalized LR 
I Впервые предложен Томитой 
I Существует множество модификаций 
I Сложная для отладки структура анализатора 
Generalized LL 
I Elizabeth Scott, Adrian Johnstone, 2010 
I Поддержка всех КС-грамматик (левая рекурсия, 
скрытая левая рекурсия) 
I Наследует преимущества нисходящих анализаторов 
Рагозина Анастасия (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 nodes 
I Terminal symbol nodes 
I 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 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
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
Контактная информация 
Рагозина Анастасия: ragozina.anastasiya@gmail.com 
Григорьев Семён: Semen.Grigorev@jetbrains.com 
Исходный код YaccConstructor: 
http://recursive-ascent.googlecode.com 
Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 20 / 20

Contenu connexe

Tendances

02 - Java. Базовый синтаксис Java
02 - Java. Базовый синтаксис Java02 - Java. Базовый синтаксис Java
02 - Java. Базовый синтаксис JavaRoman Brovko
 
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Stas Vyschepan
 
C++ Core Guidelines
C++ Core Guidelines C++ Core Guidelines
C++ Core Guidelines Sergey Zubkov
 
TMPA-2013 Tsytelov Trifanov Devexperts
TMPA-2013 Tsytelov Trifanov DevexpertsTMPA-2013 Tsytelov Trifanov Devexperts
TMPA-2013 Tsytelov Trifanov DevexpertsIosif Itkin
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU
 
Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех Minsk Linux User Group
 
C# 5.0. Взгляд в будущее
C# 5.0. Взгляд в будущееC# 5.0. Взгляд в будущее
C# 5.0. Взгляд в будущееGetDev.NET
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
 
Беглый обзор "внутренностей" Python
Беглый обзор "внутренностей" PythonБеглый обзор "внутренностей" Python
Беглый обзор "внутренностей" PythonMaxim Kulsha
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямSergey Staroletov
 

Tendances (11)

02 - Java. Базовый синтаксис Java
02 - Java. Базовый синтаксис Java02 - Java. Базовый синтаксис Java
02 - Java. Базовый синтаксис Java
 
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
 
Тодуа. Методы разработки интерпретатора языка Рефал-2
Тодуа. Методы разработки интерпретатора языка Рефал-2Тодуа. Методы разработки интерпретатора языка Рефал-2
Тодуа. Методы разработки интерпретатора языка Рефал-2
 
C++ Core Guidelines
C++ Core Guidelines C++ Core Guidelines
C++ Core Guidelines
 
TMPA-2013 Tsytelov Trifanov Devexperts
TMPA-2013 Tsytelov Trifanov DevexpertsTMPA-2013 Tsytelov Trifanov Devexperts
TMPA-2013 Tsytelov Trifanov Devexperts
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
 
Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех
 
C# 5.0. Взгляд в будущее
C# 5.0. Взгляд в будущееC# 5.0. Взгляд в будущее
C# 5.0. Взгляд в будущее
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
 
Беглый обзор "внутренностей" Python
Беглый обзор "внутренностей" PythonБеглый обзор "внутренностей" Python
Беглый обзор "внутренностей" Python
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциям
 

Plus de Iosif Itkin

Foundations of Software Testing Lecture 4
Foundations of Software Testing Lecture 4Foundations of Software Testing Lecture 4
Foundations of Software Testing Lecture 4Iosif Itkin
 
QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...
QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...
QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...Iosif Itkin
 
Exactpro FinTech Webinar - Global Exchanges Test Oracles
Exactpro FinTech Webinar - Global Exchanges Test OraclesExactpro FinTech Webinar - Global Exchanges Test Oracles
Exactpro FinTech Webinar - Global Exchanges Test OraclesIosif Itkin
 
Exactpro FinTech Webinar - Global Exchanges FIX Protocol
Exactpro FinTech Webinar - Global Exchanges FIX ProtocolExactpro FinTech Webinar - Global Exchanges FIX Protocol
Exactpro FinTech Webinar - Global Exchanges FIX ProtocolIosif Itkin
 
Operational Resilience in Financial Market Infrastructures
Operational Resilience in Financial Market InfrastructuresOperational Resilience in Financial Market Infrastructures
Operational Resilience in Financial Market InfrastructuresIosif Itkin
 
20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season
20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season
20 Simple Questions from Exactpro for Your Enjoyment This Holiday SeasonIosif Itkin
 
Testing the Intelligence of your AI
Testing the Intelligence of your AITesting the Intelligence of your AI
Testing the Intelligence of your AIIosif Itkin
 
EXTENT 2019: Exactpro Quality Assurance for Financial Market Infrastructures
EXTENT 2019: Exactpro Quality Assurance for Financial Market InfrastructuresEXTENT 2019: Exactpro Quality Assurance for Financial Market Infrastructures
EXTENT 2019: Exactpro Quality Assurance for Financial Market InfrastructuresIosif Itkin
 
ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...
ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...
ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...Iosif Itkin
 
EXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan Shamrai
EXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan ShamraiEXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan Shamrai
EXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan ShamraiIosif Itkin
 
EXTENT Talks QA Community Tbilisi 20 April 2019 - Conference Open
EXTENT Talks QA Community Tbilisi 20 April 2019 - Conference OpenEXTENT Talks QA Community Tbilisi 20 April 2019 - Conference Open
EXTENT Talks QA Community Tbilisi 20 April 2019 - Conference OpenIosif Itkin
 
User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...
User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...
User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...Iosif Itkin
 
QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...
QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...
QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...Iosif Itkin
 
QA Community Saratov: Past, Present, Future (2019-02-08)
QA Community Saratov: Past, Present, Future (2019-02-08)QA Community Saratov: Past, Present, Future (2019-02-08)
QA Community Saratov: Past, Present, Future (2019-02-08)Iosif Itkin
 
Machine Learning and RoboCop Testing
Machine Learning and RoboCop TestingMachine Learning and RoboCop Testing
Machine Learning and RoboCop TestingIosif Itkin
 
Behaviour Driven Development: Oltre i limiti del possibile
Behaviour Driven Development: Oltre i limiti del possibileBehaviour Driven Development: Oltre i limiti del possibile
Behaviour Driven Development: Oltre i limiti del possibileIosif Itkin
 
2018 - Exactpro Year in Review
2018 - Exactpro Year in Review2018 - Exactpro Year in Review
2018 - Exactpro Year in ReviewIosif Itkin
 
Exactpro Discussion about Joy and Strategy
Exactpro Discussion about Joy and StrategyExactpro Discussion about Joy and Strategy
Exactpro Discussion about Joy and StrategyIosif Itkin
 
FIX EMEA Conference 2018 - Post Trade Software Testing Challenges
FIX EMEA Conference 2018 - Post Trade Software Testing ChallengesFIX EMEA Conference 2018 - Post Trade Software Testing Challenges
FIX EMEA Conference 2018 - Post Trade Software Testing ChallengesIosif Itkin
 
BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)
BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)
BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)Iosif Itkin
 

Plus de Iosif Itkin (20)

Foundations of Software Testing Lecture 4
Foundations of Software Testing Lecture 4Foundations of Software Testing Lecture 4
Foundations of Software Testing Lecture 4
 
QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...
QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...
QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...
 
Exactpro FinTech Webinar - Global Exchanges Test Oracles
Exactpro FinTech Webinar - Global Exchanges Test OraclesExactpro FinTech Webinar - Global Exchanges Test Oracles
Exactpro FinTech Webinar - Global Exchanges Test Oracles
 
Exactpro FinTech Webinar - Global Exchanges FIX Protocol
Exactpro FinTech Webinar - Global Exchanges FIX ProtocolExactpro FinTech Webinar - Global Exchanges FIX Protocol
Exactpro FinTech Webinar - Global Exchanges FIX Protocol
 
Operational Resilience in Financial Market Infrastructures
Operational Resilience in Financial Market InfrastructuresOperational Resilience in Financial Market Infrastructures
Operational Resilience in Financial Market Infrastructures
 
20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season
20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season
20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season
 
Testing the Intelligence of your AI
Testing the Intelligence of your AITesting the Intelligence of your AI
Testing the Intelligence of your AI
 
EXTENT 2019: Exactpro Quality Assurance for Financial Market Infrastructures
EXTENT 2019: Exactpro Quality Assurance for Financial Market InfrastructuresEXTENT 2019: Exactpro Quality Assurance for Financial Market Infrastructures
EXTENT 2019: Exactpro Quality Assurance for Financial Market Infrastructures
 
ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...
ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...
ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...
 
EXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan Shamrai
EXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan ShamraiEXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan Shamrai
EXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan Shamrai
 
EXTENT Talks QA Community Tbilisi 20 April 2019 - Conference Open
EXTENT Talks QA Community Tbilisi 20 April 2019 - Conference OpenEXTENT Talks QA Community Tbilisi 20 April 2019 - Conference Open
EXTENT Talks QA Community Tbilisi 20 April 2019 - Conference Open
 
User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...
User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...
User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...
 
QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...
QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...
QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...
 
QA Community Saratov: Past, Present, Future (2019-02-08)
QA Community Saratov: Past, Present, Future (2019-02-08)QA Community Saratov: Past, Present, Future (2019-02-08)
QA Community Saratov: Past, Present, Future (2019-02-08)
 
Machine Learning and RoboCop Testing
Machine Learning and RoboCop TestingMachine Learning and RoboCop Testing
Machine Learning and RoboCop Testing
 
Behaviour Driven Development: Oltre i limiti del possibile
Behaviour Driven Development: Oltre i limiti del possibileBehaviour Driven Development: Oltre i limiti del possibile
Behaviour Driven Development: Oltre i limiti del possibile
 
2018 - Exactpro Year in Review
2018 - Exactpro Year in Review2018 - Exactpro Year in Review
2018 - Exactpro Year in Review
 
Exactpro Discussion about Joy and Strategy
Exactpro Discussion about Joy and StrategyExactpro Discussion about Joy and Strategy
Exactpro Discussion about Joy and Strategy
 
FIX EMEA Conference 2018 - Post Trade Software Testing Challenges
FIX EMEA Conference 2018 - Post Trade Software Testing ChallengesFIX EMEA Conference 2018 - Post Trade Software Testing Challenges
FIX EMEA Conference 2018 - Post Trade Software Testing Challenges
 
BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)
BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)
BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)
 

Generalized Tabular LL-Analysis

  • 1. Международная научно-практическая конференция: Инструменты и методы анализа программ, TMPA-2014 14-15 ноября 2014, г. Кострома, РФ Обобщённый табличный LL-анализ Автор: Рагозина Анастасия Лаборатория JetBrains на Математико-Механическом факультете Санкт-Петербургского государственного университета 15 ноября 2014г. Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 1 / 20
  • 2. Введение Автоматический анализ кода I компиляторы I верификаторы I средства анализа Для анализа кода необходимо получить его структурное представление – абстрактное синтаксическое дерево Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 2 / 20
  • 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. Абстрактный анализ Авторы: Kyung-Goo Doh, Hyunha Kim, David A. Schmidt I Анализ потока данных + LR-анализ для обработки сложного (нелинейного) входа Для каждого выражения строится аппроксимация множества всех его значений, над которой производится синтаксический анализ Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 4 / 20
  • 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. Абстрактный анализ Оригинальный подход: LALR-таблицы В лаборатории JetBrains: обобщённый LR I Поддержка произвольных КС-грамматик I Проблема: диагностика ошибок Надежда на обобщённый LL-анализ: хорошее качество диагностики ошибок Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 6 / 20
  • 7. Синтаксический анализ Нисходящий I Структура анализатора имеет тесную связь с грамматикой, что упрощает понимание I Легко и быстро могут быть написаны вручную I Хорошая диагностика ошибок I К сожалению, обрабатывает узкий класс обрабатываемых языков Восходящий I Расширяет класс обрабатываемых языков I Более сложная структура парсера I Сложности с диагностикой ошибок Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 7 / 20
  • 8. Обобщённый анализ Generalized LR I Впервые предложен Томитой I Существует множество модификаций I Сложная для отладки структура анализатора Generalized LL I Elizabeth Scott, Adrian Johnstone, 2010 I Поддержка всех КС-грамматик (левая рекурсия, скрытая левая рекурсия) I Наследует преимущества нисходящих анализаторов Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 8 / 20
  • 9. Принцип работы При возникновении неоднозначностей рассматриваются все возможные варианты разбора Ветвление стека: для каждого варианта создаётся свой стек Результат работы: лес разбора Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 9 / 20
  • 10. Структуры данных На каждый вариант разбора свой стек и дерево – дорого Graph Structured Stack (GSS) Shared Packed Parsing Forest (SPPF) Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 10 / 20
  • 11. GSS Позволяет комбинировать стеки в компактную структуру При возникновении конфликта стек разветвляется Все вершины хранятся в единственном экземпляре – склейка вариантов разбора Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 11 / 20
  • 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. SPPF Переиспользование узлов Типы узлов: I Nonterminal symbol nodes I Terminal symbol nodes I Packed nodes В GLL есть дополнительные: I Intermidiate nodes Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 13 / 20
  • 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. GLL-анализатор Анализатор состоит из набора функций Для каждой альтернативы генерируется отдельная функция, управление между которыми передаётся с помощью команды goto() Некоторые goto() могут иметь несколько целевых меток (неоднозначности в грамматике) Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 15 / 20
  • 16. Дескрипторы, множества Дескриптор – (L, s, i, t) I L – метка I s – вершина стека I i – позиция во входном потоке I t – корень соответствующего поддерева Очередь дескрипторов R Проблема: количество дескрипторов может экспоненцально зависеть от входа, создание повторных при левой реккурсии – цикл Решение: U – множество уже созданных дескрипторов Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 16 / 20
  • 17. Описание (L, i) – на вершинах стека Части уже построенного дерева хранятся на рёбрах стека (T|N, j, i) – терминальный и нетерминальный узел дерева (X = x1x2 · x3x4, j, i) – промежуточные ячейки Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 17 / 20
  • 18. Возможные ситуации Перед терминалом: увеличить позицию во входном потоке, создать терминальный узел дерева Перед нетерминалом: создать вершину стека, записать новый дескриптор Правило закончилось I извлечь вершину со стека I создать новый дескриптор с использованием метки, записанной в вершине Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 18 / 20
  • 19. Табличный анализ Выбор альтернативы проиходит с использованием LL-таблиц Метки заменены на позицию в грамматике и хранится пара чисел Были выделены общие ситуации: процесс разбора осуществляется с помощью пары взаимнорекурсивных функций Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 19 / 20
  • 20. Контактная информация Рагозина Анастасия: ragozina.anastasiya@gmail.com Григорьев Семён: Semen.Grigorev@jetbrains.com Исходный код YaccConstructor: http://recursive-ascent.googlecode.com Рагозина Анастасия (JetBrains) GLL 15 ноября 2014г. 20 / 20