2013-02-16 96 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规则会导致程序退出。