Ocamllex Syntactical问题

时间:2013-02-16 11:59:11

标签: ocaml lex ocamllex

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

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

1 个答案:

答案 0 :(得分:1)

main函数如下所示:

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

它使用stdin作为源创建一个lexbuf,然后使用这个lexbuf重复调用translatetranslate的类型为Lexing.lexbuf -> unit。它期望lexbuf,查找一个令牌,并执行相关规则。您为eof定义了导致程序退出的规则,该规则终止了while

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

let _ = Printexc.print main ()

这样做是致电main,传递()。如果在执行期间引发异常,Printexc.print将打印出对它的描述。由于测试中没有引发异常,因此最终到达文件末尾,eof规则导致程序退出。