2012-03-12 3 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 숙제를 위해 "숙제"태그를 추가하는 것이 정상입니다.

[OPERATOR에 대한 편집은 여러 가지 유형이 있지만 괜찮습니다. (A,B)과 같은 튜플에 붙여 넣기 만하면 a * b으로 작성됩니다. 표현식의 순서에 관해서는, ARGUMENTS와 같은리스트를 사용하십시오.]

+0

고맙습니다. 그러나 나는 고맙습니다. 작동 (즉, 어떻게 연산자를 표현식으로 재귀 적으로 따라야 하는지를 알 수는 없습니다. S는 방금 SML을 배우기 시작했고 매우 까다 롭습니다.) – user1265230

+1

"sml 데이터 유형 "을 사용하면 매우 모범적이고 단순하며 일관성있는 예제를 찾을 수 있으며 재귀와 같은 것에 대해 걱정할 필요가 없습니다. 동일한 유형의 여러 값을 목록 (및 튜플에있는 여러 유형의 여러 값)에 고정하십시오. –