2013-01-06 3 views
2

내 코드 :OCaml의 파서 코드

Term : 
... 
| VAR { try Hashtbl.find var_table $1 
     with Not_found -> 
     printf "no such variable '%s'\n" $1; 0.0 } /*(Line:75)*/ 
... 

와 때 나는 내가 볼 ocamlc -c parser.ml에서, 실행되었다

Error: This expression has type float but an expression was expected of type 
     Syntax.term 

모두가 나에게이 문제를 증명하는 데 도움이 될 수 있습니다 ?? 75 행의 유형이 Syntax.ml 및 Syntax.mll에서 정의하는 Syntax.term 유형과 일치하지 않는다는 것을 알고 있지만이를 증명하기 위해 Syntax.term에 0.0 유형을 지정하려고합니다. 나는 그것을 할 수 있냐?

------------------ :

용어 유형 :

type term = 
    TmTrue 
    | TmFalse 
    | TmIf of term * term * term 
    | TmAnd of term * term 
    | TmOr of term * term 
    | TmXor of term * term 
    | TmSum of term * term 
    | TmSub of term * term 
    | TmMult of term * term 
    | TmPow of term * term 
    | TmZero 
    | TmSucc of term 
    | TmPred of term 
    | TmIsZero of term 
    | TmNot of term 

모든 것이 정확합니다. 여기서 코드에 과제를 추가하고 싶습니다. 위의 코드와 함께 VAR을 추가합니다. 나는 해시 테이블과 다른 것들을 만들지 만,이 섹션은 나를 혼란스럽게 만든다. ...

----------------------/EDIT ---- --------------------

TNX)

+0

좋은 답변을 얻으려면'Syntax.term'이 어떻게 보이는지 보여줘야합니다. 부동 소수점을 나타내는 생성자가있을 것으로 기대합니다. 당신은 결과를 구성하기 위해 이것을 사용할 것입니다. 값'0.0' 자체는'float' 타입입니다. 그건 당신이 바꿀 수있는 것이 아닙니다. –

+0

내 용어 유형 : 유형 term = TmTrue | TmFalse | 용어의 기간 * 용어 * 용어 | 용어의 기간 * 용어 | 용어의 기간 * 용어 | 용어의 TmXor 또는 용어 | 용어의 기간 * 용어 | 용어의 용어 * 용어 | 용어의 기간 * 용어 | 용어의 용어집 * 용어 | TmZero | 용어의 TmSucc | 용어의 TmPred | 용어의 TmIsZero | 용어 의 TmNot 나는 인쇄하지 싶다 "그런 변수를 ..."만 0.0 장치와 다른 내 타입에 추가 요소는 ... 당신이 말하는 경우 그래서 라인 (75)이있을 수 있습니다 변경 .. 당신의 도움에 대한 TNX :) – Vandermond

+0

질문을 업데이트하여 해당 정보를 포함하십시오. – didierc

답변

3

당신은 값 0.0을 대표 할 수있는 기간이 없습니다. 어쩌면 TmZero을 사용해야합니까?

+0

제프리, 우리는 그것을 테스트하고이 오류는 당신의 도움으로 해결된다.) 나는 그렇게 생각하지만이 해결책을 테스트하지 않았다. StackOverFlow에 대한 나의 첫 질문 경험은 매우 좋다;) tnx again .. . – Vandermond