2012-03-12 184 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