2013-02-16 94 views
2
{ } 
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() 
} 

有人可以請解釋我主要功能的工作原理嗎?我已經理解了正則表達式部分,並能夠理解主要功能,但不是確切的意思。Ocamllex語法問題

回答

1

main功能如下:

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

它將使用標準輸入作爲其源lexbuf,然後反覆使用此lexbuf調用translatetranslate的類型是Lexing.lexbuf -> unit。它期望lexbuf,查找一個標記,並執行相關的規則。您定義了一個規則eof,導致程序退出,這會終止while

下一行實際運行main功能:

let _ = Printexc.print main() 

這樣做是調用main,傳遞()。如果在執行期間發生異常,則Printexc.print將打印出它的描述。由於在測試中不會引發異常,因此最終會達到文件末尾,並且eof規則會導致程序退出。