ocamlex语法问题

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

有人能给我解释一下主要功能是如何工作的吗?我已经理解了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
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
规则导致程序退出