SML数据类型很难实现

时间:2012-03-12 22:23:03

标签: parsing grammar sml

我需要将以下语法转换为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;

但是,我正在努力处理数据类型ArgumentsExpression。任何帮助将不胜感激。

1 个答案:

答案 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。]