Показать сообщение отдельно
Старый 17.11.2015, 00:36   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
прикольная лекция, красивая постановка задачи.
прикольная лекция, красивая постановка задачи.
https://www.youtube.com/watch?v=PARloe1mPkc

на видео снят только лектор, поэтому презентацию надо брать отсюда: http://old.compsciclub.ru/sites/defa...r_breslav.pptx

постановка задачи:
Есть код на исходном языке (например, на java), который генерирует строчку на другом "встроенном" языке (например, на sql). Создать инструмент, который, не запуская(!!!!) исходный код, ответит, является ли строка на "встроенном" языке синтаксически правильной для "встроенного" языка? А если не является, то указать в каких именно местах.

подход к решению задачи:
выполняется синтаксический анализ кода на исходном языке и строится регулярное выражение для строки встроенного языка. по регулярному выражению доказывается валидность для встроенного языка.

пример правильного Java-кода с синтаксическими ошибками в 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);
}
красиво, черт возьми.

upd: с 1:03:30 демонстрируется как это работает вживую https://youtu.be/PARloe1mPkc?t=1h3m30s

Последний раз редактировалось mazzy; 17.11.2015 в 08:28.
За это сообщение автора поблагодарили: gl00mie (1), SOVA (1), Дмитрий А.А. (1).