{ }
rule translate = parse
| "c" { print_string (Sys.getcwd ()); translate lexbuf }
| _ as c { print_char c; translate lexbuf }
| eof { exit 0 }
生成词法分析器OCaml并创建可执行文件后
ocamllex testlexer.mll && ocamlc -o testlexer testlexer.ml
我尝试通过标准echo c | ./testlexer
和文件./testlexer input
传递内容,但都不起作用。
我也没有看到生成的testlexer.ml
中的任何逻辑用于从stdin或文件读取,是否意味着将其作为模块包含在另一个程序中或者由ocamlyacc等其他代码生成工具使用?
答案 0 :(得分:3)
您需要一个data = 0
for (i=0; i < 8; ++i) {
data = (data << 8) | bytes[i]; // bytes is already UInt8 * so no need to mask it
}
功能(实质上)。您可以从该页面上的其他示例进行调整。
以下是我写完的一个完整示例:
main
它似乎按预期工作:
{ }
rule translate = parse
| "c" { print_string (Sys.getcwd ()); translate lexbuf }
| _ as c { print_char c; translate lexbuf }
| eof { exit 0 }
{
let main () =
let lexbuf = Lexing.from_channel stdin in translate lexbuf
let () = main ()
}
<强>更新强>
抱歉,我忘了回答你的其他问题了。是的,没有$ ocamllex l.mll
4 states, 257 transitions, table size 1052 bytes
$ ocamlc -o l l.ml
$ echo c/itworks | ./l
/home/jeffsco/tryll2/itworks
功能,原始代码可以是更大程序中的模块。它可以是用户main
的程序,也可以不是。