1
{ }
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 ()
}

有人可以解释一下主要功能是如何工作的吗?我已经理解了正则表达式部分,并且能够了解主要功能,但不是确切的含义。

4

1 回答 1

1

main函数如下所示:

let main () =
  let lexbuf = Lexing.from_channel stdin in
  while true do
    translate lexbuf
  done

它使用标准输入作为源创建一个 lexbuf,然后translate使用这个 lexbuf 重复调用。的类型translateLexing.lexbuf -> unit。它需要一个 lexbuf,查找一个令牌,然后执行相关的规则。您为此定义了一个规则,eof该规则会导致程序退出,从而终止while.

下一行实际运行该main函数:

let _ = Printexc.print main ()

这就是调用main,传递它()。如果在执行过程中引发异常,Printexc.print将打印出它的描述。由于在测试中没有引发异常,最终您到达文件末尾并且eof规则导致程序退出。

于 2013-02-16T17:45:04.583 回答