SQL*Plus действительно говорит Вам таблицу, которая не существует. Например:
SQL> select
2 *
3 from
4 user_tables a,
5 non_existent_table b
6 where
7 a.table_name = b.table_name;
non_existent_table b
*
ERROR at line 5:
ORA-00942: table or view does not exist
Здесь это показывает, что название недостающей таблицы и номера строки в SQL-операторе, где ошибка происходит.
Точно так же в коротком SQL-операторе Вы видите, что звездочка выделяет название неизвестной таблицы:
SQL> select * from user_tables a, non_existent_table b where a.table_name = b.table_name;
select * from user_tables a, non_existent_table b where a.table_name = b.table_name
*
ERROR at line 1:
ORA-00942: table or view does not exist
С точки зрения Вашего вопроса, я предполагаю причину, сообщение об ошибке не включает название таблицы, то, что само сообщение об ошибке должно быть статическим текстом. Номер строки и местоположение в строке ошибки ясно пасуются назад к SQL*Plus (так или иначе).
Это начало моей оценки, так как книга все еще дорабатывается, но DSL в действии , http://www.manning.com/ghosh , кажется хорошим.
Вы также можете посмотреть Создание доменно-специфических языков в Boo , http://www.manning.com/rahien .
Вам может понравиться новая книга Мартина Фаулера Domain Specific Languages . Работа над ним еще не завершена, и большая часть ее доступна в Интернете. Он предназначен быть независимым от языка.
Ниже приведены некоторые презентации RubyConf, которые я нашел полезными (концепции, по крайней мере, должны соответствовать Clojure):
Шаблоны реализации языка Теренс Парр, создатель Antlr и Шаблон строки , возможно, лучшие инструменты для создания синтаксических анализаторов и лексеров.
Книга в настоящее время находится в стадии «бета», но ее все еще хорошо читают. Если вы купите его, вы получите обновления, а также финальную версию.
Похоже, вы описываете внешний DSL. Для этого вам необходимо настроить синтаксический анализатор.
У вас есть два варианта: написать свой собственный (что может быть сложно) или использовать существующую систему, такую как ANTLR , для определения грамматики. Это Java, поэтому он должен быть совместим с Clojure.