我正在用 OCaml 编写一个简单的递归下降解析器。通常(据我从在线教程和书籍中得知),异常用于指示解析失败,例如:
match tok with
TokPlus -> ...
| _ -> raise SyntaxError
但是,我正在考虑使用选项类型,即:
match tok with
TokPlus -> Some(...)
| _ -> None
我想这样做的主要原因是使用选项类型可以让我优化我的一些组合器是尾递归的。
使用选项而不是异常有什么缺点吗?当我开始解析更复杂的结构时,这个决定会咬我的脚吗?