Трассировка парсера 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. Я не буду нести ответственность, если вы сошли с ума во время этого усилия%)

Другие вопросы по тегам