Трассировка парсера Camlp4
Я пишу простой парсер с Camlp4. Сложность начинает доходить до того, что у меня возникают проблемы с рассуждением о точной последовательности разбора. Что было бы лучшим способом произвести "трассировку" анализа, включающего в себя использованные токены и соответствующие правила.
Например, следующий фрагмент парсера:
let parse_func_call = parser
| [< 'Token.Ident id; 'Token.LParen; 'Token.Ident id; 'Token.RParen >] -> ...
Может вывести фрагмент трассировки как:
CONSUMED Ident
MATCHED parse_func_call
CONSUMED LParen
CONSUMED Ident
CONSUMED RParen
Не похоже, что в Camlp4 встроена такая вещь, поэтому мне интересно, возможно ли это.
1 ответ
Существует Camlp4Tracer
для обычных вызовов функций, возможно, вы могли бы черпать вдохновение и написать Camlp4Filter для самой грамматики camlp4. Я не буду нести ответственность, если вы сошли с ума во время этого усилия%)