나는 Appel의 "Modern Compiler Implementation in ML"을 따르고 있으며 Ocamllex를 사용하여 렉서를 작성하려고합니다.문자열을 렉싱하기 위해 Ocamllex 사용하기 (The Tiger Compiler)
사양은 후 이스케이프 시퀀스 변환 후 렉서가 문자열을 반환하도록 요청합니다.
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 }
더 나은 방법이 있나요 : 다음 코드는 ocamllex 입력 파일에서 발췌 한 것입니다?
고마워요! 예제의 금광. 나는 Ocaml 컴파일러 코드가 그렇게 명확하지 않다고 생각하지 않았다. – nimrodm
@nimrodm 여러분은 또한 거기에있는 코드 중 일부는 꽤 오래된 것이므로 모든 것이 OCaml 개발의 현재 모범 사례를 반영하지는 않는다는 것을 명심해야합니다. – gasche