6
我試圖按照Appel的「現代編譯器在ML中的實現」,並使用Ocamllex編寫詞法分析器。使用ocamllex lexin字符串(老虎編譯器)
規範要求詞法分析器返回字符串後翻譯轉義序列。 下面的代碼是從ocamllex輸入文件的摘錄:
rule tiger = parse
...
| '"'
{ let buffer = Buffer.create 1 in
STRING (stringl buffer lexbuf)
}
and stringl buffer = parse
| '"' { Buffer.contents buffer }
| "\\t" { Buffer.add_char buffer '\t'; stringl buffer lexbuf }
| "\\n" { Buffer.add_char buffer '\n'; stringl buffer lexbuf }
| "\\n" { Buffer.add_char buffer '\n'; stringl buffer lexbuf }
| '\\' '"' { Buffer.add_char buffer '"'; stringl buffer lexbuf }
| '\\' '\\' { Buffer.add_char buffer '\\'; stringl buffer lexbuf }
| eof { raise End_of_file }
| _ as char { Buffer.add_char buffer char; stringl buffer lexbuf }
有沒有更好的辦法?
謝謝!一個金礦的例子。我從來沒有想過Ocaml編譯器的代碼會如此清晰。 – nimrodm 2011-04-26 18:55:28
@nimrodm你還應該記住,那裏的一些代碼是非常古老的,所以並不是所有的東西都反映了當前OCaml開發的最佳實踐。 – gasche 2011-04-26 19:01:33