{ }
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 ()
}有人能给我解释一下main函数是如何工作的吗?我已经理解了regexp部分,并且能够理解main函数,但不能确切地理解它的含义。
发布于 2013-02-17 01:45:05
main函数如下所示:
let main () =
let lexbuf = Lexing.from_channel stdin in
while true do
translate lexbuf
done它使用stdin作为源创建一个lexbuf,然后使用这个lexbuf重复调用translate。translate的类型为Lexing.lexbuf -> unit。它需要一个lexbuf,查找一个令牌,然后执行相关的规则。您为eof定义了一个规则,该规则会导致程序退出,从而终止while。
下一行实际运行main函数:
let _ = Printexc.print main ()它的作用是调用main,并将其传递给()。如果在执行过程中出现异常,Printexc.print将打印出该异常的描述。因为在测试中没有引发异常,所以最终您会到达文件的末尾,eof规则会导致程序退出。
https://stackoverflow.com/questions/14910034
复制相似问题