本节解释了使用新泽西州标准ML的一些基本要素编译器是一个交互式系统,您可以在其中输入声明和表达式,或者从源文件加载代码。这是使用编译器最容易访问的模式,但是对于任何非平凡规模的程序,我们建议汇编经理用于组织编译和加载过程。

警告
我们假设您正在Unix(包括macOS)下使用编译器终端应用程序)。在MS Windows或macOS下,行为会有所不同。

运行标准ML

类型sml公司从shell(命令行)。这将使您进入交互式系统或“REPL”(更换)。顶层提示为“-”,第二级提示(打印在换行符之后输入不完整时)为“=”。如果在意料之外的情况下收到第二个提示,请键入;返回通常会完成您的输入,或键入中断字符(通常,control-C)将取消当前输入并返回SML公司顶级。

如果命令表面活性剂不起作用,询问哪里sml公司已安装在您的计算机上,并且使用适当的完整路径名或重新定义Unix path环境变量以包含包含sml公司命令。

交互式输入

顶级口译员的输入(,声明和表达式)必须终止在系统对其求值之前,用分号后跟回车符。然后系统打印出一个表示评估效果的响应。表达式被视为名为的标准变量的隐式声明例如,

- ;                (*提示字符后跟用户输入*)
val值   =  : 整数   (*系统响应*)

这意味着最后一个顶级表达式的值可以使用变量引用.但请记住将被重新定义在计算下一个顶级表达式之后。顶级声明不重新定义.

中断编译或执行

键入中断字符(通常为control-C)应中断编译器让你回到顶级。有时你可能要打两次。

退出交互系统

在顶层键入control-D(EOF)将导致退出shell(或发送到父进程sml公司命令已运行)。也可以终止通过调用操作系统。进程退出(OS.Process.success).

从文件加载ML源文本

功能

 val值 使用: 一串 -> 单元

在顶层(即在顶层交互环境中)定义,并且调用,将其参数解释为相对于sml公司进程的当前目录并从该文件中加载文本,就像在交互系统中键入文本一样。这通常应该在顶层执行,但正在读取的文件也可以包含调用属于使用递归加载其他文件。这是一个不独立的使用被召唤在表达式或声明中,因为此类调用的效果没有明确定义。

要加载严重的多文件程序,应该使用编译管理器.

错误消息

编译器尝试从语法错误中恢复,以便它也可以生成同一编译过程中的语义(类型检查)错误。语法错误恢复是对于加载的源文件更准确使用或CM,而不是来自类型化声明直接进入交互系统-这是因为当文本一次输入一行。

编译文件时,错误消息包括行号和字符位置线内。例如:

- 如果 真的
= 然后 5 真的
= 其他的 6;
标准_输入:7.6-7.11 错误: 操作人员    功能
  操作人员: 整数
  在里面 表达:
    5 真的
-

这里是位置信息标准输入:7.6-7.11表示错误的表达式5真的占据输入的第7行的字符6到11标准_输入。简单来说句法错误这个位置信息通常是准确的,或者可能只有一个错误行。对于某些类型的错误,行号可能不是很有用,因为它们描述包含错误的可能较大的声明。如果错误发生在<code>加载的文件使用</code>,行号将引用文件中的行正在加载。

有许多不同形式的类型错误消息,可能需要一些在你熟练地解释它们之前,先练习一下。最常见的形式表示函数(或运算符)类型与其参数(或操作数)不匹配。A类通常包括冒犯性表达的表示,但这是表达式的内部抽象语法,可能与原始源代码。例如,表达式如果e1,则e2,否则e3代表内部作为案例布尔值上的表达式:情况e1为真⇒e2 |假⇒e3(电子3).

SML/NJ生成的所有错误消息都记录在SML/新泽西错误和警告消息第页。

编译器接口

大多数用户将通过使用命令或以下控制CM。但是,可以通过编译器。控制结构。

印刷

结构编译器。控制。打印包含可以控制或重定向编译器错误的几个有用的标志和函数,诊断和结果消息。除此之外,还有一个变量打印深度它控制打印大型结构化值的截止深度。

与操作系统交互

标准ML基础库包含许多结构,例如文本IO,二进制IO,操作系统为从内部执行其他程序等任务提供支持sml公司更改当前目录。这些都记录在smlfamily.org/Basis:[标准ML基础库]。