Я изучаю antlr4 и пытаюсь создать простой DSL (предметно-ориентированный язык), поскольку бэкэнд моего приложения разработан на Java, цель состоит в том, чтобы проанализировать DSL и запустить с бэкэндом Java.Мой DSL является упрощенной версией Java и выглядит следующим образом:
typeA a = expression;
Грамматика и лексер основаны на this .Это похоже на реализацию Java с помощью Java.Теперь проблема, с которой я столкнулся, заключается в синтаксическом анализе операторов типа typeA a = expression;
, тип переменной a
известен только во время выполнения и может быть любого типа. В реализации синтаксического анализа я использую классы для представления переменных, выражений и значений переменных:
Variable{
String identifier;
int scopeId;
//...
}
Value<T>{
Exprssion<T> expression
T get(){return expression.evaluate()}
//...
}
Exprssion<T>{
T evaluate(){return ...}
//...
}
в парсере мне нужно иметь что-то вроде этого
new Expression<TypeA>();
new Value<TypeA>();
//to represent a assignment:
Value<TypeA> va; ... va.set(vb.get());
Они не будут работать, так как генерики являются компиляцией, а TypeA можно определить только во время выполнения, даже если я использую Object какуниверсальный тип TI все еще должен приводить значение к TypeA в какой-то момент, каков правильный способ справиться с этим в целом?