【发布时间】:2018-08-02 02:48:13
【问题描述】:
刚开始学习SML,被下面的代码搞糊涂了:
type pos = int
datatype prog= Prog of statement option
and statement =... some code..
and expression =
VarExp of symbol * pos
| IntExp of int * pos
| BoolExp of bool * pos
| BopExp of exp * oper * exp * pos
| UopExp of oper * exp * pos
我无法理解的是pos 的用法。签名不应该像BopExp of exp * oper * exp 而不是BopExp of exp * oper * exp * pos 吗?
【问题讨论】:
-
一个疯狂的猜测是
pos代表某种位置(行号或字符偏移或其他东西),可能是为了能够产生合理的错误消息。如果您阅读类型的解释和使用,很可能会变得清楚。 -
这可能是
ML-YACC的代码。pos用于错误报告。 -
当解析器发现解析错误时,它需要告诉程序员错误出现在哪里。我认为这就是为什么我们需要
pos。
标签: functional-programming sml smlnj ml