ocamlex语法问题
有人能给我解释一下主要功能是如何工作的吗?我已经理解了regexp部分,并且能够理解主要功能,但不能理解其确切含义。主要功能如下所示:ocamlex语法问题,ocaml,lex,ocamllex,Ocaml,Lex,Ocamllex,有人能给我解释一下主要功能是如何工作的吗?我已经理解了regexp部分,并且能够理解主要功能,但不能理解其确切含义。主要功能如下所示: { } rule translate = parse | "current_directory" { print_string (Sys.getcwd ()) } | _ as c { print_char c } | eof { exit 0 } { let main () = let lexbuf = Lexing.from_channel stdin in
{ }
rule translate = parse
| "current_directory" { print_string (Sys.getcwd ()) }
| _ as c { print_char c }
| eof { exit 0 }
{
let main () =
let lexbuf = Lexing.from_channel stdin in
while true do
translate lexbuf
done
let _ = Printexc.print main ()
}
它使用stdin作为源创建一个lexbuf,然后使用该lexbuf重复调用translate
。translate
的类型是Lexing.lexbuf->unit
。它需要一个lexbuf,查找一个令牌,并执行关联的规则。您为eof
定义一条规则,该规则导致程序退出,从而在时终止
下一行实际运行main
函数:
let main () =
let lexbuf = Lexing.from_channel stdin in
while true do
translate lexbuf
done
它所做的是调用main
,传递它()
。如果在执行期间引发异常,Printexc.print
将打印该异常的说明。由于测试中没有引发异常,因此最终您将到达文件末尾,并且eof
规则将导致程序退出。主函数如下所示:
{ }
rule translate = parse
| "current_directory" { print_string (Sys.getcwd ()) }
| _ as c { print_char c }
| eof { exit 0 }
{
let main () =
let lexbuf = Lexing.from_channel stdin in
while true do
translate lexbuf
done
let _ = Printexc.print main ()
}
它使用stdin作为源创建一个lexbuf,然后使用该lexbuf重复调用translate
。translate
的类型是Lexing.lexbuf->unit
。它需要一个lexbuf,查找一个令牌,并执行关联的规则。您为eof
定义一条规则,该规则导致程序退出,从而在时终止
下一行实际运行main
函数:
let main () =
let lexbuf = Lexing.from_channel stdin in
while true do
translate lexbuf
done
它所做的是调用main
,传递它()
。如果在执行期间引发异常,Printexc.print
将打印该异常的说明。由于测试中没有引发异常,因此最终到达文件末尾,并且eof
规则导致程序退出