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

stdin をソースとして使用して lexbuf を作成し、translateこの lexbuf を使用して繰り返し呼び出します。の型はtranslateですLexing.lexbuf -> unit。lexbuf を予期し、1 つのトークンを探し、関連付けられたルールを実行します。eofプログラムを終了させるルールを定義し、 while.

次の行は実際にmain関数を実行します。

let _ = Printexc.print main ()

これが行うことはmain、それを渡すこと()です。実行中に例外が発生した場合、Printexc.printその説明を出力します。テストでは例外が発生しないため、最終的にファイルの終わりに到達し、eofルールによってプログラムが終了します。

于 2013-02-16T17:45:04.583 に答える