computer science семинар, весна 2011: Синтаксический анализ для...
TRANSCRIPT
![Page 1: Computer Science семинар, весна 2011: Синтаксический анализ для "встроенных" языков (Андрей Бреслав, кафедра](https://reader037.vdocuments.mx/reader037/viewer/2022110218/588142a11a28abf65a8b68c3/html5/thumbnails/1.jpg)
Синтаксическийанализдля«встроенных»языковАндрейБреславСоавторы:A.Annamaa,V.Vene(UniversityofTartu,Estonia)
![Page 2: Computer Science семинар, весна 2011: Синтаксический анализ для "встроенных" языков (Андрей Бреслав, кафедра](https://reader037.vdocuments.mx/reader037/viewer/2022110218/588142a11a28abf65a8b68c3/html5/thumbnails/2.jpg)
Немногоопредмете
НашаПрограмма Базаданных
SQL-Запросы
Данные
SELECT id, date, title FROM Orders WHERE (user_id=239) AND (completed=FALSE)ORDER BY date ASC
id=7,date=27.06.2010,title=“foo”
id=11,date=19.09.2010,title=“bar”
id=80,date=04.02.2011,title=“baz”
![Page 3: Computer Science семинар, весна 2011: Синтаксический анализ для "встроенных" языков (Андрей Бреслав, кафедра](https://reader037.vdocuments.mx/reader037/viewer/2022110218/588142a11a28abf65a8b68c3/html5/thumbnails/3.jpg)
Какработает«Нашапрограмма»
НашаПрограмма Базаданных
SQL-Запросы
Данные
public PreparedStatement selectOrders(int userId, boolean completedOnly, boolean ascOrder) {
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";
return ConnectionProvider.conn.prepareStatement(sql);}
![Page 4: Computer Science семинар, весна 2011: Синтаксический анализ для "встроенных" языков (Андрей Бреслав, кафедра](https://reader037.vdocuments.mx/reader037/viewer/2022110218/588142a11a28abf65a8b68c3/html5/thumbnails/4.jpg)
Ктозаметилошибки?
public PreparedStatement selectOrders(int userId, boolean completedOnly, boolean ascOrder) {
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";
return ConnectionProvider.conn.prepareStatement(sql);}
НашаПрограмма Базаданных
SQL-Запросы
Данные
![Page 5: Computer Science семинар, весна 2011: Синтаксический анализ для "встроенных" языков (Андрей Бреслав, кафедра](https://reader037.vdocuments.mx/reader037/viewer/2022110218/588142a11a28abf65a8b68c3/html5/thumbnails/5.jpg)
Постановказадачи
•Статически обнаруживатьсинтаксическиеошибкивSQL-запросахвнутриJava-строк
исообщатьонихпользователю,незапуская егопрограмму
![Page 6: Computer Science семинар, весна 2011: Синтаксический анализ для "встроенных" языков (Андрей Бреслав, кафедра](https://reader037.vdocuments.mx/reader037/viewer/2022110218/588142a11a28abf65a8b68c3/html5/thumbnails/6.jpg)
ЧтокромеSQL?
URI:git+ssh://foo.bar.com:foo.git
String.format(“Foo%s,%dbar!”,s,x);
![Page 7: Computer Science семинар, весна 2011: Синтаксический анализ для "встроенных" языков (Андрей Бреслав, кафедра](https://reader037.vdocuments.mx/reader037/viewer/2022110218/588142a11a28abf65a8b68c3/html5/thumbnails/7.jpg)
Общаясхемарешения• prepareStatement(sql)• prepareCall(sql)• executeQuery(sql)• executeUpdate(sql)
Какиестроковыевыражениянужно
проверить?
• Задачаалгоритмическинеразрешимавобщемслучае
• Какпредставитьрезультат?• Множествабываютбесконечными
Каковывозможныезначенияданного
выражения?
• CF⊆ CF– неразрешима• REG⊆ CF – неразрешима• REG⊆ REG – разрешима
• ноSQL– нерегулярный
Удовлетворяютлиэтизначениятребованиямсинтаксисавстроенного
языка?
![Page 8: Computer Science семинар, весна 2011: Синтаксический анализ для "встроенных" языков (Андрей Бреслав, кафедра](https://reader037.vdocuments.mx/reader037/viewer/2022110218/588142a11a28abf65a8b68c3/html5/thumbnails/8.jpg)
Общаясхемарешения• prepareStatement(sql)• prepareCall(sql)• executeQuery(sql)• executeUpdate(sql)
Какиестроковыевыражениянужно
проверить?
• Аппроксимация:Построимрегулярноемножество,содержащеевсевозможныезначениявыражения
Каковывозможныезначенияданного
выражения?
• Аппроксимация:Найдемрегулярныйязык,содержащийсявSQL,ибудемпроверятьвключениевидаREG⊆ REG – разрешимаязадача
Удовлетворяютлиэтизначениятребованиямсинтаксисавстроенного
языка?
![Page 9: Computer Science семинар, весна 2011: Синтаксический анализ для "встроенных" языков (Андрей Бреслав, кафедра](https://reader037.vdocuments.mx/reader037/viewer/2022110218/588142a11a28abf65a8b68c3/html5/thumbnails/9.jpg)
AbstractStringsString sql = "SELECT id";if (needNames)
sql += ", name";sql += "FROM People WHERE age <= " + maxAge;if (minAge >= 0)
sql += "AND age >= " + minAge;
connection.prepareStatement(sql);
"SELECT˽id" ",˽name"? "FROM˽People˽WHERE˽age˽<=˽"age ("AND˽age˽>=˽" minAge)?
for=>a+
+=>ab
if=>a|b
Сокращение:AS? := (AS | "")
![Page 10: Computer Science семинар, весна 2011: Синтаксический анализ для "встроенных" языков (Андрей Бреслав, кафедра](https://reader037.vdocuments.mx/reader037/viewer/2022110218/588142a11a28abf65a8b68c3/html5/thumbnails/10.jpg)
Времяработы
Проект РазмерLOC
# Выражений Время (сек)Память
всего ошибок общее AStrings кэш
Plazma 48’520 94 4 6 3.8 0.4 65
Compiere 319’570 1343 12 138 120 0.5 445
![Page 11: Computer Science семинар, весна 2011: Синтаксический анализ для "встроенных" языков (Андрей Бреслав, кафедра](https://reader037.vdocuments.mx/reader037/viewer/2022110218/588142a11a28abf65a8b68c3/html5/thumbnails/11.jpg)
AbstractParsing
• Управляющиетаблицынеменяются(дляданногоязыка)
• Измененяемоесостояние:• Стексостоянийпарсера• Позициясчитывающейголовки
• Основнаяидеяабстрактногоразбора• Длякаждойпозиции вовходном автомате
• Вычислитьмножествовсехвозможныхстеков состоянийпарсера
Множествострок(REG)
AbstractParser
Сообщенияоб
ошибках
Bison
Управляющиетаблицы
c
sn
s0
Упр.таблицыСтексо
стоя
ний
Вход
LR-Разбор
ACTION GOTO
SA
R
![Page 12: Computer Science семинар, весна 2011: Синтаксический анализ для "встроенных" языков (Андрей Бреслав, кафедра](https://reader037.vdocuments.mx/reader037/viewer/2022110218/588142a11a28abf65a8b68c3/html5/thumbnails/12.jpg)
s1s0
Алгоритм
s2s0
s0
a b
ce
d
s4s3
s5
es3
s5s1s0
s4s3
s3
![Page 13: Computer Science семинар, весна 2011: Синтаксический анализ для "встроенных" языков (Андрей Бреслав, кафедра](https://reader037.vdocuments.mx/reader037/viewer/2022110218/588142a11a28abf65a8b68c3/html5/thumbnails/13.jpg)
Времяработы• Sin – множествосостоянийвходногоавтомата• Sp – множествоуправляющихсостоянийпарсера• Stacks(SP)– множествостековсостоянийпарсера
• Времяработыалгоритма• O(|Sin|*|Stacks(Sp)|)
• Регулярнаяаппроксимация• ОграничимглубинустековсостоянийпарсерачисломD• O(|Sin|*|Stacks(Sp)|) =O(|Sin|*|Sp|D)< ∞
=∞, задачанеразрешима!
![Page 14: Computer Science семинар, весна 2011: Синтаксический анализ для "встроенных" языков (Андрей Бреслав, кафедра](https://reader037.vdocuments.mx/reader037/viewer/2022110218/588142a11a28abf65a8b68c3/html5/thumbnails/14.jpg)
Поискконтрпримеров• Пользователюнужнопоказать,какуюименнонеправильнуюстрокуможетсформироватьегопрограмма• Контрпример – путьвграфестеков,заканчивающийсяошибочным состоянием
• Обычнонасинтересуетсамыйкороткий контрпример• Какрешать? s1
s0
s2s0
s0
a b
ce
d
s4s3
s5
es3
s5s1s0
s4s3
s3
Контрпримеры:- a(bc)+e- ab(cb)+d
![Page 15: Computer Science семинар, весна 2011: Синтаксический анализ для "встроенных" языков (Андрей Бреслав, кафедра](https://reader037.vdocuments.mx/reader037/viewer/2022110218/588142a11a28abf65a8b68c3/html5/thumbnails/15.jpg)
Техническиетребования• Нужносообщатьобошибкахвпроцессенаписаниякода• нужныинкрементальныеалгоритмы
• Подходдолженединообразноподдерживатьразныевстроенныеязыки
• Хотелосьбыпростоописыватьсинтаксис(контекстно-свободной)грамматикой
• Нехотелосьбы создаватьтакиеграмматикивручную.Лучшевзятьготовую,например,изстандартаязыка.
• Грамматики,приводимыевстандартах,содержатмножествонеоднозначностей
![Page 16: Computer Science семинар, весна 2011: Синтаксический анализ для "встроенных" языков (Андрей Бреслав, кафедра](https://reader037.vdocuments.mx/reader037/viewer/2022110218/588142a11a28abf65a8b68c3/html5/thumbnails/16.jpg)
Чтоянерассказал• AbstractGLR-Parsing• Возможностьработатьснеоднозначнымиграмматиками
• AbstractLexicalAnalysis• ВходнойалфавитпарсеранасамомделенеUnicode,аалфавитлексем:ключевыхслов,идентификаторов,констант...• Каксконвертироватьодинавтоматвдругой?
• Какпроверятьотсутствиеопечатоквидентификаторах• Автоматическиетесты• [Открытыйвопрос] Булевскиеграмматики
• Методможнообобщить так,чтодлялюбогоавтоматногопредикатаможно• Проверитьегоистинностьнарегулярноммножествестрок• Найтикратчайшийконтрпример
![Page 17: Computer Science семинар, весна 2011: Синтаксический анализ для "встроенных" языков (Андрей Бреслав, кафедра](https://reader037.vdocuments.mx/reader037/viewer/2022110218/588142a11a28abf65a8b68c3/html5/thumbnails/17.jpg)
Темыдипломныхработ1. [М]Использованиебулевскихграмматики Abstract
Parsingдляобнаруженияопечатоквидентификаторах
2. [М]Мспользованиебулевскихграмматик дляреализацииавтодополненияидентификатороввSQL-запросах
3. [Б]Оптимизациярегулярнойабстракции:ограничиватьглубинустекатолькотамитак,гдеикакэтонеобходимо
4. [Б]ОптимизацияпотребленияпамятиGLRAbstractParsing – разработкаиреализацияэффективныхструктурданныхдляхранениямножествамножествстеков