У меня есть несколько вопросов о antlr3 с древовидной грамматикой в target C.
Я почти выполнил свой интерпретатор (функции, переменные, логические и математические выражения в порядке), и я сохранил самые сложные выражения для конца (например, if, switch и т. Д.)
1) Я хотел бы интерпретировать простую инструкцию цикла:
repeat: ^(REPEAT DIGIT stmt);
Я видел много примеров, но ничего о обходчике дерева (здесь только тема с макросами MARK () / REWIND (m) + @init / @after, но не работает (у меня есть ошибки antlr: "неожиданный узел" со смещением 0 ")). Как я могу интерпретировать это утверждение в C?
2) Тот же вопрос с простым оператором if:
if: ^(IF condition stmt elseifstmt* elsestmt?);
Проблема в том, чтобы пропустить оператор, если условие ложно, и проверить другие операторы elseif / else.
3) У меня есть несколько утверждений, которые могут остановить сценарий (например, «break» или «exit»). Как я могу прервать ходок дерева и пропустить следующие токены?
4) При обнаружении ошибки лексера или синтаксического анализатора antlr возвращает ошибку. Но я хотел бы сделать свои домашние сообщения об ошибках. Как получить номер строки, в которой произошел сбой парсера?
Спросите меня, хотите ли вы больше подробностей.
Большое спасибо (и я прошу прощения за мой плохой английский)