Joe*_*Joe 1 compiler-construction ocaml
所以我正在阅读http://www.podval.org/~sds/ocaml-sucks.html,其中包含此引用(在ocaml问题的上下文中):
实际上有三种略有不同的语法:
- 官方的描述在手册中
- 编译器ocamlc接受其超集
- 预处理器Camlp4接受类似的东西(但是有点不同)(例如,它接受List.map [1; 2; 3] ~f:fun x - > x,这也被顶层接受,但是不是编译器)
ocamlc接受但与手册不匹配的ocaml代码片段的示例是什么?
PS - 我主要对OCaml 4.00.1感兴趣,但以前的版本也很有趣......
一个有趣的例子,仅为了好奇心:
OCaml version 4.00.0
# type 'a weird_list =
| ()
| :: of 'a * 'a weird_list;;
type 'a weird_list = () | :: of 'a * 'a weird_list
# 1::2::3::();;
- : int weird_list = :: (1, :: (2, :: (3, ())))
Run Code Online (Sandbox Code Playgroud)
Camlp4和OCaml编译器之间的差异有时是错误,但最常见的解释是解析器技术的不同之处:如果你为同一种语言编写一个惯用的LR解析器和一个LL解析器,并且有轻微烦人的语法细微之处,你不应该期望两者兼而有之.完美匹配.我不认为这在实践中是一个问题(但实际上大多数人不使用Camlp4).