Я пишу переводчик, который преобразует DSL на несколько языков программирования (похоже, Apache Thrift).Как проверить синтаксис SQL, Language в String во время компиляции (Scala)
Например,
// an example DSL
LOG_TYPE: COMMERCE
COMMON_FIELD : session_id
KEY: buy
FIELD: item_id, transaction_id
KEY: add_to_cart
FIELD: item_id
// will be converted to Java
class Commerce {
private String session_id
private String key;
private String item_id;
private String transaction_id
// auto-created setter, getter, helper methods
...
}
Оно также должно быть переведено на Objective-C и JavaScript.
Чтобы осуществить это, я должен Заменить строку
// 1. create or load code fragments
String variableDeclarationInJava = "private String {$field};";
String variableDeclarationInJavascript = "...";
String variableDeclarationInObjC = "...";
// 2. replace it
variableDeclarationInJava.replace(pattern, fieldName)
...
Замена фрагмента кода в строки не типобезопасен и разочарование, так как это не какой-либо информации, даже в случае возникновения ошибок.
Итак, мой вопрос: Можно ли разобрать String во время компиляции?Scala sqltyped library
Если возможно, я хотел бы знать, как я могу его достичь.
Спасибо.
Вряд ли можно проверить синтаксис SQL во время компиляции, так как это зависит от поставщика БД. Могут использовать макро- и/или строчную интерполяцию для проверки синтаксиса строк. – cchantep
В моем случае это было бы проще, чем проверка синтаксиса SQL, поскольку я должен проверить ** ограниченный синтаксис языка (например, создание функции, класс, переменные ..) Не могли бы вы порекомендовать какой-нибудь полезный ресурс для макроса для перевода DSL? – 1ambda
Существуют различные существующие открытые проекты (например, Slick). Вы можете посмотреть источники. – cchantep