Я собираюсь написать инферрер для своего DSL, и у меня есть некоторые вопросы, которые я не смог решить только с помощью документации.
Первый: мне нужно создать static void main() из функции: как я могу добавить static с помощью .toMethod()?
Второй: предположим, у меня есть такое правило в моем dsl:
Sequence:
'SEQ' name=ID '{'
statements+=Statement*
'}'
;
Заявление о том, где:
Statement:
Sequence | others...
;
Последовательность должна быть сопоставлена с методом void, а тело этого метода состоит из перевода операторов. Но проблема в следующем: когда внутри последовательности я найду другую последовательность, мне нужно создать метод для новой последовательности и добавить вызов в суперпоследовательность.
Например:
SEQ first {
instructions...
SEQ second {
other instructions....
}
instructions...
}
Должен сгенерировать:
void first(){
instructions(translated)...
second();
instructions(translated)...
}
void second(){
other instructions(translated)...
}
Возможно ли это реализовать?