如何使用ocamlex生成的lexer
我有一个简单的lexer,取自教程() 生成lexer OCaml并创建可执行文件后如何使用ocamlex生成的lexer,ocaml,ocamllex,Ocaml,Ocamllex,我有一个简单的lexer,取自教程() 生成lexer OCaml并创建可执行文件后 ocamlex testlexer.mll&&ocamlc-o testlexer testlexer.ml 我试图通过stdinecho c |/testlexer和文件/testlexer input传递内容,但两者都不起作用 在生成的testlexer.ml中,我也看不到任何从stdin或文件中读取的逻辑,它是作为一个模块包含在另一个程序中,还是被另一个代码生成工具(如ocamlyacc)使用?您需要一个
ocamlex testlexer.mll&&ocamlc-o testlexer testlexer.ml
我试图通过stdinecho c |/testlexer
和文件/testlexer input
传递内容,但两者都不起作用
在生成的
testlexer.ml
中,我也看不到任何从stdin或文件中读取的逻辑,它是作为一个模块包含在另一个程序中,还是被另一个代码生成工具(如ocamlyacc)使用?您需要一个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
功能,原始代码可以是较大程序中的一个模块。它可能是一个用户使用的程序。ocamlyacc
。您需要一个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
功能,原始代码可以是较大程序中的一个模块。它可能是一个用户使用的程序。ocamlyacc
。您需要一个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
功能,原始代码可以是较大程序中的一个模块。它可能是一个用户使用的程序。ocamlyacc
。您需要一个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
功能,原始代码可以是较大程序中的一个模块。它可能是一个用户ocamlyacc
的程序,也可能不是