2013-02-16 2 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 구문 문제

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

그것은 소스로 표준 입력을 사용하여 lexbuf을 만들어 반복이 lexbuf를 사용하여 translate를 호출

답변

1

main 기능은 다음과 같습니다. translate 유형은 Lexing.lexbuf -> unit입니다. lexbuf를 기대하고, 하나의 토큰을 찾고, 관련된 규칙을 실행합니다. 프로그램을 종료하게하는 eof에 대한 규칙을 정의하면 while이 종료됩니다.

let _ = Printexc.print main() 

이것이 한 일은 () 전달 main를 호출 할 수 있습니다 :

다음 줄은 실제로 main 기능을 실행합니다. 실행 중에 예외가 발생하면 Printexc.print이 설명을 인쇄합니다. 테스트에서 예외가 발생하지 않으므로 결국 파일의 끝에 도달하고 eof 규칙으로 인해 프로그램이 종료됩니다.