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