Синтаксический анализ для встроенных языков
Лекция- Computer Science
Разрабатывая программы Java, Python, PHP и т.д., мы зачастую используем несколько языков одновременно: в нашем коде на языке общего назначения, например, Java, встечаются вкрапления других языков, например, регулярные выражения, пути в файловой системе и другие URI, SQL-запросы, тэги XML и HTML. Особенно часто это происходит при разработке вэб-приложений и приложений уровня предприятия, то есть при выполнении работы, в которой, по многим оценкам, занято большинство программистов на планете.
Как происходит взаимодействие программы на Java и кода на SQL или HTML? Очень часто "малый" язык используется внутри строковых литералов, например, при работе с базой данных с использованием стандартной библиотеки JDBC, SQL-запросы в программе на Java могут выглядеть так: connection.prepareStatement("SELECT * FROM People" + whereClause).
Такой подход универсален: любой текстовый язык можно "встроить" в Java, заключив в двойные кавычки. Однако есть одна проблема: компилятор Java полностью игнорирует содержимое строковых литералов, и поэтому все ошибки (опечатки в именах, забытые скобки и т.д.) обнаруживаются только на стадии выполнения программы.
В докладе будет рассказано об алгоритмах, позволяющих статически (не запуская программу) гарантировать, что все строки в Java-программе, содержащие код на SQL или каком-то другом языке, не содержат синтаксических ошибок. Работа этих алгоритмов будет продемонстрирована примерах, заимствованных из реальных проектов. Также будут предложены возможные темы для бакалаврских и магистерских работ в данной области.
Работа выполнена в Университете Тарту и исследовательском центе STACC (Эстония) в соавторстве с А. Аннамаа и В. Вене.
Литература:
Обзорная статья по теме доклада: An interactive tool for analyzing embedded SQL queries, APLAS 2010, LNCS 6461, pp. 131-138, 2010. Препринт доступен без регистрации на домашней странице автора.
Страница лекции на сайте Computer Science Club