分析错误
让 x个 = 4 在里面 x个+ 三 结束
foo公司 . sml公司 : 1.5 错误 : 语法 错误 : 插入 VAL公司
“编译器错误”错误消息
错误 : 编译器 缺陷 : 模块实用程序 : 获取Str : 坏的 实体
正常错误消息
-
加薪的论点也不例外 后面的表达式 提升 关键字应该 计算为异常值,即类型的值 exn(外部网络) . 在这种情况下,该值具有其他不合适的类型。 例如。: 提高3; stdIn:16.7错误:raise的参数不是异常[literal] 引发:int 在表达式中: 提升3 -
数据类型复制中的参数类型变量 在数据类型复制声明中 左侧或右侧的类型路径(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 -
在子句中找不到函数参数 当在 a中的左侧 乐趣 声明,或 缺少中缀函数符号的形式参数。 f=3; stdIn:1.5错误:在子句中找不到函数参数 中缀3++; 中缀3++ fun(x xx)=3; stdIn:1.5-2.6错误:在子句中找不到函数参数 stdIn:1.5-2.6错误:子句中的函数符号非法 -
案例对象和规则不一致 这个 case对象 是后面的表达式 案例 关键字。 它的类型必须与中lhs模式的类型一致 这个 规则 ( 帕特⇒实验 )遵循 属于 关键字。 所有规则的模式在类型上也必须一致,但这是另一个错误。 案例3 为真=>1 |假=>2; stdIn:1.1-25.16错误:case对象和规则不一致[literal] 规则域:bool 对象:int 在表达式中: (案例3 为真=>1 |错误=>2) -
子句并非都有函数名 在一个 乐趣 定义,函数名称必须出现在 每个条款。 如果在一个或多个子句中省略了它,则会导致此错误。 乐趣f nil=1 |(x::y)=x; stdIn:1.5-17.15错误:子句并非都有函数名 当函数名为 函数定义的子句不同,例如因为 拼写错误。 趣味测试(某些)=真 |test NONE=假; stdIn:120.5-121.24错误:子句并不都有函数名 -
子句的模式数不尽相同 在一个 乐趣 声明,每个子句或规则,由 | (竖线符号),必须具有相同数量的 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 -
常量构造函数应用于模式中的参数:% 像这样的常量构造函数 无 无法应用于 模式中的参数。 val零x=[]; stdIn:1.5-24.8错误:对模式中的参数应用了常量构造函数:nil -
构造函数和参数在模式上不一致 模式中的非常量构造函数必须应用于参数 适当类型的模式(即构造函数的域类型)。 数据类型t=A of int; val A真=A3; stdIn:1.1-26.3错误:构造函数和参数在模式中不一致[tycon不匹配] 构造函数:int->t 参数:bool 在模式中: 真的 -
在模式中使用的数据构造函数%没有参数 当参数为 在模式中使用(但在表达式中使用时不一定如此)。 数据类型t=A of int val A=A3; stdIn:17.5-17.12错误:在模式中使用的数据构造函数A没有参数 -
数据类型%与规范不匹配 通常是因为 结构与施工人员(姓名或数量)不一致 与结构匹配的签名中的相应数据类型规范。 签名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 -
数据类型%具有重复的构造函数名称:%,% 给定数据类型的构造函数的名称必须完全不同。 数据类型t=A|B|A of int; stdIn:1.1-26.5错误:数据类型t具有重复的构造函数名称:A -
实例化中的依赖循环 这个 实例化 进程接受签名并创建伪签名 结构匹配该签名,没有额外的共享(即。 没有识别出不需要的类型)。 此过程可以 由于各种循环而失败。 一个例子 圆的简单形式为: 签名S= 信号发生器 u型 数据类型s=A of u 共享类型u=s 结束; stdIn:16.1-21.4错误:实例化中的依赖循环 默认情况下,每个签名在声明时都被实例化,以 尽早检测错误。 然而,签名实例化 仅当签名用作函子时才严格必要 参数签名或在不透明中( :> )签名约束。 -
包含导致%的重复构造函数规范 签名应该只有一个给定值或 构造函数名称。 多构造函数的一种常见方法 如果构造函数是 显式指定,也可以通过included隐式指定 签名。 签名S= 信号发生器 数据类型t=A of int 结束; 签名S=sig数据类型t=A of int end 签名T= 信号发生器 数据类型u=A 包括S 结束; stdIn:27.3-28.13错误:包含导致A的构造函数规范重复 -
重复的异常声明 在单个异常中多次声明异常名称 宣言。 int的异常E 布尔的E; stdIn:17.1-18.14错误:重复异常声明:E 请注意,如果相同的异常名称在不同的 异常声明,如下所示。 int的异常E; int的异常E 布尔的例外E; bool的异常E -
val rec dec中的函数名重复 在单个函数中声明多个函数时 val记录 声明中,函数的名称必须是不同的。 val rec f=(fn x=>x) 并且f=(fn y=>y+3); stdIn:21.1-22.24错误:val rec dec:f中函数名重复 -
fun-dec中的重复函数名 在单个函数中声明多个函数时 乐趣 声明中,函数的名称必须是不同的。 乐趣f x=x fy=y+3; stdIn:1.1-23.16错误:fun dec:f中函数名重复 -
记录中的重复标签 记录表达式或模式中的标签名称必须是不同的。 {a=3,b=true,a=“abc”}; stdIn:1.1-1.21错误:记录中存在重复标签:a 函数f{a=x,a=y}=3; stdIn:2.2-2.11错误:记录中存在重复标签:a -
签名中%%的重复规范 给定名称空间中只有一个给定名称的规范是 允许在签名中使用。 值和构造函数(包括异常 构造函数)位于一个名称空间中; 类型、结构和函子 是不相交的名称空间。 所以 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端 结束 -
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的重复规范 -
包含导致结构%的重复规范 结构名称的多个规范出现在签名中,其中一个是 通过 包括 规范。如果 首先是包含的结构规范,您会得到错误[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的规范重复 -
include导致类型%的重复规范 签名中出现了多个类型名规范,其中一个是 通过 包括 规范。如果 首先是包含的结构规范,您会得到错误[19]。 签名S1= 信号发生器 类型t 结束; 签名S1=信号类型t结束 签名S2= 信号发生器 键入'at 包括S1 结束; 标准输入:79.3-80.14错误:包含导致类型t的规范重复 签名S3= 信号 包括S1 键入'at 结束; stdIn:83.3-84.13错误:签名中类型构造函数t的规范重复 -
重复的类型定义 类型名称在单个同时类型中定义了两次 声明(即用分隔的类型声明 和 . 如果同时声明被拆分为 单独声明,没有错误。 类型t=int t=bool; stdIn:17.1-18.13错误:重复类型定义:t 类型t=int; 类型t=int 类型t=bool; 类型t=bool -
类型声明中的类型名称重复 在数据类型声明中多次定义类型名 (可能包括在 带有type 部分。 数据类型t=A t=B; stdIn:1.1-19.10错误:类型声明中存在重复的类型名称:t 数据类型t=A 类型t=int; stdIn:1.1-20.17错误:类型声明中的类型名称重复:t -
重复的类型变量名 类型变量名称在类型参数列表中重复,当 定义n元类型或数据类型构造函数,或显式绑定 在值声明中键入。 类型('a,'a)t='a*'a; stdIn:21.4-21.11错误:类型变量名称重复:a 数据类型('a,'a)t='a的a; stdIn:1.1-21.15错误:类型变量名称重复:a fun('a,'a)f(x:'a)=x; stdIn:1.1-21.10错误:重复的类型变量名:a -
包含导致%的重复值规范 一个签名中出现了一个值名称的多个规范,其中一个规范为 后来通过 包括 规范。如果 首先是包含的结构规范,您会得到错误[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= 信号发生器 包括S1 val x:整数 结束; stdIn:37.3-38.15错误:签名中变量或构造函数x的规范重复 -
模式中的重复变量 变量在模式中(或参数序列中)只能出现一次 curried函数声明的模式。 f(x,x)=x; stdIn:1.5-2.10错误:模式中的变量重复:x 乐趣f x x=x; stdIn:1.5-2.9错误:模式中的变量重复:x val(x,x)=(3,3); stdIn:1.1-36.3错误:模式中的变量重复:x -
无法在显式类型变量的绑定声明中对其进行泛化:% 在值表达式或 声明必须在适当的点进行概括(确定 显式或隐式)。 如果类型变量不能被泛化 此时,由于值限制,将产生此错误消息。 val x:'列表=(fn x=>x)nil; stdIn:1.1-37.14错误:显式类型变量无法在其绑定声明中进行泛化:“a val'a(x:'列表)=(fn x=>x)nil; stdIn:1.1-38.5错误:无法在显式类型变量的绑定声明中进行泛化:“a -
表达式和处理程序不一致 异常中每个规则右侧的类型 处理程序必须与基表达式的类型一致 处理程序被附加到,因为 句柄表达式可以是基表达式的句柄表达式,也可以是 处理程序规则之一返回的值。 fun f x=(hd x)+1句柄空=>真; stdIn:2.6-38.7错误:表达式和处理程序不一致[literal] 正文:int 处理程序范围:bool 在表达式中: 硬盘x+1 手柄 空=>真 |exn=>提高exn -
表达式或模式以中缀标识符“%”开头 中缀标识符不能是表达式中的第一个标识符, 除非前面有 操作 关键字。 +(2,3); stdIn:1.1错误:表达式或模式以中缀标识符“+”开头 op+(2,3); valit=5:int -
表达式或模式以中缀标识符“%”结尾 表达式不能以中缀标识符结尾。 也许有 一个失踪的人 操作 关键字。 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 -
固定优先级必须介于0和9之间 这一点很明显。 在定义新的中缀操作符时,您有 使其适应现有的优先级排序,这限于 十个级别,从0到9,数字越大,优先级越高。 请参阅 顶级环境 预定义先例的基础文档章节 中缀运算符。 中缀10++; stdIn:43.7-43.9错误:固定优先级必须介于0和9之间 中缀~ 2+; stdIn:2.2-2.4错误:固定优先级必须介于0和9之间 -
找到数据构造函数而不是异常 在需要异常构造函数标识符的上下文中, 而是找到了数据构造函数标识符。 例外情况Foo=nil; stdIn:17.1-17.20错误:找到数据构造函数而不是异常 -
找到变量而不是异常 在需要异常构造函数标识符的上下文中, 而是找到了一个值变量。 val x=3; val x=3:整数 异常Foo=x; stdIn:18.1-18.18错误:找到变量而不是异常 -
处理程序域不是exn 在以下规则中 处理程序 关键字,规则左侧的模式类型 必须是 exn(外部网络) 。在下面的示例中,第一个错误 消息是由与隐式默认规则不匹配导致的 处理处理程序的显式规则未处理的异常。 3手柄nil=>4; stdIn:1.1-18.7错误:规则类型不一致[类型不匹配] 早期规则:'Z列表->int 此规则:exn->'Y 在规则中: exn=>提升exn stdIn:1.1-18.7错误:处理程序域不存在[tycon不匹配] 处理程序域:'Z列表 在表达式中: 三 手柄 无=>4 |exn=>提高exn -
格式错误的数据类型规范 在签名中的数据类型复制规范中,键入 参数位于规范的左侧。 签名S= 信号发生器 数据类型'a t=数据类型bool 结束; stdIn:26.3-26.33错误:格式错误的数据类型规范 -
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:int val z=[2]:int列表 -
子句中的非法函数符号 在函数声明中,位于 关键字 乐趣 和等号 必须是格式良好的应用术语,并且运算符(即函数 该术语必须是一个简单的 标识符。 如果应用程序有中缀运算符,则必须 用括号括起来(除非后面紧跟着类型约束 或等号); 否则它可能不会被加括号。 fun(f x)=3; (*括号错误 ) stdIn:1.5-2.5错误:在子句中找不到函数参数 stdIn:1.5-2.5错误:子句中的函数符号非法 乐趣(x+y)=3; ( 好 啊; 重新定义中缀+运算符*) val+=fn:“a*”b->int -
类型共享%=%中的不一致算术:%具有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。 -
类型共享中不一致的相等属性 当类型构造函数具有不兼容的相等性时,会发生此错误 属性通过共享约束而等同。 发生这种情况时 签名不一致,无法成功匹配。 签名S= 信号发生器 eq类型t 数据类型u=u of int->int(*不是相等类型*) 共享类型t=u 结束; stdIn:17.1-22.4错误:类型共享中的相等属性不一致 -
中缀运算符“%”在fun-dec中没有使用“op” 声明为中缀符号的函数符号用于 用于声明非固定函数的函数声明。 中缀foo; 中缀foo fun 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 -
需要中缀运算符,或删除括号 关键字后的第一个术语 乐趣 在里面 函数声明是带括号的应用程序,表示 中缀应用程序,但中间的子rm不是中缀符号。 乐趣(x f y)=(); (如果“f”是中缀,则*有效 ) stdIn:18.8错误:需要中缀运算符,或删除括号 fun x f y=(); ( 好的,但可能不是预期的那样*) val x=fn:'a->'b->单位 -
在需要非固定标识符的地方使用了中缀符号“%” 在一个 val记录 声明,if 正在声明的标识符(在声明的左侧)是 中缀符号,必须以 操作 关键字。 中缀++; 中缀++ val rec++=(fn x=>x); stdIn:17.9-17.11错误:在需要非固定标识符的地方使用了中缀符号“++” val rec op++=(fn x=>x); val++=fn:'a->'a -
install_pp:空路径 功能 编译器。 pp表格安装_pp 安装 用户定义的漂亮打印机函数(第二个参数) 由第一个指定的生成(即数据类型或抽象类型) 参数,它必须是可以 解释为命名 当前环境中的数据类型或抽象类型。 此函数只能在顶层调用。 编译器。 PPTable.install_pp[](fn x=>fn y=>()); 错误:install_pp:空路径 -
install_pp:非生成类型构造函数 功能 编译器。 pp表格安装_pp 安装 用户定义的漂亮打印机函数(第二个参数) 由第一个指定的生成型(即数据类型或弃权型) 参数,它必须是可以 解释为命名数据类型的符号路径(longTyCon) 或者在当前环境中弃权。 此功能只应 被高层调用。 编译器。 PPTable.install_pp[“t”](fn x=>fn y=>()); 错误:install_pp:非生成类型构造函数 -
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:int val x=约1073741825; stdIn:30.10-30.21错误:int常量太大 -
匹配非穷尽 子句中的模式不足以匹配所有 可能的输入。 如果标志 编译器。 控制。 MC.match非穷尽错误 设置为true(默认值为false),否则,如果 编译器。 控制。 MC.match非穷尽警告 设置为true。 如果这两个标志都不为真,那么 编译器不会抱怨非穷尽匹配。 乐趣f 0=1 |f 1=1; stdIn:1.1-22.12错误:match nonexualtive 0 => ... 1 => ... val f=fn:int->int -
匹配冗余 提供了一种被一些早期模式覆盖的模式。 如果编译器标志 编译器。 控制。 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, ) => ... _ => ..._ -
匹配冗余和非穷尽 提供了一些早期模式所涵盖的模式, 而模式集并没有涵盖所有可能的输入。 是否生成此消息及其严重性(错误或 警告),由编译器标志控制 编译器。 控制。 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 => ... -
%的多个where-defs 这个 哪里 签名表达式的子句不能 多次绑定(指定)同一类型的构造函数名称。 签名S=sig t型 结束 其中类型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 -
非结构化方法在模式论证中的应用 应用于模式中参数的值不是构造函数。 fun f(0 0)=真; stdIn:17.5-17.19错误:非结构化应用于模式中的参数 -
非构造函数应用于模式中的参数:% 错误与[58]相同。 当应用的值具有 可以报告的名称。 val a=0; 值a=0:int fun f(a 0)=真; stdIn:18.5-18.19错误:非结构化应用于模式中的参数:a -
结构共享中的非本地路径:% 参与结构的结构 共享 规范未在当前签名中声明。 签名S=sig 结构A:信号端 共享A=B.C 结束; stdIn:41.11-41.18错误:结构共享中的非本地路径:B.C -
类型共享中的非本地路径:% 参与类型的类型 共享 规范 未在当前签名中声明。 签名S=sig 类型t 共享类型t=B.t 结束; stdIn:44.16-44.23错误:类型共享中的非本地路径:B.t -
运算符和操作数不一致 函数(运算符)应用于类型不同于的值(操作数) 函数所需的类型。 乐趣f真=0 |f假=1; val f=fn:布尔->整数 f3; stdIn:25.1-25.4错误:运算符和操作数不一致[literal] 运算符域:bool 操作数:int 在表达式中: 第3页 -
运算符不是函数 操作员位置中使用的值不是函数。 3正确; stdIn:1.1-19.6错误:运算符不是函数[literal] 运算符:int 在表达式中: 3真 -
或者人们不同意 在使用<it>或-ed</tt>子模式的模式中(通过 | ),类型 所有子模式必须一致。 fun f(0|1|true)=0; stdIn:1.1-21.4错误:或字体不一致[literal] 应为:int 找到:bool 在模式中: (1|真) -
模式中超出范围的单词文字:0w% 模式中使用的单词文字大于最大的可表示单词。 0w100000000000=0的函数 |f_=1; stdIn:1.1-27.12错误:模式中超出范围的单词文字:0w100000000000 -
重载变量未在类型中定义 重载变量正在没有重载类型的类型中实例化 定义。 典型的重载变量包括数值运算, 重载了数字类型(int、word等) 真+真; stdIn:19.5错误:类型处未定义重载变量 符号:+ 类型:bool -
子句的参数或结果约束不一致 在一个 乐趣 声明,每个子句或规则,由 | (竖线符号),必须具有相同的类型(两者 子句接受的类型和子句返回的类型)。 数据类型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) -
AS模式中变量周围的括号非法 以“as”模式 拍打 作为 拍打 ,其中左侧的图案 “as”是一个简单变量,变量不能用括号括起来。 val((a)as(b,c))=(4,5); stdIn:19.5-31.2错误:AS模式中变量周围的括号非法 -
模式和约束不一致 在模式中,模式的类型和模式的约束类型必须一致。 f(0:bool)=0; stdIn:38.1-38.17错误:模式和约束不一致[literal] 模式:int 约束:布尔 在模式中: 0:布尔 -
val-dec中的模式和表达不一致 在声明中 val值 拍打 = 经验 ,的类型 拍打 必须与的类型匹配 经验 . val s:字符串=6; stdIn:1.1-18.6错误:val-dec中的模式和表达式不一致[literal] 模式:字符串 表达式:int 在声明中: s:字符串=6 -
val-dec中的模式和表达不一致 在声明中 val值 拍打 = 经验 ,类型 拍打 必须与的类型匹配 经验 . vals:字符串=6; stdIn:1.1-18.6错误:val-dec中的模式和表达式不一致[literal] 模式:字符串 表达式:int 在声明中: s:字符串=6 -
“as”左边的模式必须是可变的 以“as”模式 拍打 作为 拍打 ,第一个图案 必须是简单的变量,而不是使用元组的更复杂的模式 或数据构造函数。 val(a, )作为( ,b)=(7.5); stdIn:1.5-18.8错误:AS左侧的模式必须是可变的 -
AS左侧的图案必须可变 在一个 作为 -图案` 拍打 作为 拍打 ,第一个图案 必须是简单变量,而不是用元组构造的复合模式 或数据构造函数。 val(a, )作为( ,b)=(7,5); stdIn:1.5-18.8错误:AS左侧的模式必须是可变的 -
以下位置的结构定义可能不一致:% 当签名包含之间的共享约束时 两个特定结构,每个都使用 哪里 子句,编译器无法计算结构 兼容。 这是编译器中的一个错误,将被修复 在未来的版本中。 签名SIG= 信号发生器 结构A:信号端 结构B:sig结构Z:sig结束 结束,其中Z=A 结构C:sig结构Z:sig结束 结束,其中Z=A 共享B=C 结束; stdIn:1.1-38.4错误:可能不一致的结构定义位于:B.Z -
实际常数超出范围:% 实数文本的指数必须位于 目标机器的浮点表示。 目前 所有SML/NJ目标机器都使用IEEE双精度浮点, 所以实际文字必须在范围内 ~1.79769313486e308至1.797693134.86e308。 2e309; 未捕获的异常BadReal 提出时间:bignums/realconst.sml:228.54-228.63 目前,编译器中的错误会引发异常,而不是 打印相应的错误消息。 [检查!] -
将数据构造函数“%”重新绑定为变量 绑定为数据构造函数的标识符不能作为变量反弹 以一种模式。 乐趣nil x=x; stdIn:1.5-2.9错误:将数据构造函数“nil”重新绑定为变量 -
匹配中的冗余模式 在多子句模式匹配中,如果后面的模式之一只能 匹配早期模式所涵盖的案例,然后 后面的模式是多余的,永远无法匹配。 在SML'97中 具有无用(冗余)模式是错误的。 4个手柄匹配=>5|e=>6|绑定=>7; stdIn:1.1-20.15错误:冗余模式匹配 匹配=>。。。 e=>。。。 -->绑定=>。。。 -
冗余where定义 这个 哪里 签名表达式的子句不能 将相同的特定结构绑定到不同的结构。 签名S1= 信号发生器 结构A:sig型t端 结束 其中A=Int,A=Real; stdIn:32.1-36.23错误:定义冗余 -
数据类型复制的rhs不是数据类型 声明 数据类型 标识1 =数据类型 标识2 绑定名称的 标识1 到现有数据类型 标识2 , 要求 标识2 必须是数据类型,而不是普通类型。 datatype myint=数据类型int; stdIn:38.1-38.30错误:数据类型复制的rhs不是数据类型 -
数据类型复制规范的rhs不是数据类型 规范 数据类型 标识1 =数据类型 标识2 绑定名称的 标识1 到现有数据类型 标识2 ,要求 id2型 必须是 数据类型,而不是普通类型。 签名S=信号类型t 数据类型d=数据类型t 结束; stdIn:37.18-40.17错误:数据类型复制规范的rhs不是数据类型 -
子句的右侧与函数结果类型不一致 函数的主体(每个子句)必须具有指定的类型 在function-result类型约束中(如果存在)。 fun f(x):int=“hello”; stdIn:1.1-37.24错误:子句的右侧与函数结果类型不一致[类型错配] 表达式:字符串 结果类型:int 在声明中: f=(fn x=>“hello”:int) -
具有子结构的共享结构 结构不能与其组件之一共享。 签名S=sig结构A:sig结构B:sig结束 共享A=A.B 结束; stdIn:1.1-44.20错误:与子结构共享结构 -
结构%由部分应用的函子定义 SML/NJ中的函子可能是高阶的,因此 下面的示例返回(作为结果)另一个函子 返回结构。 将F应用于参数的结果不能, 因此,绑定到结构名称。 functor F()()=结构结束; 函子F:<sig> 结构S=F(); stdIn:45.15-45.18错误:结构S由部分应用的函子定义 -
在%处发现语法错误 如果解析器发现语法错误并且 无法使用内置的纠错启发法纠正问题 (删除、插入或替换标记)。 例子: x and also val y orelse z; stdIn:1.6错误:VAL中发现语法错误 注释 :解析程序中的错误校正依赖于前瞻性。 根据输入是否为 取自交互式顶层或源文件。 因此, 同一程序的错误消息可能因情况而异。 (另请参阅错误注释[78]。) -
语法错误:删除% 此消息表示纠错解析器 试图通过删除(忽略)某些输入来纠正语法错误 标记。 例如,假设该文件 删除.sml 包含 以下代码: 结构99 X= 结构 val x=1 结束 编译此文件将生成: -使用“delete.sml”; [打开delete.sml] delete.sml:1.11-1.13错误:语法错误:删除INT 注释 :分析器中的错误更正依赖于lookahead。 根据输入是否为 从交互式顶层或源文件中获取。 因此, 同一程序的错误消息可能因情况而异。 (另请参阅错误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 ID stdIn:2.20-3.3错误:语法错误:删除ID IN stdIn:4.3-4.8错误:语法错误:删除ID ASTERISK ID -
语法错误:将%替换为% 解析器发现语法错误,已尝试修复该问题 通过将某些令牌替换为其他令牌。 例如,假设该文件 替换.sml 包含 以下代码: fn x=x 编译此文件将生成: -使用“replace.sml”; [打开replace.sml] replace.sml:1.6错误:语法错误:用DARROW替换EQUALOP 注释 :分析器中的错误更正依赖于lookahead。 根据输入是否为 从交互式顶层或源文件中获取。 因此, 同一程序的错误消息可能因情况而异。 (另请参阅错误78的注释。) -
%的类型实数与指定的实数不匹配 类型构造函数的arity与内部的定义不同 结构及其在相应签名中的声明 约束。 例子: 签名S=信号类型('a,'b)t结束; 签名S=信号类型('a,'b)t结束 结构S:S=结构 键入“a t=”列表 结束; stdIn:75.1-77.4错误:t的类型参数与指定的参数不匹配 -
类型%必须是数据类型 此消息指示给定 结构需要某种类型 数据类型 但是 结构将其定义为不同的类型(即,不是数据类型)。 例子: 签名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错误:不匹配的构造函数规范:A stdIn:80.1-82.4错误:不匹配的构造函数规范:B -
类型%必须是相等类型 当内部某个类型的定义 结构不允许相等,而相应的签名 结构的约束将该类型指定为 eq类型 . 例子: 签名S=sig eqtype t end; 签名S=sig eqtype t end 结构S:S=结构 类型t=int->int 结束; stdIn:86.1-88.4错误:类型t必须是相等类型 -
val rec dec的类型约束不是函数类型 使用定义的名称 val记录 必须参考 函数值。 因此,它们的类型必须是函数类型。 例子: 值记录f:int=fn x=>x; stdIn:1.1-79.26错误:val rec dec的类型约束不是函数类型[类型con不匹配] 约束:int 在声明中: f=(fn x=>x) -
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):布尔->布尔 -
类型构造函数%给定了%个参数,需要% 类型构造函数使用了错误数量的类型参数。 例子: 类型('a,'b)t='a*'b; 类型('a,'b)t='a*'b 类型u=(int,bool,real)t; stdIn:103.28错误:类型构造函数t给定了3个参数,需要2个 -
类型变量%在同一范围内具有不同的相等属性 此消息表示同一类型的不同事件 变量具有不一致的相等属性。 在实践中 表示类型变量的相同名称同时用于一个 撇号和带有两个撇号。 (请注意,这可能是 好的,如果这两个事件按范围明确分开。) 例子: 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 -
异常规范中的类型变量:% 签名中的异常声明不能包含类型变量。 例子: 签名S=sig 列表的异常E 结束; stdIn:135.3-135.26错误:异常规范中的类型变量:E -
顶级异常类型中的类型变量 顶级异常定义不能包含类型变量。 例子: 列表的例外E; stdIn:1.1-135.4错误:顶级异常类型中的类型变量 -
规则类型不一致 比赛中规则的右侧必须在类型上一致。 匹配发生在 案例 -和中 fn公司 -表达式。 示例: fn真=>假 |假=>1; stdIn:144.1-144.30错误:规则类型不一致[literal] 早期规则:bool->bool 此规则:bool->int 在规则中: 假=>1 fn x=> 案例x 真=>假 |假=>1; stdIn:144.6-144.42错误:规则类型不一致[literal] 早期规则:bool->bool 此规则:bool->int 在规则中: 假=>1 -
未绑定的函子签名:% 此错误消息与SML/NJ的高阶模块有关 标准ML的扩展。中函子声明的约束 某些签名使用未定义的函子签名名称。 例子: 签名S=sig 函子F:FS 结束; stdIn:145.3-145.17错误:未绑定函子签名:FS -
未绑定函子:% 未定义正在使用的函子的名称。 例子: 结构S=F(); stdIn:147.15-147.19错误:未绑定函数:F -
未绑定左侧,其中(结构):% 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结束 -
类型为%的未绑定左侧 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 -
未绑定签名:% 使用了签名名称,但尚未定义; 例如 S公司 在以下示例中: 结构A:S=结构端; stdIn:16.15错误:未绑定签名:S -
未绑定结构:% 使用了结构名称,但尚未定义; 例如 B类 在以下示例中: -结构A=B; stdIn:2.10错误:未绑定结构:B -
未绑定类型构造函数:% 使用了类型构造函数名称,但尚未定义,例如 t吨 在以下示例中: val x:t=(); stdIn:2.4错误:未绑定类型构造函数:t -
类型声明中的未绑定类型变量:% 类型变量出现在类型或数据类型的右侧 声明,而没有被绑定为 左侧。 type t='列表; stdIn:2.5-2.12错误:类型声明中未绑定类型变量:“a 数据类型'a t=a of'b; stdIn:1.1-18.2错误:类型声明中的未绑定类型变量:“b -
未绑定变量或构造函数:% 使用值变量或构造函数时未定义 或作为形式参数绑定。 x; stdIn:1.1错误:未绑定变量或构造函数:x fun f x=x+y; stdIn:2.8错误:未绑定变量或构造函数:y -
未解析的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]。 -
未解析的flex记录(需要知道此上下文中所有字段的名称) 模式匹配中的模式是 灵活记录 . Thepattern省略了记录的一些成员,并总结了他们的 使用省略号(“ … “)。但在给定的 上下文没有足够的信息使类型检查器 能够推断出缺失的字段名称。 函数f{x,y,…}=(x,y); 标准输入:118.1-118.24错误:未解析的flex记录(需要知道所有字段的名称 在此上下文中) 类型:{x:'Y,Y:'x;'Z} -
结构中的值类型与签名规范不匹配 结构的值组件具有不同的类型 在与结构匹配的签名中指定。 签名S= 信号发生器 val x:整数 结束; 签名S=sig val x:int end 结构A:S= 结构 val x=真 结束; stdIn:21.1-24.4错误:结构中的值类型与签名规范不匹配 名称:x 规范:int 实际值:布尔 -
变量%并非出现在or-pattern的所有分支中 SML/NJ支持或模式,其中单个规则可以有多个模式 与分隔开 | 符号。 这个 or-pattern的组件模式需要具有 具有相同类型的相同变量。 f(nil|x::_)=1; stdIn:1.5-2.18错误:变量x并非出现在or-pattern的所有分支中 下面是组件模式 无 和 x: :_ 、和变量 x个 没有 出现在第一个模式中。 -
在需要构造函数的位置找到变量:% 出现在 模式必须指定数据构造函数。 f(Int.+)=3; stdIn:1.5-2.12错误:在需要构造函数的位置找到变量:Int+ -
向量表达式类型失败 在形式的向量表达式中 #[ 经验1 , 实验2 ,…] , 所有的矢量元素表达式都必须是相同的类型。 #[1,正确]; stdIn:1.1-2.5错误:向量表达式类型失败[literal] fun f(x:int)=#[x,true]; stdIn:2.11-2.20错误:矢量表达式类型失败[典型值不匹配] -
矢量模式型故障 在形式为的向量模式中 #[ 第1部分 ,第2部分 , 所有矢量元素模式必须是相同的类型。 函数f(#[x:int,y:bool])=(x+1;非y); stdIn:1.1-2.35错误:矢量模式类型故障[典型值不匹配] -
其中defn应用于定义规范 SML/NJ不允许在签名中对结构进行多重定义 (一个通过定义规范,另一个通过 哪里 条款)。 结构A=结构端; 结构A:信号端 签名S= 信号发生器 结构X:sig end=A 结束 其中X=A; stdIn:27.1-31.12错误:defn应用于定义规范 -
其中类型定义的arity错误:% 由 其中类型 定义必须与类型规范中的arity一致 它适用于。 签名S= 信号发生器 键入'at 结束 其中类型t=int; stdIn:1.1-26.19错误:类型定义的arity错误:t -
其中类型定义应用于定义规范:% SML/NJ不允许在签名中定义多个类型 (一个通过定义规范,另一个通过 where类型 条款)。 签名S= 信号 类型t=int 结束 其中类型t=int; stdIn:1.1-22.19错误:类型defn应用于定义规范:t -
数据类型复制中不允许使用withtype 不能附加 带有type 条款至 数据类型复制声明或规范。 数据类型t=A; 数据类型t=A 数据类型s=数据类型t u=s列表类型; stdIn:37.1-38.20错误:数据类型复制中不允许使用withtype -
单词常量太大 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错误:字常量太大
警告消息
-
匹配非穷尽 子句中的模式不足,无法与所有 可能的输入。 如果标志 编译器。 控制。 MC.matchNonExhaustive错误 设置为 假 (默认设置), 编译器。 控制。 MC.match非穷尽警告 设置为true。 如果这两个标志都不为真,那么 编译器不会抱怨非穷尽匹配。 乐趣f 0=1 |f 1=1; stdIn:1.1-22.12警告:匹配非穷尽 0 => ... 1 => ... val f=fn:int->int -
匹配冗余 提供了一些早期模式所涵盖的模式。 如果编译器标志 编译器。 控制。 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, ) => ... _ => ..._ -
匹配冗余和非穷尽 提供了一些早期模式所涵盖的模式, 而模式集并没有涵盖所有可能的输入。 是否生成此消息及其严重性(错误或 警告),由编译器标志控制 编译器。 控制。 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 => ... -
具有相同优先级的混合左关联运算符和右关联运算符 如果一个中缀表达式像 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”:字符串 -
非通用类型变量 此警告针对的是顶级值声明 类型具有无法泛化的自由类型变量,因为 的 价值限制 . 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个 ).