2

可以调试 Menhir 生成的解析器,例如menhir --interpret --interpret-show-cst parser.mly. 是否也可以调试词法分析器创建的标记?我没有在 Manhir 手册页或在线找到任何内容。

例如,调试“1+2”会吐出“INT 1 PLUS INT 2”令牌列表。

查看生成的 parser.ml 模块,有一个具有令牌类型的 MenhirBasics 模块,但没有 string_of_token 或类似的。哦,令牌类型在 parser.mli 文件中公开。如果 Menhir 可以生成 [@@deriving show] 或类似内容,那就太好了。

相关 Gitlab 问题:https ://gitlab.inria.fr/fpottier/menhir/-/issues/6

4

1 回答 1

0

如果要打印已解析的标记,只需在 lexer.mll 文件中打印它们:

{
  open Parser

  exception Error of string
}

rule token = parse
| [' ' '\t' '\n'] as c
    { Format.eprintf "%c" c; token lexbuf }
| ';'
    { Format.eprintf ";"; SEMICOLON }
| ['0'-'9']+ as i
    { Format.eprintf "INT %s" i; INT (int_of_string i) }
| '+'
    { Format.eprintf "PLUS"; PLUS }
| '-'
    { Format.eprintf "MINUS"; MINUS }
| '*'
    { Format.eprintf "TIMES"; TIMES }
| '/'
    { Format.eprintf "DIV"; DIV }
| '('
    { Format.eprintf "LPAREN"; LPAREN }
| ')'
    { Format.eprintf "RPAREN"; RPAREN }
| eof
    { Format.eprintf "EOF"; EOF }
| _
    { raise (Error (Printf.sprintf "At offset %d: unexpected character.\n" (Lexing.lexeme_start lexbuf))) }

对你来说可以吗?

于 2021-05-03T09:51:42.433 回答