SlideShare a Scribd company logo
1 of 13
Download to read offline
YaccConstructor
Задачи на весенний семестр 2016
Автор: Семён Григорьев
Лаборатория языковых инструментов JetBrains
Санкт-Петербургский государственный университет
Математико-механический факультет
8 февраля 2016г.
Семён Григорьев 8 февраля 2016г. 1 / 13
YaccConstructor
Исследования в области лексического и синтаксического анализа
Открытый исходный код
https://github.com/YaccConstructor
Основной язык разработки — F#
Семён Григорьев 8 февраля 2016г. 2 / 13
Требования к знаниям и навыкам
Знакомство с функциональным программированием (F# или
OCaml)
Знания в области лексического и синтаксического анализа
Знания в области техник трансляции
Умение читать научные статьи, чужой код
Навыки работы с Git/GitHub, Microsof VisualStudio
Семён Григорьев 8 февраля 2016г. 3 / 13
Анализ динамически
формируемого кода
Динамически формируемый код
string res = "";
for(i = 0; i < l; i++)
res = "()" + res;
use(res);
Аппроксимация
("()")*
Грамматика
start ::= s
s ::= LBR s RBR s
s ::= 𝜖
Лес разбора (SPPF)
start_rule
prod 2
s !
prod 0 prod 0
LBR s RBR
eps
LBR s RBR
eps
Семён Григорьев 8 февраля 2016г. 5 / 13
Задача: применение анализа строковых выражений для
JavaScript eval
Цель: трансляция стандартного eval в "безопасный"
Martin Lester. Information Flow Analysis for a Dynamically Typed
Functional Language with Staged Metaprogramming
Martin Lester. Analysing Eval using Staged Metaprogramming
Исследовательская задача: диплом, публикации
Разбивается на 2 подзадачи
Получение аппроксимации
Трансляция SPPF в "безопасный eval"
Семён Григорьев 8 февраля 2016г. 6 / 13
Задача: использование SPPF в абстрактном
синтаксическом анализе
Абстрактный синтаксический анализ — один из подходов к
анализу динамически формируемого кода
K. G. Doh, H. Kim, D. A. Schmidt. Static Validation of Dynamically
Generated HTML Documents Based on Abstract Parsing and Semantic
Processing
E. Verbitskaia, S. Grigorev, D. Avdyukhin. Relaxed Parsing of Regular
Approximations of String-Embedded Languages
Реализовать вычисление семантики по статьям
Сравнить с нашим подходом
А можно ли использовать SPPF
Диплом, публикации
Семён Григорьев 8 февраля 2016г. 7 / 13
Средства для сертификацонного
программирования
или
F# + F* = ?
Сертификационное программирование
F* (https://www.fstar-lang.org/tutorial/)
Coq
Agda
...
val sort: l:list int ->
Tot (m:list int{sorted m
/ (forall i. mem i l = mem i m)})
(decreases (length l))
let rec sort l = match l with
| [] -> []
| pivot::tl ->
let hi, lo = partition (cmp pivot) tl in
let l’ = append (sort lo) (pivot::sort hi) in
dedup l’
Семён Григорьев 8 февраля 2016г. 9 / 13
Задача: объединение F# и F*
F# + F* = F#*
Парсер для F#*
Транслятор из AST F# в AST F*
Разбивается на подзадачи (до 3 человек)
Диплом (вся задача), публикации
Семён Григорьев 8 февраля 2016г. 10 / 13
Задача: поддержка F#*
в Microsoft Visual Studio
Поддержать в модели проекта, редакторе, отладчике
Создание файлов, шаблоны
Подсветка синтаксиса
Сообщения об ошибках, подсветка ошибок
....
Разбивается на подзадачи (до 4 человек)
Диплом (вся задача), публикации
Семён Григорьев 8 февраля 2016г. 11 / 13
Задача: межъязыковое взаимодействие F# и F*
Использовать функции, написанные на F* в F#(.NET)
Использовать функции, написанные на F#(.NET) в F*
Сохранить типизацию/вывод типов
Разбивается на подзадачи (до 2 человек)
Диплом (вся задача), публикации
Семён Григорьев 8 февраля 2016г. 12 / 13
Контакты
Почта: rsdpisuy@gmail.com
Исходный код YaccConstructor:
https://github.com/YaccConstructor
Google+ сообщество: https://goo.gl/DuPWkM
Семён Григорьев 8 февраля 2016г. 13 / 13

More Related Content

Similar to Research projects spring 2016

ZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and MultilingualZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and MultilingualZFConf Conference
 
Groovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conferenceGroovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conferencevoituk
 
Office development tips and tricks
Office development tips and tricksOffice development tips and tricks
Office development tips and tricksEugene Agafonov
 
Labor Market Research
Labor Market ResearchLabor Market Research
Labor Market ResearchNLPseminar
 
Программирование с помощью блоков в школе
Программирование с помощью блоков в школеПрограммирование с помощью блоков в школе
Программирование с помощью блоков в школеMaria Zilberman
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.Igor Shkulipa
 
Flame graph: новый взгляд на старое профилирование
Flame graph: новый взгляд на старое профилированиеFlame graph: новый взгляд на старое профилирование
Flame graph: новый взгляд на старое профилированиеКирилл Борисов
 
язык программирования Go
язык программирования Goязык программирования Go
язык программирования GoMac'Kensi Lord
 
Евгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияЕвгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияPlatonov Sergey
 
Custom Language Plugin for JetBrains IDEA
Custom Language Plugin for JetBrains IDEACustom Language Plugin for JetBrains IDEA
Custom Language Plugin for JetBrains IDEAAlexander Zastashkov
 
Ada in education-09-oct06
Ada in education-09-oct06Ada in education-09-oct06
Ada in education-09-oct06Pavel Zhukov
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальBadoo Development
 
AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)Andrey Gordienkov
 
Aspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAndrey Gordienkov
 
Инструментальная поддержка встроенных языков в IDE.
Инструментальная поддержка встроенных языков в IDE.Инструментальная поддержка встроенных языков в IDE.
Инструментальная поддержка встроенных языков в IDE.Semyon Grigorev
 
Рефакторить легаси код? Только с юнит тестами!
Рефакторить легаси код? Только с юнит тестами!Рефакторить легаси код? Только с юнит тестами!
Рефакторить легаси код? Только с юнит тестами!SmartStepGroup
 
Development of a plugin for VS Code that supports ACSL language.
Development of a plugin for VS Code that supports ACSL language.Development of a plugin for VS Code that supports ACSL language.
Development of a plugin for VS Code that supports ACSL language.Denis Zakharov
 
Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычностьStepan Tanasiychuk
 

Similar to Research projects spring 2016 (20)

ZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and MultilingualZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and Multilingual
 
Groovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conferenceGroovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conference
 
Office development tips and tricks
Office development tips and tricksOffice development tips and tricks
Office development tips and tricks
 
Labor Market Research
Labor Market ResearchLabor Market Research
Labor Market Research
 
Программирование с помощью блоков в школе
Программирование с помощью блоков в школеПрограммирование с помощью блоков в школе
Программирование с помощью блоков в школе
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.
 
Flame graph: новый взгляд на старое профилирование
Flame graph: новый взгляд на старое профилированиеFlame graph: новый взгляд на старое профилирование
Flame graph: новый взгляд на старое профилирование
 
язык программирования Go
язык программирования Goязык программирования Go
язык программирования Go
 
Евгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияЕвгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализация
 
Custom Language Plugin for JetBrains IDEA
Custom Language Plugin for JetBrains IDEACustom Language Plugin for JetBrains IDEA
Custom Language Plugin for JetBrains IDEA
 
Ada in education-09-oct06
Ada in education-09-oct06Ada in education-09-oct06
Ada in education-09-oct06
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон Довгаль
 
AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)
 
Aspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design Patterns
 
Инструментальная поддержка встроенных языков в IDE.
Инструментальная поддержка встроенных языков в IDE.Инструментальная поддержка встроенных языков в IDE.
Инструментальная поддержка встроенных языков в IDE.
 
Немного о F#
Немного о F#Немного о F#
Немного о F#
 
Net 3.0 & Linq
Net 3.0 & LinqNet 3.0 & Linq
Net 3.0 & Linq
 
Рефакторить легаси код? Только с юнит тестами!
Рефакторить легаси код? Только с юнит тестами!Рефакторить легаси код? Только с юнит тестами!
Рефакторить легаси код? Только с юнит тестами!
 
Development of a plugin for VS Code that supports ACSL language.
Development of a plugin for VS Code that supports ACSL language.Development of a plugin for VS Code that supports ACSL language.
Development of a plugin for VS Code that supports ACSL language.
 
Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычность
 

Research projects spring 2016

  • 1. YaccConstructor Задачи на весенний семестр 2016 Автор: Семён Григорьев Лаборатория языковых инструментов JetBrains Санкт-Петербургский государственный университет Математико-механический факультет 8 февраля 2016г. Семён Григорьев 8 февраля 2016г. 1 / 13
  • 2. YaccConstructor Исследования в области лексического и синтаксического анализа Открытый исходный код https://github.com/YaccConstructor Основной язык разработки — F# Семён Григорьев 8 февраля 2016г. 2 / 13
  • 3. Требования к знаниям и навыкам Знакомство с функциональным программированием (F# или OCaml) Знания в области лексического и синтаксического анализа Знания в области техник трансляции Умение читать научные статьи, чужой код Навыки работы с Git/GitHub, Microsof VisualStudio Семён Григорьев 8 февраля 2016г. 3 / 13
  • 5. Динамически формируемый код string res = ""; for(i = 0; i < l; i++) res = "()" + res; use(res); Аппроксимация ("()")* Грамматика start ::= s s ::= LBR s RBR s s ::= 𝜖 Лес разбора (SPPF) start_rule prod 2 s ! prod 0 prod 0 LBR s RBR eps LBR s RBR eps Семён Григорьев 8 февраля 2016г. 5 / 13
  • 6. Задача: применение анализа строковых выражений для JavaScript eval Цель: трансляция стандартного eval в "безопасный" Martin Lester. Information Flow Analysis for a Dynamically Typed Functional Language with Staged Metaprogramming Martin Lester. Analysing Eval using Staged Metaprogramming Исследовательская задача: диплом, публикации Разбивается на 2 подзадачи Получение аппроксимации Трансляция SPPF в "безопасный eval" Семён Григорьев 8 февраля 2016г. 6 / 13
  • 7. Задача: использование SPPF в абстрактном синтаксическом анализе Абстрактный синтаксический анализ — один из подходов к анализу динамически формируемого кода K. G. Doh, H. Kim, D. A. Schmidt. Static Validation of Dynamically Generated HTML Documents Based on Abstract Parsing and Semantic Processing E. Verbitskaia, S. Grigorev, D. Avdyukhin. Relaxed Parsing of Regular Approximations of String-Embedded Languages Реализовать вычисление семантики по статьям Сравнить с нашим подходом А можно ли использовать SPPF Диплом, публикации Семён Григорьев 8 февраля 2016г. 7 / 13
  • 9. Сертификационное программирование F* (https://www.fstar-lang.org/tutorial/) Coq Agda ... val sort: l:list int -> Tot (m:list int{sorted m / (forall i. mem i l = mem i m)}) (decreases (length l)) let rec sort l = match l with | [] -> [] | pivot::tl -> let hi, lo = partition (cmp pivot) tl in let l’ = append (sort lo) (pivot::sort hi) in dedup l’ Семён Григорьев 8 февраля 2016г. 9 / 13
  • 10. Задача: объединение F# и F* F# + F* = F#* Парсер для F#* Транслятор из AST F# в AST F* Разбивается на подзадачи (до 3 человек) Диплом (вся задача), публикации Семён Григорьев 8 февраля 2016г. 10 / 13
  • 11. Задача: поддержка F#* в Microsoft Visual Studio Поддержать в модели проекта, редакторе, отладчике Создание файлов, шаблоны Подсветка синтаксиса Сообщения об ошибках, подсветка ошибок .... Разбивается на подзадачи (до 4 человек) Диплом (вся задача), публикации Семён Григорьев 8 февраля 2016г. 11 / 13
  • 12. Задача: межъязыковое взаимодействие F# и F* Использовать функции, написанные на F* в F#(.NET) Использовать функции, написанные на F#(.NET) в F* Сохранить типизацию/вывод типов Разбивается на подзадачи (до 2 человек) Диплом (вся задача), публикации Семён Григорьев 8 февраля 2016г. 12 / 13
  • 13. Контакты Почта: rsdpisuy@gmail.com Исходный код YaccConstructor: https://github.com/YaccConstructor Google+ сообщество: https://goo.gl/DuPWkM Семён Григорьев 8 февраля 2016г. 13 / 13