Похожие презентации:
Об универсальном анализе кода или «Зачем нам ещё один анализатор, как его можно сделать и куда применять»
1. Об универсальном анализе кода
или«Зачем нам ещё один анализатор,
как его можно сделать и куда применять»
15.05.2019
Никита Субботин
1
2. Зачем SAST?
15.05.2019Никита Субботин
2
3. Ладно, зачем ещё один?
15.05.2019Никита Субботин
3
4. SQL-инъекции в 2к17?!
15.05.2019Никита Субботин
4
5. А языки правда отличаются?
JavaString query
= "SELECT * FROM user WHERE name = " +
name;
= "SELECT * FROM user WHERE name = " +
name
Python
query
C++
std::string query = "SELECT * FROM user WHERE name = " +
name;
PHP
$query
= "SELECT * FROM user WHERE name = " . $name;
Спойлер: иногда не очень
15.05.2019
Никита Субботин
5
6. Классика
DRYDon’t Repeat Yourself
KISS
Keep It Simple Stupid
YAGNI
You Ain’t Gonna Need It
15.05.2019
Никита Субботин
6
7.
15.05.2019Никита Субботин
7
8. Сужаем область
Цель – расширение класса задач модуля PT.PM путем интеграцииподсистемы анализа языка Python.
Почему Python:
• популярный (топы: Tiobe, PYPL, RedMonk)
• простой (КС-грамматика по Хомскому)
• могу, умею, практикую
15.05.2019
Никита Субботин
8
9. Что и как делаем? - 1
Как: ANTLR4 +репозиторий antrl4-grammars +
документация Python +
официальная грамматика Python
15.05.2019
Никита Субботин
9
10. Что и как делаем? - 2
Как: PT.PM API +C#-парсер +
руки
15.05.2019
Никита Субботин
10
11. Но… - 1
Источник: https://docs.python.org/3/reference/grammar.html15.05.2019
Никита Субботин
11
12. Но… - 2
decorated: decorators (classdef | funcdef | async_funcdef)
<LOTS OF stuff here>
compound_stmt
: if_stmt | while_stmt | for_stmt | try_stmt
| with_stmt | funcdef | classdef
| decorated // added later
| async_stmt // added even later
15.05.2019
Никита Субботин
12
13. Но… - 3
VS.15.05.2019
Никита Субботин
13
14. Но… - n
• INDENTS & DEDENTS• Неэффективные алгоритмы
• Мало документации по ANTLR4 в свободном доступе
• Устаревшая документация на PT.PM
• Меняющийся API PT.PM
• И так далее …
15.05.2019
Никита Субботин
14
15. Так что в итоге?
• Полный рефакторинг грамматики• Порт парсера в C#
• Порт AST в UST
• Полное покрытие грамматики тестами
• Несколько тестов на матчинг шаблонов
15.05.2019
Никита Субботин
15
16. Что дальше?
• Увеличение базы шаблонов• Рефакторинг кода
• Документация
• Покрытие шаблонов тестами
• Фикс документации Python
15.05.2019
Никита Субботин
16
17. Спасибо!
Никита СубботинСпасибо!
Github:
inkoit
Telegram: nsubbotin
Mail:
[email protected]