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

如何在SML/NJ中禁用非标准功能,sml,smlnj,Sml,Smlnj,SML/NJ提供了一系列功能,如高阶模块、向量文字语法等 有没有办法在SML/NJ中禁用这些非标准功能,可以通过一些命令行参数,或者,理想情况下,使用CM指令?仅通过查看解析器使用的语法,我想说没有办法做到这一点。来自“admin/base/compiler/Parse/Parse/ml.grm”: VectorPat内容与其他模式完全混合在一起。VectorPat的递归grep也将显示,在其他任何地方都没有任何选项可以关闭此功能。加上一个,但我非常确定答案是“否”:-(谢谢。我也看到了,在这一

SML/NJ提供了一系列功能,如高阶模块、向量文字语法等


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

仅通过查看解析器使用的语法,我想说没有办法做到这一点。来自“admin/base/compiler/Parse/Parse/ml.grm”:


VectorPat
内容与其他模式完全混合在一起。
VectorPat
的递归grep也将显示,在其他任何地方都没有任何选项可以关闭此功能。

加上一个,但我非常确定答案是“否”:-(谢谢。我也看到了,在这一点上,我不再看得更远了。很遗憾,这不能做到:(我可以问一下为什么要禁用这些功能吗?也许有某种解决方法。如果您通过MLton运行您的程序,给它
-stop tc
标志,它将键入check来检查程序,但不做进一步的操作。这可以验证是否缺少一些SML/NJ扩展。我只是希望尽可能与所有存在的编译器在开发过程中不需要使用多个编译器。SML/NJ在开发过程中很好,因为它提供了一个非常快速的反馈循环。我曾想过使用MLton只是为了这个目的,但它非常慢,因为它是一个优化编译器。但是,我没有尝试
-stop tc
选项,因为我没有知道了,我试试看。谢谢!
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)