2012-03-12 20 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の場合、OPERATORで使用した方法(代替方法がある場合)とINTで行った方法(of ...がある場合)を組み合わせる必要があります。それ以外の言葉では、形式はA of B | C of D | ...になります。

また、INT of int - INTのために単純なint(すなわち整数)を使用することができます。そして、疑わしいMLにはBOOLのデータ型を定義する代わりに使用できるブール型があります言葉で言えば、どちらかのデータ型を定義する必要はありません。すでにその言語に存在するものだけを使用してください。

ps宿題に「宿題」タグを追加するのも通常です。

[OPERATORの編集では複数の型がありますが、それは(A,B)のようなタプルに貼り付けます。a * bです。式のシーケンスについては、ARGUMENTSのようにリストを使用してください。]

+0

ありがとう、私は苦労しています。操作(すなわち、私は操作を(表現者によって再帰的に続く)としてどのように記述することができないのですか:SはSMLを学び始めたばかりであり、かなり難しいと感じています。 – user1265230

+1

「sml (そして同じ種類の)複数の値をリスト(およびタプル内の異なる型の複数の値)に張り付けることができます。 –

関連する問題