gpt4 book ai didi

ocaml - 打印字符串的标记化

转载 作者:行者123 更新时间:2023-12-01 22:47:18 26 4
gpt4 key购买 nike

我目前正在研究一种编程语言作为一种爱好。如果可以让 ocamllex 打印出它找到的匹配的标记,那么词法错误的调试会变得更加容易,我偶尔只是手动将打印语句添加到我的规则中,但应该有一种更简单的方法来做到这一点。

所以我要问的是,给定一个 .mll 文件和一些输入,是否有一种自动方式来查看相应的标记?

最佳答案

我认为没有内置方法可以要求词法分析器打印其标记。

如果您使用 ocamlyacc,则可以在 OCAMLRUNPARAM 中设置 p 选项来查看解析器操作的跟踪。 Section 12.5 中对此进行了描述。 OCaml 手册。请参阅Section 10.2了解 OCAMLRUNPARAM 的说明。

如果您不介意粗暴的黑客攻击,我只是编写了一个小脚本lext,它向 ocamllex 生成的输出添加了跟踪:

#!/bin/sh
#
echo '
let my_engine a b lexbuf =
let res = Lexing.engine a b lexbuf in
Printf.printf "Saw token [%s]'\\\\'n" (Lexing.lexeme lexbuf);
res
'
sed 's/Lexing\.engine/my_engine/g' "$@"

它的工作原理如下:

$ cat ab.mll
rule token = parse
[' ' '\t'] { token lexbuf }
| '\n' { 1 }
| '+' { 2 }
| _ { 3 }
{
let lexbuf = Lexing.from_channel stdin in
try
while true do
ignore (token lexbuf)
done
with _ -> exit 0
}
$ ocamllex ab.mll
5 states, 257 transitions, table size 1058 bytes
$ lext ab.ml > abtraced.ml
$ ocamlopt -o abtraced abtraced.ml
$ echo 'a+b' | abtraced
Saw token []
Saw token [a]
Saw token [+]
Saw token [b]
Saw token [
]
Saw token []

关于ocaml - 打印字符串的标记化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30271173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com