SML / NJ提供了一系列non-standard features,例如高阶模块,矢量文字语法等。
有没有办法在SML / NJ中禁用这些非标准功能,可能是通过某些命令行参数,或者理想情况下使用CM指令?
答案 0 :(得分:2)
仅仅通过查看解析器使用的语法,我就会说没有办法做到这一点。来自" 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也会显示没有任何选项可以将其关闭。