2012-03-12 102 views
1

我有以下的语法,我需要翻译成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

对于ARGUMENTS,你可以使用一系列的EXPRESSION,所以像EXPRESSION列表可以很好地工作(圆括号需要被解析,但是你不需要将它们存储在你的类型中,因为它们总是那里)。

对于EXPRESSION,您需要将您在OPERATOR(您可以选择的地方)中使用的方法与您在INT中完成的方法(您有of ...)结合使用。换句话说,它的格式将是A of B | C of D | ...

也,你并不真的需要INT of int - 你可以只使用一个简单的int(即整数)对INT - 我怀疑ML有可能改用定义BOOL数据类型的布尔类型(在其他单词,你可能根本不需要为其中任何一个定义数据类型 - 只要使用语言中已经存在的内容即可)。

ps为家庭作业添加“家庭作业”标签也很正常。

[操作员,你有多种类型,但没关系编辑 - 只是坚持他们在一个元组,像(A,B)其类型写入a * b。对于表达式序列,请使用列表,如ARGUMENTS。]

+0

谢谢您的回答,但我正在努力|操作(也就是说,我不太清楚如何将OPERATION描述为(OPERATOR,然后递归地用EXPRESSION):S刚开始学习SML,我发现它非常棘手。 – user1265230 2012-03-13 00:02:30

+1

我增加了一些。如果你搜索“sml数据类型“可以找到一堆示例,它非常合乎逻辑,简单且一致,不用担心递归等问题;在列表中粘贴多个值(以及同一类型的多个值)(以及元组中的多个不同类型的值)。 – 2012-03-13 00:23:28