我需要将以下语法转换为SML数据类型:
Integer ranges over SML integer constants.
Boolean ::= 'true' | 'false'
Operator ::= 'ADD' | 'IF' | 'LESS_THAN'
Arguments ::= ( ',' Expression ) *
Expression ::= 'INT' '(' Integer ')'
| 'BOOL' '(' Boolean ')'
| 'OPERATION' '(' Operator ',' '[' Expression ( ',' Expression ) * ']' ')'
我管理了以下内容:
datatype BOOL = true | false;
datatype OPERATOR = ADD | IF | LESS_THAN;
datatype INT = INT of int;
但是,我正在努力处理数据类型Arguments
和Expression
。任何帮助将不胜感激。
答案 0 :(得分:1)
对于ARGUMENTS,您可以使用一系列EXPRESSION,因此像EXPRESSION列表一样可以正常工作(括号需要解析,但您不需要将它们存储在您的类型中,因为它们总是在那里)。
对于EXPRESSION,您需要将您在OPERATOR中使用的方法(您可以选择的方法)与您在INT中所使用的方法(您拥有of ...
)相结合。换句话说,它的形式为A of B | C of D | ...
。
另外,你真的不需要INT of int
- 你可以只使用一个简单的int
(即一个整数)用于INT - 我怀疑ML有一个布尔类型可以使用而不是定义BOOL的数据类型(换句话说,您可能根本不需要为其中任何一个定义数据类型 - 只需使用语言中已有的内容)。
ps为家庭作业添加“家庭作业”标签也是正常的。
[为OPERATOR编辑你有多种类型,但没关系 - 只需将它们粘贴在一个元组中,如(A,B)
,其类型为a * b
。对于表达式序列,请使用列表,例如ARGUMENTS。]