slide1
Download
Skip this Video
Download Presentation
Синтаксический анализ для «встроенных» языков

Loading in 2 Seconds...

play fullscreen
1 / 17

Синтаксический анализ для «встроенных» языков - PowerPoint PPT Presentation


  • 156 Views
  • Uploaded on

Синтаксический анализ для «встроенных» языков. Андрей Бреслав Соавторы: A. Annamaa , V. Vene (University of Tartu, Estonia). Немного о предмете. SELECT id, date, title FROM Orders WHERE ( user_id =239) AND (completed= FALSE) ORDER BY date ASC. SQL- Запросы. Наша Программа.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Синтаксический анализ для «встроенных» языков' - maggy-herrera


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1

Синтаксический анализ для«встроенных» языков

Андрей Бреслав

Соавторы: A. Annamaa, V. Vene

(University of Tartu, Estonia)

slide2
Немного о предмете

SELECT id, date, title

FROM Orders

WHERE (user_id=239) AND (completed=FALSE)

ORDERBY date ASC

SQL-Запросы

Наша

Программа

База данных

Данные

slide3
Как работает «Наша программа»

SQL-Запросы

Наша

Программа

База данных

Данные

publicPreparedStatementselectOrders(

intuserId, booleancompletedOnly,

booleanascOrder){

String sql = "SELECT id, date, title,"+

"FROM Orders" +

"WHERE (user_id=" + userId;

if(completedOnly)

sql+= "AND (completed=FALSE)";

sql+= "ORDER BY date";

sql+= (ascOrder) ? "ASC" : "DESC";

returnConnectionProvider.conn.prepareStatement(sql);

}

slide4
Кто заметил ошибки?

SQL-Запросы

Наша

Программа

База данных

Данные

publicPreparedStatementselectOrders(

intuserId, booleancompletedOnly,

booleanascOrder){

String sql = "SELECT id, date, title,"+

"FROM Orders" +

"WHERE (user_id=" + userId;

if(completedOnly)

sql+= "AND (completed=FALSE)";

sql+= "ORDER BY date";

sql+= (ascOrder) ? "ASC" : "DESC";

returnConnectionProvider.conn.prepareStatement(sql);

}

slide5
Постановка задачи
  • Статически обнаруживать

синтаксические ошибки

в SQL-запросах внутри Java-строк

и сообщать о них пользователю,

не запуская его программу

slide6
Что кроме SQL?

URI:

git+ssh://foo.bar.com:foo.git

String.format(“Foo %s, %d bar!”, s, x);

abstract strings
Abstract Strings

String sql= "SELECT id";

if(needNames)

sql+= ", name";

sql+= "FROM People WHERE age <= " + maxAge;

if(minAge >= 0)

sql+= "AND age >= " + minAge;

connection.prepareStatement(sql);

Где аппроксимация?

Сокращение:

AS? := (AS | "")

"SELECT˽id"",˽name"? "FROM˽People˽WHERE˽age˽<=˽"

age("AND˽age˽>=˽"minAge)?

abstract parsing
Abstract Parsing

Bison

LR-Разбор

  • Управляющие таблицы не меняются(для данного языка)
  • Измененяемое состояние:
    • Стек состояний парсера
    • Позиция считывающей головки
  • Основная идея абстрактного разбора
    • Для каждой позицииво входномавтомате
      • Вычислить множество всех возможных стековсостояний парсера

Множествострок (REG)

Управляющие

таблицы

Вход

Abstract

Parser

Сообщения

об

ошибках

Стек состояний

Упр. таблицы

slide13
Время работы
  • Sin – множество состояний входного автомата
  • Sp – множество управляющих состояний парсера
  • Stacks(SP) – множество стеков состояний парсера
  • Время работы алгоритма
    • O(|Sin|*|Stacks(Sp)|)
  • Регулярная аппроксимация
    • Ограничим глубину стеков состояний парсера числом D
    • O(|Sin|*|Stacks(Sp)|)= O(|Sin|*|Sp|D)
  • = , задача неразрешима!
slide14
Поиск контрпримеров
  • Пользователю нужно показать, какую именно неправильную строку может сформировать его программа
    • Контрпример – путь в графе стеков, заканчивающийся ошибочным состоянием
    • Обычно нас интересует самый короткий контрпример
  • Как решать?

a

b

c

e

d

Контрпримеры:

- a(bc)+e

- ab(cb)+d

slide15
Технические требования
  • Нужно сообщать об ошибках в процессе написания кода
    • нужны инкрементальные алгоритмы
  • Подход должен единообразно поддерживать разные встроенные языки
    • Хотелось бы просто описывать синтаксис (контекстно-свободной) грамматикой
    • Не хотелось бысоздавать такие грамматики вручную. Лучше взять готовую, например, из стандарта языка.
    • Грамматики, приводимые в стандартах, содержат множество неоднозначностей
slide16
Что я не рассказал
  • Abstract GLR-Parsing
    • Возможность работать с неоднозначными грамматиками
  • Abstract Lexical Analysis
    • Входной алфавит парсера на самом деле не Unicode, а алфавит лексем: ключевых слов, идентификаторов, констант...
      • Как сконвертировать один автомат в другой?
  • Как проверять отсутствие опечаток в идентификаторах
    • Автоматические тесты
    • [Открытый вопрос] Булевские грамматики
  • Метод можно обобщить так, что для любого автоматного предиката можно
    • Проверить его истинность на регулярном множестве строк
    • Найти кратчайший контрпример
slide17
Темы дипломных работ
  • [М] Использование булевских грамматик и Abstract Parsing для обнаружения опечаток в идентификаторах
  • [М] Мспользование булевских грамматик для реализации автодополнения идентификаторов в SQL-запросах
  • [Б] Оптимизация регулярной абстракции: ограничивать глубину стека только там и так, где и как это необходимо
  • [Б] Оптимизация потребления памяти GLR Abstract Parsing – разработка и реализация эффективных структур данных для хранения множества множеств стеков
ad