Я думаю, что, подобно yacc, токены хранятся в переменных, соответствующих символам в вашем грамматическом правиле. Здесь, поскольку есть один символ (ошибка), вы можете просто вывести $ 1, используя printf
и т. Д.
Редактировать: ответ на комментарий.
Почему вы используете терминал с ошибкой? Я читаю учебник ocamlyacc, в котором говорится, что при возникновении ошибки разбора вызывается специальная процедура обработки ошибок. Вот так:
3.1.5. Программа сообщений об ошибках
Когда функция парсера обнаруживает
синтаксическая ошибка, вызывает функцию
по имени parse_error
со строкой
«синтаксическая ошибка» в качестве аргумента.
по умолчанию parse_error
функция делает
ничего и не возвращается, тем самым инициируя
восстановление после ошибок (см. Восстановление ошибок).
Пользователь может определить индивидуальные
функция parse_error в шапке
раздел файла грамматики, такой как:
let parse_error s = (* Called by the parser function on error *)
print_endline s;
flush stdout
Ну, похоже, вы получаете только "синтаксическую ошибку" с этой функцией. Оставайтесь с нами для получения дополнительной информации.