SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
Третья международная научно-
практическая конференция:
Инструменты и методы анализа
программ, ТМPА-2015
12–14 ноября, Санкт-Петербург
Лексический анализ динамически формируемых
строковых выражений
Автор: Полубелова Марина
Санкт-Петербургский государственный университет
12 ноября 2015г.
Полубелова Марина (СПбГУ) 12 ноября 2015г. 1 / 24
Примеры
Встроенный SQL в С#
private void Go (int cond){
string columnName = cond > 3 ? "X":(cond < 0 ? "Y":"Z");
string query =
"SELECT name" + columnName + " FROM table";
Program.ExecuteImmediate(query);
}
Динамически генерируемый HTML в PHP-программах
<?php
$name = ’your name’;
echo ’<table>
<tr><th>Name</th></tr>
<tr><td>’.$name.’</td></tr>
</table>’;
?>
Полубелова Марина (СПбГУ) 12 ноября 2015г. 2 / 24
Мотивация
Использование динамически формируемых строковых выражений
Уменьшает надежность
Нет статического поиска ошибок
Увеличивает уязвимость
SQL инъекции
Межсайтовый скриптинг
Полубелова Марина (СПбГУ) 12 ноября 2015г. 3 / 24
Статический анализ программ
Статический анализ позволяет получать знания о коде без его запуска
Лексический анализ
Синтаксический анализ
Семантический анализ
Полубелова Марина (СПбГУ) 12 ноября 2015г. 4 / 24
Обзор существующих инструментов
Проверка выражения на соответствие описанию некоторой
эталонной грамматики
Java String Analyzer
PHP String Analyzer
Alvor
Статический анализ программы на уязвимость
Pixy
Stranger
SAFELI
Полубелова Марина (СПбГУ) 12 ноября 2015г. 5 / 24
Разработка инструментов
Возможны два подхода
Создание универсального инструмента
Создание набора генераторов и библиотек стандартных функций
По описанию языка генерируются анализаторы (Lex, Yacc, ANTLR
и т.д.)
Для создания конечных решений можно использовать стандартные
функции
Полубелова Марина (СПбГУ) 12 ноября 2015г. 6 / 24
Проект YaccConstructor
YaccConstructor — модульный инструмент, предназначенный для
проведения лексического и синтаксического анализа
YaccConstructor — платформа для поддержки встроенных языков
В лексическом анализе не поддерживаются циклы и строковые
операции
Полубелова Марина (СПбГУ) 12 ноября 2015г. 7 / 24
Постановка задачи
Цель: разработать автоматизированный подход создания
лексического анализатора для динамически формируемого кода
Разработать алгоритм лексического анализа выражений,
формируемых с помощью строковых операций и циклов
Сохранить привязку лексических единиц к исходному коду
Реализовать генератор лексических анализаторов
Полубелова Марина (СПбГУ) 12 ноября 2015г. 8 / 24
Аппроксимация
private void Go (int cond){
string columnName = cond > 3 ? "X":(cond < 0 ? "Y":"Z");
string query =
"SELECT name" + columnName + " FROM table";
Program.ExecuteImmediate(query);
}
Множество значений
{ "SELECT nameX FROM table"; "SELECT nameY FROM table";
"SELECT nameZ FROM table"}
Результат аппроксимации
0 1
"SELECT name"
32
"X"
"Y"
"Z"
" FROM table"
Полубелова Марина (СПбГУ) 12 ноября 2015г. 9 / 24
Строковые операции
string s = "SELECT nameX FROM tableY";
s = s.Replace("SELECT nameX", "b");
Многие строковые операции могут быть выражены с помощью
конечных автоматов
Для построения аппроксимации множества значений выражения
использовался алгоритм, описанный в статье Fang Yu
“Automata-based symbolic string analysis for vulnerability detection”
Полубелова Марина (СПбГУ) 12 ноября 2015г. 10 / 24
Пример
M = replace(M1, M2, M3)
0 1
b
5
3
e
2
c
4
l
6
d
m
kf
0 2
e
1
d kf
M1 M2
0 1
n
m
0 1
b 5
3
n
2
c
m
4l
6
n
m
m
m
M3 M
Полубелова Марина (СПбГУ) 12 ноября 2015г. 11 / 24
Лексический анализ строковых выражений
На вход анализатору подается конечный автомат, полученный в
результате аппроксимации множества значений строкового
выражения
На выходе получаем либо конечный автомат над токенами, либо
список лексических ошибок. Токен содержит в себе:
идентификатор токена
конечный автомат, описывающий все возможные
последовательности символов для данного токена
Задача лексического анализа: получение конечного автомата над
алфавитом токенов эталонной грамматики из конечного автомата над
алфавитом символов обрабатываемого языка
Полубелова Марина (СПбГУ) 12 ноября 2015г. 12 / 24
Пример
private void Go (int cond){
string columnName = cond > 3 ? "X":(cond < 0 ? "Y":"Z");
string query =
"SELECT name" + columnName + " FROM table";
Program.ExecuteImmediate(query);
}
Результат аппроксимации
0 1
"SELECT name"
32
"X"
"Y"
"Z"
" FROM table"
Результат лексического анализа
0 1
SELECT
52
IDENT
3
FROM
4
IDENT EOF
Полубелова Марина (СПбГУ) 12 ноября 2015г. 13 / 24
Пример
Результат лексического анализа
0 1
SELECT
52
IDENT
3
FROM
4
IDENT EOF
Конечный автомат первого токена IDENT
n: "SELECT name"
(7,8)
a: "SELECT name"
(8,9)
m: "SELECT name"
(9,10)
e: "SELECT name"
(10,11)
Z: "Z"
(0,1)
Y: "Y"
(0,1)
X: "X"
(0,1)
Конечный автомат второго токена IDENT
t: " FROM table"
(6,7)
a: " FROM table"
(7,8)
b: " FROM table"
(8,9)
l: " FROM table"
(9,10)
e: " FROM table"
(10,11)
Полубелова Марина (СПбГУ) 12 ноября 2015г. 14 / 24
Конечный преобразователь
Конечный преобразователь — это конечный автомат, который
может выводить конечное число символов для каждого входного
символа
Композиция конечных преобразователей — это два
последовательно взаимодействующих конечных преобразователя:
выход первого конечного преобразователя является входом для
второго конечного преобразователя
Полубелова Марина (СПбГУ) 12 ноября 2015г. 15 / 24
Генератор лексических анализаторов
Вход:
Лексическая спецификация языка
let digit = [’0’-’9’]
let whitespace = [’ ’ ’t’ ’r’ ’n’]
let num = [’-’]? digit+ (’.’digit+)? ([’e’ ’E’] digit+)?
rule token = parse
| whitespace token lb
| num { NUMBER(lexeme lb) }
| ’-’ { MINUS(lexeme lb) }
| ’/’ { DIV(lexeme lb) }
| ’+’ { PLUS(lexeme lb) }
| "**" { POW(lexeme lb) }
| ’*’ { MULT(lexeme lb) }
rule token = parse
| whitespace { None }
| num { Some(NUMBER(gr)) }
| ’-’ { Some(MINUS(gr)) }
| ’/’ { Some(DIV(gr)) }
| ’+’ { Some(PLUS(gr)) }
| "**" { Some(POW(gr)) }
| ’*’ { Some(MULT(gr)) }
FsLex YaccConstructor
Описание токенов
Выход: Описание конечного преобразователя и вспомогательные
функции
Полубелова Марина (СПбГУ) 12 ноября 2015г. 16 / 24
Алгоритм лексического анализа
Этап 0
Вход: конечный автомат, полученный в результате построения
аппроксимации
Выход: конечный преобразователь, построенный из входного
конечного автомата
0 1
+
2
*
*
0 1
+ : +
32
* : * eof : eof
* : *
Полубелова Марина (СПбГУ) 12 ноября 2015г. 17 / 24
Алгоритм лексического анализа
Этап 1
Вход:
Конечный преобразователь, полученный на Этапе 0
Конечный преобразователь, полученный из описания,
построенного генератором лексических анализаторов
Выход: конечный преобразователь и набор лексических ошибок
0 1
+ : ε
4
2
* : PLUS
eof : MULT
3
* : ε
* : POW
Полубелова Марина (СПбГУ) 12 ноября 2015г. 18 / 24
Алгоритм лексического анализа
Этап 2. Интерпретация конечного преобразователя
Вход: конечный преобразователь, полученный на Этапе 1
Выход: конечный автомат над алфавитом токенов эталонной
грамматики
0 1
+ : ε
4
2
* : PLUS
eof : MULT
3
* : ε
* : POW
0 1
PLUS
4
3POW
2MULT
POW
MULT
EOF
Полубелова Марина (СПбГУ) 12 ноября 2015г. 19 / 24
Пример 1
private void Go (int number){
string query =
"SELECT nameX FROM tableY WHERE x < ";
while(query.Length < number){ query += "+ 1 ";}
Program.ExecuteImmediate(query);
}
Результат аппроксимации
0 1
"SELECT nameX FROM tableY WHERE x < "
"+ 1 "
Результат лексического анализа
0 1
SELECT
92
IDENT
3
FROM
4
IDENT
5
WHERE
6
IDENT
7
LESS
EOF
8
PLUS
10
NUM
EOF
PLUS
Полубелова Марина (СПбГУ) 12 ноября 2015г. 20 / 24
Пример 2
string query = "SELECT name";
for(int i = 0; i < 10; i++){ query += "X";}
query += " FROM tableY";
Program.ExecuteImmediate(query);
Результат лексического анализа
0 1
SELECT
52
IDENT
3
FROM
4
IDENT EOF
Конечный автомат первого токена IDENT
n: "SELECT name"
(7,8)
X: "X"
(0,1)
a: "SELECT name"
(8,9)
m: "SELECT name"
(9,10)
e: "SELECT name"
(10,11)
Полубелова Марина (СПбГУ) 12 ноября 2015г. 21 / 24
Архитектура инструмента
Полубелова Марина (СПбГУ) 12 ноября 2015г. 22 / 24
Результаты
В рамках данной работы были получены следующие результаты
Разработан алгоритм лексического анализа выражений,
формируемых с помощью строковых операций и циклов
Реализован генератор лексических анализаторов на основе
предложенного алгоритма
Полубелова Марина (СПбГУ) 12 ноября 2015г. 23 / 24
Контактная информация
Полубелова Марина: polubelovam@gmail.com
Григорьев Семён: Semen.Grigorev@jetbrains.com
Исходный код YaccConstructor:
https://github.com/YaccConstructor
Полубелова Марина (СПбГУ) 12 ноября 2015г. 24 / 24

Mais conteúdo relacionado

Mais procurados

Всё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаВсё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаAndrey Karpov
 
2. Операторы языка C#
2. Операторы языка C#2. Операторы языка C#
2. Операторы языка C#Olga Maksimenkova
 
Язык программирования C#
Язык программирования C#Язык программирования C#
Язык программирования C#Dmitri Soshnikov
 
TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...
TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...
TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...Iosif Itkin
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...corehard_by
 
1. Типы данных. Операции. Ввод и вывод C#
1. Типы данных. Операции. Ввод и вывод C#1. Типы данных. Операции. Ввод и вывод C#
1. Типы данных. Операции. Ввод и вывод C#Olga Maksimenkova
 
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...Iosif Itkin
 
Алгоритмическая конструкция следование
Алгоритмическая конструкция следованиеАлгоритмическая конструкция следование
Алгоритмическая конструкция следованиеAndrey Dolinin
 
Алгоритмическая конструкция Повторение
Алгоритмическая конструкция ПовторениеАлгоритмическая конструкция Повторение
Алгоритмическая конструкция ПовторениеAndrey Dolinin
 
Запись вспомогательный алгоритмов на языка Паскаль
Запись вспомогательный алгоритмов на языка ПаскальЗапись вспомогательный алгоритмов на языка Паскаль
Запись вспомогательный алгоритмов на языка ПаскальAndrey Dolinin
 
Конструирование алгоритмов
Конструирование алгоритмовКонструирование алгоритмов
Конструирование алгоритмовAndrey Dolinin
 
Развитие технологий генерации эксплойтов на основе анализа бинарного кода
Развитие технологий генерации эксплойтов на основе анализа бинарного кодаРазвитие технологий генерации эксплойтов на основе анализа бинарного кода
Развитие технологий генерации эксплойтов на основе анализа бинарного кодаPositive Hack Days
 
Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)Alexandr Konfidentsialno
 
Основы С++ (операторы, типы данных, функции)
Основы С++ (операторы, типы данных, функции)Основы С++ (операторы, типы данных, функции)
Основы С++ (операторы, типы данных, функции)Olga Maksimenkova
 
Программирование разветвляющихся алгоритмов
Программирование разветвляющихся алгоритмовПрограммирование разветвляющихся алгоритмов
Программирование разветвляющихся алгоритмовAndrey Dolinin
 
2007 Никольская "Разработка программных средств для помехоустойчивого кодиров...
2007 Никольская "Разработка программных средств для помехоустойчивого кодиров...2007 Никольская "Разработка программных средств для помехоустойчивого кодиров...
2007 Никольская "Разработка программных средств для помехоустойчивого кодиров...RF-Lab
 
Основы программирования на C++
Основы программирования на C++Основы программирования на C++
Основы программирования на C++Olga Maksimenkova
 
Detecting logged in user's abnormal activity
Detecting logged in user's abnormal activityDetecting logged in user's abnormal activity
Detecting logged in user's abnormal activityArvids Godjuks
 

Mais procurados (20)

Всё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаВсё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программиста
 
2. Операторы языка C#
2. Операторы языка C#2. Операторы языка C#
2. Операторы языка C#
 
Язык программирования C#
Язык программирования C#Язык программирования C#
Язык программирования C#
 
TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...
TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...
TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
 
1. Типы данных. Операции. Ввод и вывод C#
1. Типы данных. Операции. Ввод и вывод C#1. Типы данных. Операции. Ввод и вывод C#
1. Типы данных. Операции. Ввод и вывод C#
 
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
 
Алгоритмическая конструкция следование
Алгоритмическая конструкция следованиеАлгоритмическая конструкция следование
Алгоритмическая конструкция следование
 
Алгоритмическая конструкция Повторение
Алгоритмическая конструкция ПовторениеАлгоритмическая конструкция Повторение
Алгоритмическая конструкция Повторение
 
Запись вспомогательный алгоритмов на языка Паскаль
Запись вспомогательный алгоритмов на языка ПаскальЗапись вспомогательный алгоритмов на языка Паскаль
Запись вспомогательный алгоритмов на языка Паскаль
 
Конструирование алгоритмов
Конструирование алгоритмовКонструирование алгоритмов
Конструирование алгоритмов
 
Развитие технологий генерации эксплойтов на основе анализа бинарного кода
Развитие технологий генерации эксплойтов на основе анализа бинарного кодаРазвитие технологий генерации эксплойтов на основе анализа бинарного кода
Развитие технологий генерации эксплойтов на основе анализа бинарного кода
 
C++ idioms
C++ idiomsC++ idioms
C++ idioms
 
Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)
 
Основы С++ (операторы, типы данных, функции)
Основы С++ (операторы, типы данных, функции)Основы С++ (операторы, типы данных, функции)
Основы С++ (операторы, типы данных, функции)
 
Программирование разветвляющихся алгоритмов
Программирование разветвляющихся алгоритмовПрограммирование разветвляющихся алгоритмов
Программирование разветвляющихся алгоритмов
 
2007 Никольская "Разработка программных средств для помехоустойчивого кодиров...
2007 Никольская "Разработка программных средств для помехоустойчивого кодиров...2007 Никольская "Разработка программных средств для помехоустойчивого кодиров...
2007 Никольская "Разработка программных средств для помехоустойчивого кодиров...
 
Основы программирования на C++
Основы программирования на C++Основы программирования на C++
Основы программирования на C++
 
Detecting logged in user's abnormal activity
Detecting logged in user's abnormal activityDetecting logged in user's abnormal activity
Detecting logged in user's abnormal activity
 

Destaque

TMPA-2015: The Application of Parameterized Hierarchy Templates for Automated...
TMPA-2015: The Application of Parameterized Hierarchy Templates for Automated...TMPA-2015: The Application of Parameterized Hierarchy Templates for Automated...
TMPA-2015: The Application of Parameterized Hierarchy Templates for Automated...Iosif Itkin
 
TMPA-2015: Information Support System for Autonomous Spacecraft Control Macro...
TMPA-2015: Information Support System for Autonomous Spacecraft Control Macro...TMPA-2015: Information Support System for Autonomous Spacecraft Control Macro...
TMPA-2015: Information Support System for Autonomous Spacecraft Control Macro...Iosif Itkin
 
TMPA-2015: Automated process of creating test scenarios for financial protoco...
TMPA-2015: Automated process of creating test scenarios for financial protoco...TMPA-2015: Automated process of creating test scenarios for financial protoco...
TMPA-2015: Automated process of creating test scenarios for financial protoco...Iosif Itkin
 
TMPA-2015: Software Engineering Education: The Messir Approach
TMPA-2015: Software Engineering Education: The Messir ApproachTMPA-2015: Software Engineering Education: The Messir Approach
TMPA-2015: Software Engineering Education: The Messir ApproachIosif Itkin
 
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...Iosif Itkin
 
TMPA-2015: FPGA-Based Low Latency Sponsored Access
TMPA-2015: FPGA-Based Low Latency Sponsored AccessTMPA-2015: FPGA-Based Low Latency Sponsored Access
TMPA-2015: FPGA-Based Low Latency Sponsored AccessIosif Itkin
 
TMPA-2015: Implementing the MetaVCG Approach in the C-light System
TMPA-2015: Implementing the MetaVCG Approach in the C-light SystemTMPA-2015: Implementing the MetaVCG Approach in the C-light System
TMPA-2015: Implementing the MetaVCG Approach in the C-light SystemIosif Itkin
 
TMPA-2015: Multi-Module Application Tracing in z/OS Environment
TMPA-2015: Multi-Module Application Tracing in z/OS EnvironmentTMPA-2015: Multi-Module Application Tracing in z/OS Environment
TMPA-2015: Multi-Module Application Tracing in z/OS EnvironmentIosif Itkin
 
TMPA-2015: ClearTH: a Tool for Automated Testing of Post Trade Systems
TMPA-2015: ClearTH: a Tool for Automated Testing of Post Trade SystemsTMPA-2015: ClearTH: a Tool for Automated Testing of Post Trade Systems
TMPA-2015: ClearTH: a Tool for Automated Testing of Post Trade SystemsIosif Itkin
 
TMPA-2015: The Verification of Functional Programs by Applying Statechart Dia...
TMPA-2015: The Verification of Functional Programs by Applying Statechart Dia...TMPA-2015: The Verification of Functional Programs by Applying Statechart Dia...
TMPA-2015: The Verification of Functional Programs by Applying Statechart Dia...Iosif Itkin
 
TMPA-2015: A Need To Specify and Verify Standard Functions
TMPA-2015: A Need To Specify and Verify Standard FunctionsTMPA-2015: A Need To Specify and Verify Standard Functions
TMPA-2015: A Need To Specify and Verify Standard FunctionsIosif Itkin
 
TMPA-2015: Generation of Test Scenarios for Non Deterministic and Concurrent ...
TMPA-2015: Generation of Test Scenarios for Non Deterministic and Concurrent ...TMPA-2015: Generation of Test Scenarios for Non Deterministic and Concurrent ...
TMPA-2015: Generation of Test Scenarios for Non Deterministic and Concurrent ...Iosif Itkin
 
TMPA-2015: Formal Methods in Robotics
TMPA-2015: Formal Methods in RoboticsTMPA-2015: Formal Methods in Robotics
TMPA-2015: Formal Methods in RoboticsIosif Itkin
 
TMPA-2015: Towards a Usable Defect Prediction Tool: Crossbreeding Machine Lea...
TMPA-2015: Towards a Usable Defect Prediction Tool: Crossbreeding Machine Lea...TMPA-2015: Towards a Usable Defect Prediction Tool: Crossbreeding Machine Lea...
TMPA-2015: Towards a Usable Defect Prediction Tool: Crossbreeding Machine Lea...Iosif Itkin
 
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...Iosif Itkin
 
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual MachinesTMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual MachinesIosif Itkin
 
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...Iosif Itkin
 
TMPA-2015: Kotlin: From Null Dereference to Smart Casts
TMPA-2015: Kotlin: From Null Dereference to Smart CastsTMPA-2015: Kotlin: From Null Dereference to Smart Casts
TMPA-2015: Kotlin: From Null Dereference to Smart CastsIosif Itkin
 
TMPA-2017: Layered Layouts for Software Systems Visualization
TMPA-2017: Layered Layouts for Software Systems VisualizationTMPA-2017: Layered Layouts for Software Systems Visualization
TMPA-2017: Layered Layouts for Software Systems VisualizationIosif Itkin
 
TMPA-2017: The Quest for Average Response Time
TMPA-2017: The Quest for Average Response TimeTMPA-2017: The Quest for Average Response Time
TMPA-2017: The Quest for Average Response TimeIosif Itkin
 

Destaque (20)

TMPA-2015: The Application of Parameterized Hierarchy Templates for Automated...
TMPA-2015: The Application of Parameterized Hierarchy Templates for Automated...TMPA-2015: The Application of Parameterized Hierarchy Templates for Automated...
TMPA-2015: The Application of Parameterized Hierarchy Templates for Automated...
 
TMPA-2015: Information Support System for Autonomous Spacecraft Control Macro...
TMPA-2015: Information Support System for Autonomous Spacecraft Control Macro...TMPA-2015: Information Support System for Autonomous Spacecraft Control Macro...
TMPA-2015: Information Support System for Autonomous Spacecraft Control Macro...
 
TMPA-2015: Automated process of creating test scenarios for financial protoco...
TMPA-2015: Automated process of creating test scenarios for financial protoco...TMPA-2015: Automated process of creating test scenarios for financial protoco...
TMPA-2015: Automated process of creating test scenarios for financial protoco...
 
TMPA-2015: Software Engineering Education: The Messir Approach
TMPA-2015: Software Engineering Education: The Messir ApproachTMPA-2015: Software Engineering Education: The Messir Approach
TMPA-2015: Software Engineering Education: The Messir Approach
 
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
 
TMPA-2015: FPGA-Based Low Latency Sponsored Access
TMPA-2015: FPGA-Based Low Latency Sponsored AccessTMPA-2015: FPGA-Based Low Latency Sponsored Access
TMPA-2015: FPGA-Based Low Latency Sponsored Access
 
TMPA-2015: Implementing the MetaVCG Approach in the C-light System
TMPA-2015: Implementing the MetaVCG Approach in the C-light SystemTMPA-2015: Implementing the MetaVCG Approach in the C-light System
TMPA-2015: Implementing the MetaVCG Approach in the C-light System
 
TMPA-2015: Multi-Module Application Tracing in z/OS Environment
TMPA-2015: Multi-Module Application Tracing in z/OS EnvironmentTMPA-2015: Multi-Module Application Tracing in z/OS Environment
TMPA-2015: Multi-Module Application Tracing in z/OS Environment
 
TMPA-2015: ClearTH: a Tool for Automated Testing of Post Trade Systems
TMPA-2015: ClearTH: a Tool for Automated Testing of Post Trade SystemsTMPA-2015: ClearTH: a Tool for Automated Testing of Post Trade Systems
TMPA-2015: ClearTH: a Tool for Automated Testing of Post Trade Systems
 
TMPA-2015: The Verification of Functional Programs by Applying Statechart Dia...
TMPA-2015: The Verification of Functional Programs by Applying Statechart Dia...TMPA-2015: The Verification of Functional Programs by Applying Statechart Dia...
TMPA-2015: The Verification of Functional Programs by Applying Statechart Dia...
 
TMPA-2015: A Need To Specify and Verify Standard Functions
TMPA-2015: A Need To Specify and Verify Standard FunctionsTMPA-2015: A Need To Specify and Verify Standard Functions
TMPA-2015: A Need To Specify and Verify Standard Functions
 
TMPA-2015: Generation of Test Scenarios for Non Deterministic and Concurrent ...
TMPA-2015: Generation of Test Scenarios for Non Deterministic and Concurrent ...TMPA-2015: Generation of Test Scenarios for Non Deterministic and Concurrent ...
TMPA-2015: Generation of Test Scenarios for Non Deterministic and Concurrent ...
 
TMPA-2015: Formal Methods in Robotics
TMPA-2015: Formal Methods in RoboticsTMPA-2015: Formal Methods in Robotics
TMPA-2015: Formal Methods in Robotics
 
TMPA-2015: Towards a Usable Defect Prediction Tool: Crossbreeding Machine Lea...
TMPA-2015: Towards a Usable Defect Prediction Tool: Crossbreeding Machine Lea...TMPA-2015: Towards a Usable Defect Prediction Tool: Crossbreeding Machine Lea...
TMPA-2015: Towards a Usable Defect Prediction Tool: Crossbreeding Machine Lea...
 
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
 
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual MachinesTMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
 
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
 
TMPA-2015: Kotlin: From Null Dereference to Smart Casts
TMPA-2015: Kotlin: From Null Dereference to Smart CastsTMPA-2015: Kotlin: From Null Dereference to Smart Casts
TMPA-2015: Kotlin: From Null Dereference to Smart Casts
 
TMPA-2017: Layered Layouts for Software Systems Visualization
TMPA-2017: Layered Layouts for Software Systems VisualizationTMPA-2017: Layered Layouts for Software Systems Visualization
TMPA-2017: Layered Layouts for Software Systems Visualization
 
TMPA-2017: The Quest for Average Response Time
TMPA-2017: The Quest for Average Response TimeTMPA-2017: The Quest for Average Response Time
TMPA-2017: The Quest for Average Response Time
 

Semelhante a TMPA-2015: Lexical analysis of dynamically formed string expressions

Статический анализ: вокруг Java за 60 минут
Статический анализ: вокруг Java за 60 минутСтатический анализ: вокруг Java за 60 минут
Статический анализ: вокруг Java за 60 минутAndrey Karpov
 
Мир Python функционалим с помощью библиотек
Мир Python  функционалим с помощью библиотекМир Python  функционалим с помощью библиотек
Мир Python функционалим с помощью библиотекPyNSK
 
Инструментальная поддержка встроенных языков в IDE.
Инструментальная поддержка встроенных языков в IDE.Инструментальная поддержка встроенных языков в IDE.
Инструментальная поддержка встроенных языков в IDE.Semyon Grigorev
 
Statis code analysis
Statis code analysisStatis code analysis
Statis code analysischashnikov
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey TeplyakovAlex Tumanoff
 
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...Alexey Paznikov
 
Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)Alex Ott
 
алгоритмизация
алгоритмизацияалгоритмизация
алгоритмизацияisva69
 
Tmpa-2014. table-based GLL parsing.
Tmpa-2014. table-based GLL parsing.Tmpa-2014. table-based GLL parsing.
Tmpa-2014. table-based GLL parsing.Semyon Grigorev
 
Тимофей Перевезенцев. Кухня современных python шаблонизаторов
Тимофей Перевезенцев. Кухня современных python шаблонизаторовТимофей Перевезенцев. Кухня современных python шаблонизаторов
Тимофей Перевезенцев. Кухня современных python шаблонизаторовotkds
 
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияAlexey Paznikov
 
Автоматическая генерация тестов по комментариям к программному коду
Автоматическая генерация тестов по комментариям к программному кодуАвтоматическая генерация тестов по комментариям к программному коду
Автоматическая генерация тестов по комментариям к программному кодуAlexey Noskov
 
Lambdas in java 8
Lambdas in java 8Lambdas in java 8
Lambdas in java 8chashnikov
 
Помоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другуПомоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другуAlexey Fyodorov
 
Помоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другуПомоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другуCEE-SEC(R)
 

Semelhante a TMPA-2015: Lexical analysis of dynamically formed string expressions (20)

Статический анализ: вокруг Java за 60 минут
Статический анализ: вокруг Java за 60 минутСтатический анализ: вокруг Java за 60 минут
Статический анализ: вокруг Java за 60 минут
 
Мир Python функционалим с помощью библиотек
Мир Python  функционалим с помощью библиотекМир Python  функционалим с помощью библиотек
Мир Python функционалим с помощью библиотек
 
Инструментальная поддержка встроенных языков в IDE.
Инструментальная поддержка встроенных языков в IDE.Инструментальная поддержка встроенных языков в IDE.
Инструментальная поддержка встроенных языков в IDE.
 
Statis code analysis
Statis code analysisStatis code analysis
Statis code analysis
 
Использование возможностей параллельных вычислений в синтезе функциональных п...
Использование возможностей параллельных вычислений в синтезе функциональных п...Использование возможностей параллельных вычислений в синтезе функциональных п...
Использование возможностей параллельных вычислений в синтезе функциональных п...
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
 
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
 
Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)
 
Введение в алгоритмы и структуры данных
Введение в алгоритмы и структуры данныхВведение в алгоритмы и структуры данных
Введение в алгоритмы и структуры данных
 
3. Массивы в C#
3. Массивы в C#3. Массивы в C#
3. Массивы в C#
 
алгоритмизация
алгоритмизацияалгоритмизация
алгоритмизация
 
Tmpa-2014. table-based GLL parsing.
Tmpa-2014. table-based GLL parsing.Tmpa-2014. table-based GLL parsing.
Tmpa-2014. table-based GLL parsing.
 
Lecture 8
Lecture 8Lecture 8
Lecture 8
 
Lecture 5
Lecture 5Lecture 5
Lecture 5
 
Тимофей Перевезенцев. Кухня современных python шаблонизаторов
Тимофей Перевезенцев. Кухня современных python шаблонизаторовТимофей Перевезенцев. Кухня современных python шаблонизаторов
Тимофей Перевезенцев. Кухня современных python шаблонизаторов
 
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
 
Автоматическая генерация тестов по комментариям к программному коду
Автоматическая генерация тестов по комментариям к программному кодуАвтоматическая генерация тестов по комментариям к программному коду
Автоматическая генерация тестов по комментариям к программному коду
 
Lambdas in java 8
Lambdas in java 8Lambdas in java 8
Lambdas in java 8
 
Помоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другуПомоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другу
 
Помоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другуПомоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другу
 

Mais 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
 

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

TMPA-2015: Lexical analysis of dynamically formed string expressions

  • 1. Третья международная научно- практическая конференция: Инструменты и методы анализа программ, ТМPА-2015 12–14 ноября, Санкт-Петербург Лексический анализ динамически формируемых строковых выражений Автор: Полубелова Марина Санкт-Петербургский государственный университет 12 ноября 2015г. Полубелова Марина (СПбГУ) 12 ноября 2015г. 1 / 24
  • 2. Примеры Встроенный SQL в С# private void Go (int cond){ string columnName = cond > 3 ? "X":(cond < 0 ? "Y":"Z"); string query = "SELECT name" + columnName + " FROM table"; Program.ExecuteImmediate(query); } Динамически генерируемый HTML в PHP-программах <?php $name = ’your name’; echo ’<table> <tr><th>Name</th></tr> <tr><td>’.$name.’</td></tr> </table>’; ?> Полубелова Марина (СПбГУ) 12 ноября 2015г. 2 / 24
  • 3. Мотивация Использование динамически формируемых строковых выражений Уменьшает надежность Нет статического поиска ошибок Увеличивает уязвимость SQL инъекции Межсайтовый скриптинг Полубелова Марина (СПбГУ) 12 ноября 2015г. 3 / 24
  • 4. Статический анализ программ Статический анализ позволяет получать знания о коде без его запуска Лексический анализ Синтаксический анализ Семантический анализ Полубелова Марина (СПбГУ) 12 ноября 2015г. 4 / 24
  • 5. Обзор существующих инструментов Проверка выражения на соответствие описанию некоторой эталонной грамматики Java String Analyzer PHP String Analyzer Alvor Статический анализ программы на уязвимость Pixy Stranger SAFELI Полубелова Марина (СПбГУ) 12 ноября 2015г. 5 / 24
  • 6. Разработка инструментов Возможны два подхода Создание универсального инструмента Создание набора генераторов и библиотек стандартных функций По описанию языка генерируются анализаторы (Lex, Yacc, ANTLR и т.д.) Для создания конечных решений можно использовать стандартные функции Полубелова Марина (СПбГУ) 12 ноября 2015г. 6 / 24
  • 7. Проект YaccConstructor YaccConstructor — модульный инструмент, предназначенный для проведения лексического и синтаксического анализа YaccConstructor — платформа для поддержки встроенных языков В лексическом анализе не поддерживаются циклы и строковые операции Полубелова Марина (СПбГУ) 12 ноября 2015г. 7 / 24
  • 8. Постановка задачи Цель: разработать автоматизированный подход создания лексического анализатора для динамически формируемого кода Разработать алгоритм лексического анализа выражений, формируемых с помощью строковых операций и циклов Сохранить привязку лексических единиц к исходному коду Реализовать генератор лексических анализаторов Полубелова Марина (СПбГУ) 12 ноября 2015г. 8 / 24
  • 9. Аппроксимация private void Go (int cond){ string columnName = cond > 3 ? "X":(cond < 0 ? "Y":"Z"); string query = "SELECT name" + columnName + " FROM table"; Program.ExecuteImmediate(query); } Множество значений { "SELECT nameX FROM table"; "SELECT nameY FROM table"; "SELECT nameZ FROM table"} Результат аппроксимации 0 1 "SELECT name" 32 "X" "Y" "Z" " FROM table" Полубелова Марина (СПбГУ) 12 ноября 2015г. 9 / 24
  • 10. Строковые операции string s = "SELECT nameX FROM tableY"; s = s.Replace("SELECT nameX", "b"); Многие строковые операции могут быть выражены с помощью конечных автоматов Для построения аппроксимации множества значений выражения использовался алгоритм, описанный в статье Fang Yu “Automata-based symbolic string analysis for vulnerability detection” Полубелова Марина (СПбГУ) 12 ноября 2015г. 10 / 24
  • 11. Пример M = replace(M1, M2, M3) 0 1 b 5 3 e 2 c 4 l 6 d m kf 0 2 e 1 d kf M1 M2 0 1 n m 0 1 b 5 3 n 2 c m 4l 6 n m m m M3 M Полубелова Марина (СПбГУ) 12 ноября 2015г. 11 / 24
  • 12. Лексический анализ строковых выражений На вход анализатору подается конечный автомат, полученный в результате аппроксимации множества значений строкового выражения На выходе получаем либо конечный автомат над токенами, либо список лексических ошибок. Токен содержит в себе: идентификатор токена конечный автомат, описывающий все возможные последовательности символов для данного токена Задача лексического анализа: получение конечного автомата над алфавитом токенов эталонной грамматики из конечного автомата над алфавитом символов обрабатываемого языка Полубелова Марина (СПбГУ) 12 ноября 2015г. 12 / 24
  • 13. Пример private void Go (int cond){ string columnName = cond > 3 ? "X":(cond < 0 ? "Y":"Z"); string query = "SELECT name" + columnName + " FROM table"; Program.ExecuteImmediate(query); } Результат аппроксимации 0 1 "SELECT name" 32 "X" "Y" "Z" " FROM table" Результат лексического анализа 0 1 SELECT 52 IDENT 3 FROM 4 IDENT EOF Полубелова Марина (СПбГУ) 12 ноября 2015г. 13 / 24
  • 14. Пример Результат лексического анализа 0 1 SELECT 52 IDENT 3 FROM 4 IDENT EOF Конечный автомат первого токена IDENT n: "SELECT name" (7,8) a: "SELECT name" (8,9) m: "SELECT name" (9,10) e: "SELECT name" (10,11) Z: "Z" (0,1) Y: "Y" (0,1) X: "X" (0,1) Конечный автомат второго токена IDENT t: " FROM table" (6,7) a: " FROM table" (7,8) b: " FROM table" (8,9) l: " FROM table" (9,10) e: " FROM table" (10,11) Полубелова Марина (СПбГУ) 12 ноября 2015г. 14 / 24
  • 15. Конечный преобразователь Конечный преобразователь — это конечный автомат, который может выводить конечное число символов для каждого входного символа Композиция конечных преобразователей — это два последовательно взаимодействующих конечных преобразователя: выход первого конечного преобразователя является входом для второго конечного преобразователя Полубелова Марина (СПбГУ) 12 ноября 2015г. 15 / 24
  • 16. Генератор лексических анализаторов Вход: Лексическая спецификация языка let digit = [’0’-’9’] let whitespace = [’ ’ ’t’ ’r’ ’n’] let num = [’-’]? digit+ (’.’digit+)? ([’e’ ’E’] digit+)? rule token = parse | whitespace token lb | num { NUMBER(lexeme lb) } | ’-’ { MINUS(lexeme lb) } | ’/’ { DIV(lexeme lb) } | ’+’ { PLUS(lexeme lb) } | "**" { POW(lexeme lb) } | ’*’ { MULT(lexeme lb) } rule token = parse | whitespace { None } | num { Some(NUMBER(gr)) } | ’-’ { Some(MINUS(gr)) } | ’/’ { Some(DIV(gr)) } | ’+’ { Some(PLUS(gr)) } | "**" { Some(POW(gr)) } | ’*’ { Some(MULT(gr)) } FsLex YaccConstructor Описание токенов Выход: Описание конечного преобразователя и вспомогательные функции Полубелова Марина (СПбГУ) 12 ноября 2015г. 16 / 24
  • 17. Алгоритм лексического анализа Этап 0 Вход: конечный автомат, полученный в результате построения аппроксимации Выход: конечный преобразователь, построенный из входного конечного автомата 0 1 + 2 * * 0 1 + : + 32 * : * eof : eof * : * Полубелова Марина (СПбГУ) 12 ноября 2015г. 17 / 24
  • 18. Алгоритм лексического анализа Этап 1 Вход: Конечный преобразователь, полученный на Этапе 0 Конечный преобразователь, полученный из описания, построенного генератором лексических анализаторов Выход: конечный преобразователь и набор лексических ошибок 0 1 + : ε 4 2 * : PLUS eof : MULT 3 * : ε * : POW Полубелова Марина (СПбГУ) 12 ноября 2015г. 18 / 24
  • 19. Алгоритм лексического анализа Этап 2. Интерпретация конечного преобразователя Вход: конечный преобразователь, полученный на Этапе 1 Выход: конечный автомат над алфавитом токенов эталонной грамматики 0 1 + : ε 4 2 * : PLUS eof : MULT 3 * : ε * : POW 0 1 PLUS 4 3POW 2MULT POW MULT EOF Полубелова Марина (СПбГУ) 12 ноября 2015г. 19 / 24
  • 20. Пример 1 private void Go (int number){ string query = "SELECT nameX FROM tableY WHERE x < "; while(query.Length < number){ query += "+ 1 ";} Program.ExecuteImmediate(query); } Результат аппроксимации 0 1 "SELECT nameX FROM tableY WHERE x < " "+ 1 " Результат лексического анализа 0 1 SELECT 92 IDENT 3 FROM 4 IDENT 5 WHERE 6 IDENT 7 LESS EOF 8 PLUS 10 NUM EOF PLUS Полубелова Марина (СПбГУ) 12 ноября 2015г. 20 / 24
  • 21. Пример 2 string query = "SELECT name"; for(int i = 0; i < 10; i++){ query += "X";} query += " FROM tableY"; Program.ExecuteImmediate(query); Результат лексического анализа 0 1 SELECT 52 IDENT 3 FROM 4 IDENT EOF Конечный автомат первого токена IDENT n: "SELECT name" (7,8) X: "X" (0,1) a: "SELECT name" (8,9) m: "SELECT name" (9,10) e: "SELECT name" (10,11) Полубелова Марина (СПбГУ) 12 ноября 2015г. 21 / 24
  • 23. Результаты В рамках данной работы были получены следующие результаты Разработан алгоритм лексического анализа выражений, формируемых с помощью строковых операций и циклов Реализован генератор лексических анализаторов на основе предложенного алгоритма Полубелова Марина (СПбГУ) 12 ноября 2015г. 23 / 24
  • 24. Контактная информация Полубелова Марина: polubelovam@gmail.com Григорьев Семён: Semen.Grigorev@jetbrains.com Исходный код YaccConstructor: https://github.com/YaccConstructor Полубелова Марина (СПбГУ) 12 ноября 2015г. 24 / 24