如何禁用SML / NJ中的非标准功能

时间:2015-09-24 12:22:59

标签: sml smlnj

SML / NJ提供了一系列non-standard features,例如高阶模块,矢量文字语法等。

有没有办法在SML / NJ中禁用这些非标准功能,可能是通过某些命令行参数,或者理想情况下使用CM指令?

1 个答案:

答案 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也会显示没有任何选项可以将其关闭。