如何禁用 SML/NJ 中的非标准功能
How to disable non-standard features in SML/NJ
SML/NJ提供了一系列non-standard features,例如高阶模块、向量字面量语法等
有没有办法禁用 SML/NJ 中的这些非标准功能,可能是通过一些命令行参数,或者理想情况下,使用 CM 指令?
只要看看解析器使用的语法,我就会说没有办法做到这一点。来自 "admin/base/compiler/Parse/parse/ml.grm":
apat' : OP ident (VarPat [varSymbol ident])
| ID DOT qid (VarPat (strSymbol ID :: qid varSymbol))
| int (IntPat int)
| WORD (WordPat WORD)
| STRING (StringPat STRING)
| CHAR (CharPat CHAR)
| WILD (WildPat)
| LBRACKET RBRACKET (ListPat nil)
| LBRACKET pat_list RBRACKET (ListPat pat_list)
| VECTORSTART RBRACKET (VectorPat nil)
| VECTORSTART pat_list RBRACKET (VectorPat pat_list)
| LBRACE RBRACE (unitPat)
| LBRACE plabels RBRACE (let val (d,f) = plabels
in RecordPat{def=d,flexibility=f}
end)
VectorPat
内容与其余模式完全混合。 VectorPat
的递归 grep 也将显示没有任何选项可以在其他任何地方关闭它。
SML/NJ提供了一系列non-standard features,例如高阶模块、向量字面量语法等
有没有办法禁用 SML/NJ 中的这些非标准功能,可能是通过一些命令行参数,或者理想情况下,使用 CM 指令?
只要看看解析器使用的语法,我就会说没有办法做到这一点。来自 "admin/base/compiler/Parse/parse/ml.grm":
apat' : OP ident (VarPat [varSymbol ident])
| ID DOT qid (VarPat (strSymbol ID :: qid varSymbol))
| int (IntPat int)
| WORD (WordPat WORD)
| STRING (StringPat STRING)
| CHAR (CharPat CHAR)
| WILD (WildPat)
| LBRACKET RBRACKET (ListPat nil)
| LBRACKET pat_list RBRACKET (ListPat pat_list)
| VECTORSTART RBRACKET (VectorPat nil)
| VECTORSTART pat_list RBRACKET (VectorPat pat_list)
| LBRACE RBRACE (unitPat)
| LBRACE plabels RBRACE (let val (d,f) = plabels
in RecordPat{def=d,flexibility=f}
end)
VectorPat
内容与其余模式完全混合。 VectorPat
的递归 grep 也将显示没有任何选项可以在其他任何地方关闭它。