OCaml:如何测试扫描程序和解析器?

时间:2016-03-24 14:03:09

标签: parsing ocaml

我们正在为OCaml编写一个编译器,用于我们自己的域特定语言。到目前为止,我们有扫描仪,解析器和ast。

此时测试扫描仪/解析器的最佳方法是什么?我知道可以将一系列令牌传递给解析器/扫描器,看看它是否被扫描器/解析器接受/拒绝。 (例如,echo "FLOAT ID" | menhir --interpret --interpret-show-cst parser.mly) 但是,有没有办法将用我们自己的语言编写的实际程序传递给扫描器/解析器,看看它是否被接受了?

我必须补充一点,我对OCaml很新,而且我对编译器知之甚少。

1 个答案:

答案 0 :(得分:2)

如果你想做的是给你的解析器一个字符串并查看它是否有效,你可以这样做(假设你在解析器中的起点是 prog

 main.ml :
 let () = 
    (* Taking the string given as a parameter or the program *)
    let lb = Lexing.from_string Sys.argv.(1) in
    (* if you want to parse a file you should write :
       let ci = open_in filename in
       let lb = Lexing.from_channel ci in
    *)
    try
       let p = Parser.prog Lexer.token lb in
       Printf.printf "OK\n"
    with _ -> Printf.printf "Not OK\n"

我有帮助吗? ; - )