本文档包含由生成的错误和警告消息列表SML/NJ 110版编译器,按字母顺序排序,并提供简短解释以及示例。

分析错误

SML/NJ解析器是由ML-Yacc工具生成的,它依赖于ML-Lex工具(现在使用ML-lpt工具集实现)。解析器使用尝试通过删除、添加或替换词汇标记。解析器会生成如下错误消息:

   x个 = 4 在里面 x个+ 结束

  foo公司.sml公司:1.5 错误: 语法 错误: 插入  VAL公司

此错误消息指示解析器如何尝试修理输入(来自文件命名foo.sml文件),在本例中表示解析器认为val值关键字为之后需要中第1行第5列的关键字foo.sml文件.

输入交互系统的表达式中的语法错误(而不是取自文件)修复得不太好,因为解析器无法利用lookahead超出你键入的内容。

如果在解析阶段在程序中发现语法错误,那么语义错误不会报告,因为语法错误会中止语义分析阶段,并且程序将不会被执行。

有关解析器生成的语法错误的详细讨论,请参阅下面对错误[76]至[79]的解释。

“编译器错误”错误消息

以开头的错误消息错误:编译器错误:表示遇到了意外情况编译器。例子:

错误: 编译器 缺陷: 模块实用程序: 获取Str: 坏的 实体

这样的消息表明编译器中存在错误。这些错误需要由以下人员修复SML/NJ开发人员,但通常存在涉及用户代码更改的工作区。应通过为相应的存储库创建新的错误问题来报告编译器错误取决于发生错误的SML/NJ编译器的版本:

通常这样的编译器错误消息是第二的错误消息,含义在正常情况下(即非“编译器错误”)错误消息。次要错误通常发生在错误会中断编译器的内部状态或数据结构,然后,损坏状态会导致进一步的故障。SML/NJ编译器非常擅长从错误和失败中恢复优雅地说,因此次要的编译器错误应该很少发生。

正常错误消息

在为以下错误显示的示例代码中为了提高可读性,省略了提示符号。用户输入以常规字体显示,编译器的响应位于斜体字。为了方便交叉引用,我们对错误进行了编号消息,但由于消息是按字母顺序列出的当添加或删除消息时,数字将全局更改。

  1. 加薪的论点也不例外

    后面的表达式提升关键字应该计算为异常值,即类型的值exn(外部网络).在这种情况下,该值具有其他不合适的类型。例如。:

    提高3;stdIn:16.7错误:raise的参数不是异常[literal]引发:int在表达式中:提升3
  2. 数据类型复制中的参数类型变量

    在数据类型复制声明中左侧或右侧的类型路径(longid)应该在前面加上形式类型变量参数,即使右侧数据类型的arity n>0。

    数据类型“a T=a of”a;数据类型“a T=a of”a数据类型'a T1=数据类型T;stdIn:18.1-18.28错误:数据类型复制中的参数类型变量数据类型T1=数据类型T;数据类型“a T=a of”a
  3. 在子句中找不到函数参数

    当在a中的左侧乐趣声明,或缺少中缀函数符号的形式参数。

    f=3;stdIn:1.5错误:在子句中找不到函数参数中缀3++;中缀3++fun(x xx)=3;stdIn:1.5-2.6错误:在子句中找不到函数参数stdIn:1.5-2.6错误:子句中的函数符号非法
  4. 案例对象和规则不一致

    这个case对象是后面的表达式案例关键字。它的类型必须与中lhs模式的类型一致这个规则(帕特⇒实验)遵循属于关键字。所有规则的模式在类型上也必须一致,但这是另一个错误。

    案例3为真=>1|假=>2;stdIn:1.1-25.16错误:case对象和规则不一致[literal]规则域:bool对象:int在表达式中:(案例3为真=>1|错误=>2)
  5. 子句并非都有函数名

    在一个乐趣定义,函数名称必须出现在每个条款。如果在一个或多个子句中省略了它,则会导致此错误。

    乐趣f nil=1|(x::y)=x;stdIn:1.5-17.15错误:子句并非都有函数名

    当函数名为函数定义的子句不同,例如因为拼写错误。

    趣味测试(某些)=真|test NONE=假;stdIn:120.5-121.24错误:子句并不都有函数名
  6. 子句的模式数不尽相同

    在一个乐趣声明,每个子句或规则,由|(竖线符号),必须具有相同数量的curry参数。

    乐趣f x y=3|f a b c=4;stdIn:1.5-26.16错误:子句的模式数不尽相同stdIn:24.6-26.16错误:规则类型不一致[类型不匹配]早期规则:'Z*'Y->int此规则:'X*'W*'V->int在规则中:(a、b、c)=>4
  7. 常量构造函数应用于模式中的参数:%

    像这样的常量构造函数无法应用于模式中的参数。

    val零x=[];stdIn:1.5-24.8错误:对模式中的参数应用了常量构造函数:nil
  8. 构造函数和参数在模式上不一致

    模式中的非常量构造函数必须应用于参数适当类型的模式(即构造函数的域类型)。

    数据类型t=A of int;val A真=A3;stdIn:1.1-26.3错误:构造函数和参数在模式中不一致[tycon不匹配]构造函数:int->t参数:bool在模式中:真的
  9. 在模式中使用的数据构造函数%没有参数

    当参数为在模式中使用(但在表达式中使用时不一定如此)。

    数据类型t=A of intval A=A3;stdIn:17.5-17.12错误:在模式中使用的数据构造函数A没有参数
  10. 数据类型%与规范不匹配

    通常是因为结构与施工人员(姓名或数量)不一致与结构匹配的签名中的相应数据类型规范。

    签名S=信号发生器数据类型t=A of int结束;签名S=sig数据类型t=A of int end结构A:S=结构数据类型t=A of int |B结束;stdIn:1.1-27.4错误:数据类型t与规范不匹配实际施工人员:B
  11. 数据类型%具有重复的构造函数名称:%,%

    给定数据类型的构造函数的名称必须完全不同。

    数据类型t=A|B|A of int;stdIn:1.1-26.5错误:数据类型t具有重复的构造函数名称:A
  12. 实例化中的依赖循环

    这个实例化进程接受签名并创建伪签名结构匹配该签名,没有额外的共享(即。没有识别出不需要的类型)。此过程可以由于各种循环而失败。一个例子圆的简单形式为:

    签名S=信号发生器u型数据类型s=A of u共享类型u=s结束;stdIn:16.1-21.4错误:实例化中的依赖循环

    默认情况下,每个签名在声明时都被实例化,以尽早检测错误。然而,签名实例化仅当签名用作函子时才严格必要参数签名或在不透明中(:>)签名约束。

  13. 包含导致%的重复构造函数规范

    签名应该只有一个给定值或构造函数名称。多构造函数的一种常见方法如果构造函数是显式指定,也可以通过included隐式指定签名。

    签名S=信号发生器数据类型t=A of int结束;签名S=sig数据类型t=A of int end签名T=信号发生器数据类型u=A包括S结束;stdIn:27.3-28.13错误:包含导致A的构造函数规范重复
  14. 重复的异常声明

    在单个异常中多次声明异常名称宣言。

    int的异常E布尔的E;stdIn:17.1-18.14错误:重复异常声明:E

    请注意,如果相同的异常名称在不同的异常声明,如下所示。

    int的异常E;int的异常E布尔的例外E;bool的异常E
  15. val rec dec中的函数名重复

    在单个函数中声明多个函数时val记录声明中,函数的名称必须是不同的。

    val rec f=(fn x=>x)并且f=(fn y=>y+3);stdIn:21.1-22.24错误:val rec dec:f中函数名重复
  16. fun-dec中的重复函数名

    在单个函数中声明多个函数时乐趣声明中,函数的名称必须是不同的。

    乐趣f x=xfy=y+3;stdIn:1.1-23.16错误:fun dec:f中函数名重复
  17. 记录中的重复标签

    记录表达式或模式中的标签名称必须是不同的。

    {a=3,b=true,a=“abc”};stdIn:1.1-1.21错误:记录中存在重复标签:a函数f{a=x,a=y}=3;stdIn:2.2-2.11错误:记录中存在重复标签:a
  18. 签名中%%的重复规范

    给定名称空间中只有一个给定名称的规范是允许在签名中使用。值和构造函数(包括异常构造函数)位于一个名称空间中;类型、结构和函子是不相交的名称空间。所以x个无法指定两倍于值或构造函数,但可以指定为值、类型、结构和函子签名。

    签名S=信号发生器val x:整数val x:布尔结束;stdIn:20.3-21.16错误:签名中变量或构造函数x的规范重复签名S=信号发生器类型t类型t结束;stdIn:24.3-25.10错误:签名中类型构造函数t的规范重复签名S=信号发生器Foo例外int的Foo异常结束;stdIn:28.3-29.24错误:签名中变量或构造函数Foo的规范重复签名S=信号发生器结构A:信号端结构A:信号端结束;stdIn:32.3-33.25错误:签名中结构A的规范重复签名S=信号发生器val x:整数数据类型t=x结束;stdIn:36.3-37.18错误:签名中变量或构造函数x的规范重复签名S=信号发生器val x:整数类型x结构x:sig端结束;签名S=信号发生器val x:整数类型x结构x:sig端结束
  19. include导致functor%的重复规范

    签名中出现了多个函子名称规范,其中一个是通过包括规范。如果首先是包含的functor规范,您会得到错误[19]。

    签名S1=信号发生器函子F():符号结束结束;签名S1=sig函子F:(<param>:<sig>):<sig>结束签名S2=信号发生器包括S1函数F(X:sig val X:int end):sig end结束;stdIn:55.3-56.46错误:签名中函数F的规范重复签名S2=信号函子F(X:sig val X:int end):sig end包括S1结束;stdIn:59.3-60.14错误:包含导致函数F的重复规范
  20. 包含导致结构%的重复规范

    结构名称的多个规范出现在签名中,其中一个是通过包括规范。如果首先是包含的结构规范,您会得到错误[19]。

    签名S1=信号发生器结构A:信号端结束;签名S1=sig结构A:sig结束签名S2=信号发生器结构A:sig val x:int end包括S1结束;stdIn:67.3-68.14错误:包含导致结构A的规范重复签名S3=信号发生器包括S1结构A:sig val x:int end结束;stdIn:71.3-72.37错误:签名中结构A的规范重复
  21. include导致类型%的重复规范

    签名中出现了多个类型名规范,其中一个是通过包括规范。如果首先是包含的结构规范,您会得到错误[19]。

    签名S1=信号发生器类型t结束;签名S1=信号类型t结束签名S2=信号发生器键入'at包括S1结束;标准输入:79.3-80.14错误:包含导致类型t的规范重复签名S3=信号包括S1键入'at结束;stdIn:83.3-84.13错误:签名中类型构造函数t的规范重复
  22. 重复的类型定义

    类型名称在单个同时类型中定义了两次声明(即用分隔的类型声明.如果同时声明被拆分为单独声明,没有错误。

    类型t=intt=bool;stdIn:17.1-18.13错误:重复类型定义:t类型t=int;类型t=int类型t=bool;类型t=bool
  23. 类型声明中的类型名称重复

    在数据类型声明中多次定义类型名(可能包括在带有type部分。

    数据类型t=At=B;stdIn:1.1-19.10错误:类型声明中存在重复的类型名称:t数据类型t=A类型t=int;stdIn:1.1-20.17错误:类型声明中的类型名称重复:t
  24. 重复的类型变量名

    类型变量名称在类型参数列表中重复,当定义n元类型或数据类型构造函数,或显式绑定在值声明中键入。

    类型('a,'a)t='a*'a;stdIn:21.4-21.11错误:类型变量名称重复:a数据类型('a,'a)t='a的a;stdIn:1.1-21.15错误:类型变量名称重复:afun('a,'a)f(x:'a)=x;stdIn:1.1-21.10错误:重复的类型变量名:a
  25. 包含导致%的重复值规范

    一个签名中出现了一个值名称的多个规范,其中一个规范为后来通过包括规范。如果首先是包含的结构规范,您会得到错误[19]。无论多值规范是否提供是否为同一类型。

    签名S1=信号发生器val x:整数结束;签名S1=sig val x:int end签名S2=信号发生器val x:布尔包括S1结束;stdIn:29.3-30.14错误:包含导致x的值规范重复签名S3=信号发生器val x:整数包括S1结束;stdIn:33.3-34.14错误:包含导致x的值规范重复签名S4=信号发生器包括S1val x:整数结束;stdIn:37.3-38.15错误:签名中变量或构造函数x的规范重复
  26. 模式中的重复变量

    变量在模式中(或参数序列中)只能出现一次curried函数声明的模式。

    f(x,x)=x;stdIn:1.5-2.10错误:模式中的变量重复:x乐趣f x x=x;stdIn:1.5-2.9错误:模式中的变量重复:xval(x,x)=(3,3);stdIn:1.1-36.3错误:模式中的变量重复:x
  27. 无法在显式类型变量的绑定声明中对其进行泛化:%

    在值表达式或声明必须在适当的点进行概括(确定显式或隐式)。如果类型变量不能被泛化此时,由于值限制,将产生此错误消息。

    val x:'列表=(fn x=>x)nil;stdIn:1.1-37.14错误:显式类型变量无法在其绑定声明中进行泛化:“aval'a(x:'列表)=(fn x=>x)nil;stdIn:1.1-38.5错误:无法在显式类型变量的绑定声明中进行泛化:“a
  28. 表达式和处理程序不一致

    异常中每个规则右侧的类型处理程序必须与基表达式的类型一致处理程序被附加到,因为句柄表达式可以是基表达式的句柄表达式,也可以是处理程序规则之一返回的值。

    fun f x=(hd x)+1句柄空=>真;stdIn:2.6-38.7错误:表达式和处理程序不一致[literal]正文:int处理程序范围:bool在表达式中:硬盘x+1手柄空=>真|exn=>提高exn
  29. 表达式或模式以中缀标识符“%”开头

    中缀标识符不能是表达式中的第一个标识符,除非前面有操作关键字。

    +(2,3);stdIn:1.1错误:表达式或模式以中缀标识符“+”开头op+(2,3);valit=5:int
  30. 表达式或模式以中缀标识符“%”结尾

    表达式不能以中缀标识符结尾。也许有一个失踪的人操作关键字。

    2 +;stdIn:40.4错误:表达式或模式以中缀标识符“+”结尾stdIn:40.1-40.4错误:运算符不是函数[literal]运算符:int在表达式中:2 +(fn x=>x)+;stdIn:40.3错误:表达式或模式以中缀标识符“+”结束(fn x=>x)运算+;valit=fn:int*int->int
  31. 固定优先级必须介于0和9之间

    这一点很明显。在定义新的中缀操作符时,您有使其适应现有的优先级排序,这限于十个级别,从0到9,数字越大,优先级越高。请参阅顶级环境预定义先例的基础文档章节中缀运算符。

    中缀10++;stdIn:43.7-43.9错误:固定优先级必须介于0和9之间中缀~ 2+;stdIn:2.2-2.4错误:固定优先级必须介于0和9之间
  32. 找到数据构造函数而不是异常

    在需要异常构造函数标识符的上下文中,而是找到了数据构造函数标识符。

    例外情况Foo=nil;stdIn:17.1-17.20错误:找到数据构造函数而不是异常
  33. 找到变量而不是异常

    在需要异常构造函数标识符的上下文中,而是找到了一个值变量。

    val x=3;val x=3:整数异常Foo=x;stdIn:18.1-18.18错误:找到变量而不是异常
  34. 处理程序域不是exn

    在以下规则中处理程序关键字,规则左侧的模式类型必须是exn(外部网络)。在下面的示例中,第一个错误消息是由与隐式默认规则不匹配导致的处理处理程序的显式规则未处理的异常。

    3手柄nil=>4;stdIn:1.1-18.7错误:规则类型不一致[类型不匹配]早期规则:'Z列表->int此规则:exn->'Y在规则中:exn=>提升exnstdIn:1.1-18.7错误:处理程序域不存在[tycon不匹配]处理程序域:'Z列表在表达式中:手柄无=>4|exn=>提高exn
  35. 格式错误的数据类型规范

    在签名中的数据类型复制规范中,键入参数位于规范的左侧。

    签名S=信号发生器数据类型'a t=数据类型bool结束;stdIn:26.3-26.33错误:格式错误的数据类型规范
  36. AS模式中的非法(多个?)类型约束

    前面的值变量作为关键字可以有类型约束,但只能有一个。此错误也如第二个示例所示,在其他情况下发生。

    val x:int列表:int列表为y::z=[1,2];stdIn:29.5-29.36错误:AS模式中存在非法(多个?)类型约束val(x:int列表)作为(y::z:int列表”)=[1];stdIn:1.5-24.10错误:AS模式中存在非法(多个?)类型约束stdIn:1.5-24.10错误:AS模式中变量周围的括号非法val x:int列表为(y::z)=[1,2];stdIn:1.1-24.6警告:绑定不完整x作为y::z=。。。val x=[1,2]:int列表值y=1:intval z=[2]:int列表
  37. 子句中的非法函数符号

    在函数声明中,位于关键字乐趣和等号必须是格式良好的应用术语,并且运算符(即函数该术语必须是一个简单的标识符。如果应用程序有中缀运算符,则必须用括号括起来(除非后面紧跟着类型约束或等号);否则它可能不会被加括号。

    fun(f x)=3;(*括号错误)stdIn:1.5-2.5错误:在子句中找不到函数参数stdIn:1.5-2.5错误:子句中的函数符号非法乐趣(x+y)=3;(好 啊;重新定义中缀+运算符*)val+=fn:“a*”b->int
  38. 类型共享%=%中的不一致算术:%具有arity%,%具有arit%

    类型共享约束中涉及的两种类型不同算术。

    签名XSIG=sig数据类型('a,'b)t=a of'a|b of'b结束函子F(u型结构X:XSIG共享类型X.t=u)=结构结束stdIn:49.11-54.6错误:类型共享中的算术不一致t=u:t有arity 2,u有arity 0。
  39. 类型共享中不一致的相等属性

    当类型构造函数具有不兼容的相等性时,会发生此错误属性通过共享约束而等同。发生这种情况时签名不一致,无法成功匹配。

    签名S=信号发生器eq类型t数据类型u=u of int->int(*不是相等类型*)共享类型t=u结束;stdIn:17.1-22.4错误:类型共享中的相等属性不一致
  40. 中缀运算符“%”在fun-dec中没有使用“op”

    声明为中缀符号的函数符号用于用于声明非固定函数的函数声明。

    中缀foo;中缀foofun foo(x,y)=x+y;stdIn:34.5-34.8错误:在fun-dec中使用中缀运算符“foo”而不使用“op”

    正确的定义是:

    fun-op-foo(x,y)=x+y;val foo=fn:int*int->int
  41. 需要中缀运算符,或删除括号

    关键字后的第一个术语乐趣在里面函数声明是带括号的应用程序,表示中缀应用程序,但中间的子rm不是中缀符号。

    乐趣(x f y)=();(如果“f”是中缀,则*有效)stdIn:18.8错误:需要中缀运算符,或删除括号fun x f y=();(好的,但可能不是预期的那样*)val x=fn:'a->'b->单位
  42. 在需要非固定标识符的地方使用了中缀符号“%”

    在一个val记录声明,if正在声明的标识符(在声明的左侧)是中缀符号,必须以操作关键字。

    中缀++;中缀++val rec++=(fn x=>x);stdIn:17.9-17.11错误:在需要非固定标识符的地方使用了中缀符号“++”val rec op++=(fn x=>x);val++=fn:'a->'a
  43. install_pp:空路径

    功能编译器。pp表格安装_pp安装用户定义的漂亮打印机函数(第二个参数)由第一个指定的生成(即数据类型或抽象类型)参数,它必须是可以解释为命名当前环境中的数据类型或抽象类型。此函数只能在顶层调用。

    编译器。PPTable.install_pp[](fn x=>fn y=>());错误:install_pp:空路径
  44. install_pp:非生成类型构造函数

    功能编译器。pp表格安装_pp安装用户定义的漂亮打印机函数(第二个参数)由第一个指定的生成型(即数据类型或弃权型)参数,它必须是可以解释为命名数据类型的符号路径(longTyCon)或者在当前环境中弃权。此功能只应被高层调用。

    编译器。PPTable.install_pp[“t”](fn x=>fn y=>());错误:install_pp:非生成类型构造函数
  45. int常量太大

    程序中的整数文本太大。默认整数为使用31位表示,范围从~1073741824到1073741823,或来自:

    Option.valOf(Int.minInt)到Option.valOf(Int.maxInt)
    val x=1073741823;val x=1073741823:整数val x=1073741824;stdIn:2.4-22.7错误:int常量太大val x=约1073741824;值x=~1073741824:intval x=约1073741825;stdIn:30.10-30.21错误:int常量太大
  46. 匹配非穷尽

    子句中的模式不足以匹配所有可能的输入。如果标志编译器。控制。MC.match非穷尽错误设置为true(默认值为false),否则,如果编译器。控制。MC.match非穷尽警告设置为true。如果这两个标志都不为真,那么编译器不会抱怨非穷尽匹配。

    乐趣f 0=1|f 1=1;stdIn:1.1-22.12错误:match nonexualtive0 => ...1 => ...val f=fn:int->int
  47. 匹配冗余

    提供了一种被一些早期模式覆盖的模式。如果编译器标志编译器。控制。MC.match冗余错误设置为false(默认值为true),仅显示警告消息给出了。如果编译器。控制。MC.match冗余警告也是false(默认值为true),则不会生成消息。

    fun f(0,true)=1|f(0,假)=2|f(0,) = 3|f_=4;_stdIn:24.1-27.14错误:匹配冗余(0,真)=>。。。(0,false)=>。。。-->   (0,) => ..._ => ..._
  48. 匹配冗余和非穷尽

    提供了一些早期模式所涵盖的模式,而模式集并没有涵盖所有可能的输入。是否生成此消息及其严重性(错误或警告),由编译器标志控制

    编译器。控制。MC.match非穷尽错误编译器。控制。MC.match非穷尽警告编译器。控制。MC.match冗余错误编译器。控制。MC.match冗余警告

    例子:

    乐趣f 1=1|f 2=3|f 1=4;stdIn:1.1-24.12错误:匹配冗余和非穷尽1 => ...2 => ...-->   1 => ...
  49. %的多个where-defs

    这个哪里签名表达式的子句不能多次绑定(指定)同一类型的构造函数名称。

    签名S=sigt型结束其中类型t=int类型t=bool;stdIn:1.1-72.20错误:t的多个where-defs

    甚至:

    签名S=sig类型t结束其中类型t=int类型t=int;stdIn:1.1-76.19错误:t的多个where-defs
  50. 非结构化方法在模式论证中的应用

    应用于模式中参数的值不是构造函数。

    fun f(0 0)=真;stdIn:17.5-17.19错误:非结构化应用于模式中的参数
  51. 非构造函数应用于模式中的参数:%

    错误与[58]相同。当应用的值具有可以报告的名称。

    val a=0;值a=0:intfun f(a 0)=真;stdIn:18.5-18.19错误:非结构化应用于模式中的参数:a
  52. 结构共享中的非本地路径:%

    参与结构的结构共享规范未在当前签名中声明。

    签名S=sig结构A:信号端共享A=B.C结束;stdIn:41.11-41.18错误:结构共享中的非本地路径:B.C
  53. 类型共享中的非本地路径:%

    参与类型的类型共享规范未在当前签名中声明。

    签名S=sig类型t共享类型t=B.t结束;stdIn:44.16-44.23错误:类型共享中的非本地路径:B.t
  54. 运算符和操作数不一致

    函数(运算符)应用于类型不同于的值(操作数)函数所需的类型。

    乐趣f真=0|f假=1;val f=fn:布尔->整数f3;stdIn:25.1-25.4错误:运算符和操作数不一致[literal]运算符域:bool操作数:int在表达式中:第3页
  55. 运算符不是函数

    操作员位置中使用的值不是函数。

    3正确;stdIn:1.1-19.6错误:运算符不是函数[literal]运算符:int在表达式中:3真
  56. 或者人们不同意

    在使用<it>或-ed</tt>子模式的模式中(通过|),类型所有子模式必须一致。

    fun f(0|1|true)=0;stdIn:1.1-21.4错误:或字体不一致[literal]应为:int找到:bool在模式中:(1|真)
  57. 模式中超出范围的单词文字:0w%

    模式中使用的单词文字大于最大的可表示单词。

    0w100000000000=0的函数|f_=1;stdIn:1.1-27.12错误:模式中超出范围的单词文字:0w100000000000
  58. 重载变量未在类型中定义

    重载变量正在没有重载类型的类型中实例化定义。典型的重载变量包括数值运算,重载了数字类型(int、word等)

    真+真;stdIn:19.5错误:类型处未定义重载变量符号:+类型:bool
  59. 子句的参数或结果约束不一致

    在一个乐趣声明,每个子句或规则,由|(竖线符号),必须具有相同的类型(两者子句接受的类型和子句返回的类型)。

    数据类型A=A;数据类型A=A数据类型B=B;数据类型B=B乐趣f A=0|f B=0;stdIn:36.1-37.12错误:子句的参数或结果约束不一致[tycon不匹配]此子句:类型B->'Z前面的子句:typeA->'Z在声明中:(f)=(fn A=>0|B=>0)
  60. AS模式中变量周围的括号非法

    以“as”模式拍打作为拍打,其中左侧的图案“as”是一个简单变量,变量不能用括号括起来。

    val((a)as(b,c))=(4,5);stdIn:19.5-31.2错误:AS模式中变量周围的括号非法
  61. 模式和约束不一致

    在模式中,模式的类型和模式的约束类型必须一致。

    f(0:bool)=0;stdIn:38.1-38.17错误:模式和约束不一致[literal]模式:int约束:布尔在模式中:0:布尔
  62. val-dec中的模式和表达不一致

    在声明中val值拍打=经验,的类型拍打必须与的类型匹配经验.

    val s:字符串=6;stdIn:1.1-18.6错误:val-dec中的模式和表达式不一致[literal]模式:字符串表达式:int在声明中:s:字符串=6
  63. val-dec中的模式和表达不一致

    在声明中val值拍打=经验,类型拍打必须与的类型匹配经验.

    vals:字符串=6;stdIn:1.1-18.6错误:val-dec中的模式和表达式不一致[literal]模式:字符串表达式:int在声明中:s:字符串=6
  64. “as”左边的模式必须是可变的

    以“as”模式拍打作为拍打,第一个图案必须是简单的变量,而不是使用元组的更复杂的模式或数据构造函数。

    val(a,)作为(,b)=(7.5);stdIn:1.5-18.8错误:AS左侧的模式必须是可变的
  65. AS左侧的图案必须可变

    在一个作为-图案`拍打作为拍打,第一个图案必须是简单变量,而不是用元组构造的复合模式或数据构造函数。

    val(a,)作为(,b)=(7,5);stdIn:1.5-18.8错误:AS左侧的模式必须是可变的
  66. 以下位置的结构定义可能不一致:%

    当签名包含之间的共享约束时两个特定结构,每个都使用哪里子句,编译器无法计算结构兼容。这是编译器中的一个错误,将被修复在未来的版本中。

    签名SIG=信号发生器结构A:信号端结构B:sig结构Z:sig结束结束,其中Z=A结构C:sig结构Z:sig结束结束,其中Z=A共享B=C结束;stdIn:1.1-38.4错误:可能不一致的结构定义位于:B.Z
  67. 实际常数超出范围:%

    实数文本的指数必须位于目标机器的浮点表示。目前所有SML/NJ目标机器都使用IEEE双精度浮点,所以实际文字必须在范围内~1.79769313486e308至1.797693134.86e308。

    2e309;未捕获的异常BadReal提出时间:bignums/realconst.sml:228.54-228.63

    目前,编译器中的错误会引发异常,而不是打印相应的错误消息。[检查!]

  68. 将数据构造函数“%”重新绑定为变量

    绑定为数据构造函数的标识符不能作为变量反弹以一种模式。

    乐趣nil x=x;stdIn:1.5-2.9错误:将数据构造函数“nil”重新绑定为变量
  69. 匹配中的冗余模式

    在多子句模式匹配中,如果后面的模式之一只能匹配早期模式所涵盖的案例,然后后面的模式是多余的,永远无法匹配。在SML'97中具有无用(冗余)模式是错误的。

    4个手柄匹配=>5|e=>6|绑定=>7;stdIn:1.1-20.15错误:冗余模式匹配匹配=>。。。e=>。。。-->绑定=>。。。
  70. 冗余where定义

    这个哪里签名表达式的子句不能将相同的特定结构绑定到不同的结构。

    签名S1=信号发生器结构A:sig型t端结束其中A=Int,A=Real;stdIn:32.1-36.23错误:定义冗余
  71. 数据类型复制的rhs不是数据类型

    声明

    数据类型标识1=数据类型标识2

    绑定名称的标识1到现有数据类型标识2,要求标识2必须是数据类型,而不是普通类型。

    datatype myint=数据类型int;stdIn:38.1-38.30错误:数据类型复制的rhs不是数据类型
  72. 数据类型复制规范的rhs不是数据类型

    规范

    数据类型标识1=数据类型标识2

    绑定名称的标识1到现有数据类型标识2,要求id2型必须是数据类型,而不是普通类型。

    签名S=信号类型t数据类型d=数据类型t结束;stdIn:37.18-40.17错误:数据类型复制规范的rhs不是数据类型
  73. 子句的右侧与函数结果类型不一致

    函数的主体(每个子句)必须具有指定的类型在function-result类型约束中(如果存在)。

    fun f(x):int=“hello”;stdIn:1.1-37.24错误:子句的右侧与函数结果类型不一致[类型错配]表达式:字符串结果类型:int在声明中:f=(fn x=>“hello”:int)
  74. 具有子结构的共享结构

    结构不能与其组件之一共享。

    签名S=sig结构A:sig结构B:sig结束共享A=A.B结束;stdIn:1.1-44.20错误:与子结构共享结构
  75. 结构%由部分应用的函子定义

    SML/NJ中的函子可能是高阶的,因此下面的示例返回(作为结果)另一个函子返回结构。将F应用于参数的结果不能,因此,绑定到结构名称。

    functor F()()=结构结束;函子F:<sig>结构S=F();stdIn:45.15-45.18错误:结构S由部分应用的函子定义
  76. 在%处发现语法错误

    如果解析器发现语法错误并且无法使用内置的纠错启发法纠正问题(删除、插入或替换标记)。例子:

    x and also val y orelse z;stdIn:1.6错误:VAL中发现语法错误

    注释:解析程序中的错误校正依赖于前瞻性。根据输入是否为取自交互式顶层或源文件。因此,同一程序的错误消息可能因情况而异。(另请参阅错误注释[78]。)

  77. 语法错误:删除%

    此消息表示纠错解析器试图通过删除(忽略)某些输入来纠正语法错误标记。

    例如,假设该文件删除.sml包含以下代码:

    结构99 X=结构val x=1结束

    编译此文件将生成:

    -使用“delete.sml”;[打开delete.sml]
    delete.sml:1.11-1.13错误:语法错误:删除INT

    注释:分析器中的错误更正依赖于lookahead。根据输入是否为从交互式顶层或源文件中获取。因此,同一程序的错误消息可能因情况而异。(另请参阅错误78的注释。)

  78. 语法错误:插入%

    与前一条一样,此错误消息由SML/NJ生成纠错解析器。它表明解析器能够通过插入额外的标记来更正语法错误。

    例如,假设该文件插入.sml包含以下代码:

    val x=1;y=x+x在里面x年结束

    编译此文件将生成:

    -使用“insert.sml”;[开头插入.sml]insert.sml:2.16错误:语法错误:插入VAL

    注释:解析程序中的错误校正依赖于前瞻性。由于交互式解析器不能使用lookahead,因此很可能它的语法错误消息与当编译文件。例如,键入插入.sml直接进入交互式顶层生成:

    val x=1;y=x+x在里面x年结束;stdIn:2.14-2.19错误:语法错误:删除ID EQUALOP IDstdIn:2.20-3.3错误:语法错误:删除ID INstdIn:4.3-4.8错误:语法错误:删除ID ASTERISK ID
  79. 语法错误:将%替换为%

    解析器发现语法错误,已尝试修复该问题通过将某些令牌替换为其他令牌。

    例如,假设该文件替换.sml包含以下代码:

    fn x=x

    编译此文件将生成:

    -使用“replace.sml”;[打开replace.sml]replace.sml:1.6错误:语法错误:用DARROW替换EQUALOP

    注释:分析器中的错误更正依赖于lookahead。根据输入是否为从交互式顶层或源文件中获取。因此,同一程序的错误消息可能因情况而异。(另请参阅错误78的注释。)

  80. %的类型实数与指定的实数不匹配

    类型构造函数的arity与内部的定义不同结构及其在相应签名中的声明约束。

    例子:

    签名S=信号类型('a,'b)t结束;签名S=信号类型('a,'b)t结束结构S:S=结构键入“a t=”列表结束;stdIn:75.1-77.4错误:t的类型参数与指定的参数不匹配
  81. 类型%必须是数据类型

    此消息指示给定结构需要某种类型数据类型但是结构将其定义为不同的类型(即,不是数据类型)。

    例子:

    签名S=sig数据类型t=A|B结束;签名S=sig数据类型t=A|B结束结构S:S=结构类型t=int结束;stdIn:80.1-82.4错误:类型t必须是数据类型stdIn:80.1-82.4错误:不匹配的构造函数规范:AstdIn:80.1-82.4错误:不匹配的构造函数规范:B
  82. 类型%必须是相等类型

    当内部某个类型的定义结构不允许相等,而相应的签名结构的约束将该类型指定为eq类型.

    例子:

    签名S=sig eqtype t end;签名S=sig eqtype t end结构S:S=结构类型t=int->int结束;stdIn:86.1-88.4错误:类型t必须是相等类型
  83. val rec dec的类型约束不是函数类型

    使用定义的名称val记录必须参考函数值。因此,它们的类型必须是函数类型。

    例子:

    值记录f:int=fn x=>x;stdIn:1.1-79.26错误:val rec dec的类型约束不是函数类型[类型con不匹配]约束:int在声明中:f=(fn x=>x)
  84. val-rec声明的类型约束[sic]不一致

    当声明的格式为

    val记录身份证件:类型1=经验:类型2

    和类型第1类类型2不同意。

    val rec f:int->int=(fn x=>x):布尔->布尔;stdIn:1.1-29.30错误:val rec声明的类型约束不一致[tycon不匹配]这个约束:bool->bool外部约束:int->int在声明中:f=(fn x=>x):布尔->布尔
  85. 类型构造函数%给定了%个参数,需要%

    类型构造函数使用了错误数量的类型参数。

    例子:

    类型('a,'b)t='a*'b;类型('a,'b)t='a*'b类型u=(int,bool,real)t;stdIn:103.28错误:类型构造函数t给定了3个参数,需要2个
  86. 类型变量%在同一范围内具有不同的相等属性

    此消息表示同一类型的不同事件变量具有不一致的相等属性。在实践中表示类型变量的相同名称同时用于一个撇号和带有两个撇号。(请注意,这可能是好的,如果这两个事件按范围明确分开。)

    例子:

    f(x:'a,y:'a)=(x,y);stdIn:118.2-119.12错误:类型变量a在同一范围内具有不同的相等属性

    但是:

    有趣的'af(x:'a)=让快乐“g(y:'a)=y=y以x为单位结束;val f=fn:'a->'a
  87. 异常规范中的类型变量:%

    签名中的异常声明不能包含类型变量。

    例子:

    签名S=sig列表的异常E结束;stdIn:135.3-135.26错误:异常规范中的类型变量:E
  88. 顶级异常类型中的类型变量

    顶级异常定义不能包含类型变量。

    例子:

    列表的例外E;stdIn:1.1-135.4错误:顶级异常类型中的类型变量
  89. 规则类型不一致

    比赛中规则的右侧必须在类型上一致。匹配发生在案例-和中fn公司-表达式。

    示例:

    fn真=>假|假=>1;stdIn:144.1-144.30错误:规则类型不一致[literal]早期规则:bool->bool此规则:bool->int在规则中:假=>1fn x=>案例x真=>假|假=>1;stdIn:144.6-144.42错误:规则类型不一致[literal]早期规则:bool->bool此规则:bool->int在规则中:假=>1
  90. 未绑定的函子签名:%

    此错误消息与SML/NJ的高阶模块有关标准ML的扩展。中函子声明的约束某些签名使用未定义的函子签名名称。

    例子:

    签名S=sig函子F:FS结束;stdIn:145.3-145.17错误:未绑定函子签名:FS
  91. 未绑定函子:%

    未定义正在使用的函子的名称。

    例子:

    结构S=F();stdIn:147.15-147.19错误:未绑定函数:F
  92. 未绑定左侧,其中(结构):%

    A类哪里规范是指没有在那里声明的签名。

    例子:

    结构A=结构端;结构A:信号端签名S=信号结束;签名S=信号结束签名S’=S,其中B=A;stdIn:158.1-158.29错误:未绑定的左手边,其中(结构):B

    但是:

    签名S=sig结构B:sig结束;签名S=sig结构B:sig结束签名S'=S,其中B=A;签名S'=sig结构B:sig结束
  93. 类型为%的未绑定左侧

    A类其中类型规范是指没有在那里声明的签名。

    例子:

    类型t=int;类型t=int签名S=信号结束;签名S=信号结束签名S'=S,其中类型u=t;stdIn:169.1-169.34错误:类型为u的左侧未绑定

    但是:

    签名S=u型签名;签名S=u型签名签名S'=S,其中类型u=t;签名S’=签名类型u=t end
  94. 未绑定签名:%

    使用了签名名称,但尚未定义;例如S公司在以下示例中:

    结构A:S=结构端;stdIn:16.15错误:未绑定签名:S
  95. 未绑定结构:%

    使用了结构名称,但尚未定义;例如B类在以下示例中:

    -结构A=B;stdIn:2.10错误:未绑定结构:B
  96. 未绑定类型构造函数:%

    使用了类型构造函数名称,但尚未定义,例如t吨在以下示例中:

    val x:t=();stdIn:2.4错误:未绑定类型构造函数:t
  97. 类型声明中的未绑定类型变量:%

    类型变量出现在类型或数据类型的右侧声明,而没有被绑定为左侧。

    type t='列表;stdIn:2.5-2.12错误:类型声明中未绑定类型变量:“a数据类型'a t=a of'b;stdIn:1.1-18.2错误:类型声明中的未绑定类型变量:“b
  98. 未绑定变量或构造函数:%

    使用值变量或构造函数时未定义或作为形式参数绑定。

    x;stdIn:1.1错误:未绑定变量或构造函数:xfun f x=x+y;stdIn:2.8错误:未绑定变量或构造函数:y
  99. 未解析的flex记录(无法判断除%之外还有哪些字段)

    当一个灵活的记录模式(一个包含…​)则上下文必须提供足够的类型信息以确定所有字段是什么(尽管不一定是它们的类型)。

    乐趣f{x,…}=x;stdIn:37.1-37.18错误:未解析的flex记录(不知道除了#x还有哪些字段)函数f({x,…}:{x:int,y:bool})=x;valf=fn:{x:int,y:bool}->int

    如果灵活记录模式中出现多个字段,则将生成此错误消息的不同变体。参见错误[100]。

  100. 未解析的flex记录(需要知道此上下文中所有字段的名称)

    模式匹配中的模式是灵活记录. Thepattern省略了记录的一些成员,并总结了他们的使用省略号(“…​“)。但在给定的上下文没有足够的信息使类型检查器能够推断出缺失的字段名称。

    函数f{x,y,…}=(x,y);标准输入:118.1-118.24错误:未解析的flex记录(需要知道所有字段的名称在此上下文中)类型:{x:'Y,Y:'x;'Z}
  101. 结构中的值类型与签名规范不匹配

    结构的值组件具有不同的类型在与结构匹配的签名中指定。

    签名S=信号发生器val x:整数结束;签名S=sig val x:int end结构A:S=结构val x=真结束;stdIn:21.1-24.4错误:结构中的值类型与签名规范不匹配名称:x规范:int实际值:布尔
  102. 变量%并非出现在or-pattern的所有分支中

    SML/NJ支持或模式,其中单个规则可以有多个模式与分隔开|符号。这个or-pattern的组件模式需要具有具有相同类型的相同变量。

    f(nil|x::_)=1;stdIn:1.5-2.18错误:变量x并非出现在or-pattern的所有分支中

    下面是组件模式x: :_、和变量x个没有出现在第一个模式中。

  103. 在需要构造函数的位置找到变量:%

    出现在模式必须指定数据构造函数。

    f(Int.+)=3;stdIn:1.5-2.12错误:在需要构造函数的位置找到变量:Int+
  104. 向量表达式类型失败

    在形式的向量表达式中#[经验1,实验2,…​],所有的矢量元素表达式都必须是相同的类型。

    #[1,正确];stdIn:1.1-2.5错误:向量表达式类型失败[literal]fun f(x:int)=#[x,true];stdIn:2.11-2.20错误:矢量表达式类型失败[典型值不匹配]
  105. 矢量模式型故障

    在形式为的向量模式中#[第1部分,第2部分,所有矢量元素模式必须是相同的类型。

    函数f(#[x:int,y:bool])=(x+1;非y);stdIn:1.1-2.35错误:矢量模式类型故障[典型值不匹配]
  106. 其中defn应用于定义规范

    SML/NJ不允许在签名中对结构进行多重定义(一个通过定义规范,另一个通过哪里条款)。

    结构A=结构端;结构A:信号端签名S=信号发生器结构X:sig end=A结束其中X=A;stdIn:27.1-31.12错误:defn应用于定义规范
  107. 其中类型定义的arity错误:%

    其中类型定义必须与类型规范中的arity一致它适用于。

    签名S=信号发生器键入'at结束其中类型t=int;stdIn:1.1-26.19错误:类型定义的arity错误:t
  108. 其中类型定义应用于定义规范:%

    SML/NJ不允许在签名中定义多个类型(一个通过定义规范,另一个通过where类型条款)。

    签名S=信号类型t=int结束其中类型t=int;stdIn:1.1-22.19错误:类型defn应用于定义规范:t
  109. 数据类型复制中不允许使用withtype

    不能附加带有type条款至数据类型复制声明或规范。

    数据类型t=A;数据类型t=A数据类型s=数据类型tu=s列表类型;stdIn:37.1-38.20错误:数据类型复制中不允许使用withtype
  110. 单词常量太大

    Word常量(默认情况下为Word31.Word)限制为小于0w2147483648(0wx8000000个). 类似地对于Word32.word(绑定)类型的文字0w4294967296)和Word8.word(绑定为0w256)。

    0w2147483648;stdIn:1.1-18.3错误:字常量太大0wx8000000;stdIn:1.1-18.2错误:字常量太大0w4294967296:单词32.word;stdIn:25-1-25.13错误:字常量太大0wx100000000:单词32.word;stdIn:23-123.13错误:字常量太大0w256:单词8.word;stdIn:1.1-1.6错误:字常量太大0wx100:Word8.word;stdIn:1.1-24.2错误:字常量太大

警告消息

  1. 匹配非穷尽

    子句中的模式不足,无法与所有可能的输入。如果标志编译器。控制。MC.matchNonExhaustive错误设置为(默认设置),编译器。控制。MC.match非穷尽警告设置为true。如果这两个标志都不为真,那么编译器不会抱怨非穷尽匹配。

    乐趣f 0=1|f 1=1;stdIn:1.1-22.12警告:匹配非穷尽0 => ...1 => ...val f=fn:int->int
  2. 匹配冗余

    提供了一些早期模式所涵盖的模式。如果编译器标志编译器。控制。MC.match冗余错误设置为false(默认为true),并且编译器。控制。MC.match冗余警告真的(默认设置)。

    fun f(0,true)=1|f(0,假)=2|f(0,) = 3|f_=4;_stdIn:24.1-27.14警告:匹配冗余(0,真)=>。。。(0,false)=>。。。-->   (0,) => ..._ => ..._
  3. 匹配冗余和非穷尽

    提供了一些早期模式所涵盖的模式,而模式集并没有涵盖所有可能的输入。是否生成此消息及其严重性(错误或警告),由编译器标志控制

    编译器。控制。MC.matchNonExhaustive错误编译器。控制。MC.match非穷尽警告编译器。控制。MC.matchRedundantError(MC.match冗余错误)编译器。控制。MC.matchRedundant警告

    如果前两个设置为false,后一个设置为false两个设置为true,则生成此警告。

    乐趣f 1=1|f 2=3|f 1=4;stdIn:1.1-24.12警告:匹配冗余和非穷尽1 => ...2 => ...-->   1 => ...
  4. 具有相同优先级的混合左关联运算符和右关联运算符

    如果一个中缀表达式像

    aexp id1 aexp ids2 aexp

    包含两个中缀操作符标识1标识2具有相同优先级但相反结合性,SML'97定义声明该表达式是非法的。但SML/NJ仅发布此警告消息,并将左边有两个操作员。

    -中缀4<<;中缀4<<-infixr 4>>;infixr 4>>-fun(x>>y)=“正确”;val>>=fn:'a*'b->string-fun(x<<y)=“左”;val<<=fn:'a*'b->string- 1 << 2 >> 3;stdIn:21.8-21.10警告:混合了具有相同优先级的左关联运算符和右关联运算符valit=“right”:字符串- 1 >> 2 << 3;stdIn:22.8-2.10警告:混合了具有相同优先级的左关联运算符和右关联运算符valit=“left”:字符串
  5. 非通用类型变量

    此警告针对的是顶级值声明类型具有无法泛化的自由类型变量,因为价值限制.

    val x=(fn x=>x)无;stdIn:17.1-17.24警告:类型变量未泛化,因为值限制实例化为虚拟类型(X1、X2…)val x=[]:?。X1列表

    在本例中x个具有类型'X列表,其中“X”是自由类型变量。此类型变量不能泛化为多态类型x个因为右手表达膨胀的,膨胀的(本例中为函数调用)。所以编译器删除自由类型变量“X”正在发明一种新的名为的虚拟类型X1型并实例化“X”X1型.自X1型不匹配任何其他类型,几乎没有人能做x个现在(一个人可以接受其长度为(0),但不能将任何值约束到x个).