Estoy intentando seguir la "Implementación del compilador moderno en ML" de Appel y estoy escribiendo el lexer usando Ocamllex.Uso de Ocamllex para cadenas lexing (The Tiger Compiler)
La especificación solicita al lexer que devuelva las cadenas después de traducir las secuencias de escape. El código siguiente es un extracto del archivo de entrada 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 }
¿Hay una mejor manera?
¡Gracias! Una mina de oro de ejemplos. Nunca pensé que el código del compilador Ocaml fuera tan claro. – nimrodm
@nimrodm, también debe tener en cuenta que parte del código allí es bastante antiguo, por lo que no todo refleja la mejor práctica actual del desarrollo OCaml. – gasche