parser.mlyのデバッグ方法
#タイガーブック #OCaml
from タイガーブック
parser.mly (ocamlyacc) のデバッグ方法に悩んでたんだけど、ひとまずは以下の手順が良さそう。
dune utop を起動して、以下のスクリプトを実行。
code:ml
let src = "let function dbl(a:int) = 10 in dbl () end" in let buff = Lexing.from_string src in Tiger.Parser.program Tiger.Lexer.token buff;;
以下のような抽象構文木が出力される。
code:ml
- : Tiger.Syntax.t =
Tiger.Syntax.LetExp
([Tiger.Syntax.FunctionDec ("dbl",
Tiger.Syntax.Field ("a", "int"), Tiger.Syntax.IntExp 10)],
Tiger.Syntax.CallExp ("dbl", []))
Lexerのデバッグ時に便利なスクリプト
code:ml
let src = "123" in let buff = Lexing.from_string src in Tiger.Lexer.token buff;;
| '"' '\n' '"' { let () = print_string (Lexing.lexeme lexbuf) in Parser.STRING("YEAAAAAA") }