В документации и примерах идущих вместе с АНТЛРом автора настоятельно рекомендуют строить транслятор из двух чстей:
1) парсер входного языка, который проверяет синтаксис и строит АSТ (Abstract Syntax Tree)
2) парсер этого АСТ, который выписывает результат на выходном языке
Вопрос: а где в такой схеме проверять семантику? Например двойное объявление переменной, соответствие значения нужному типу?
Пока что я написал, только парсер, в который запихнул семантический проверки. Но попути оказалось, что у меня в некоторой моей структуре данных уже есть вся информация нужная для представления на выходном языке. Зачем тогда нужен парсер дерева?
Кстати точно такая же технология используется в самом АНТЛРе, где есть только лексер и парсер, который наполняет какие то внутренние структуры