2013-01-06 222 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類型不匹配,但我想指定類型爲0.0的Syntax.term來證明它。我可以做嗎??

--------------------編輯------------------:

術語類型:

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與上面的代碼項。我爲它創建了hashtable和其他東西,但是這部分讓我迷惑......

---------------------- /編輯---- --------------------

tnx;)

+0

爲了得到一個很好的答案,你需要顯示'Syntax.term'的類型。我希望有一個代表浮動值的構造函數。你會用它來構造你的結果。值「0.0」本身是「float」類型。這不是你可以改變的。 –

+0

我的詞條類型:類型 term = TmTrue | TmFalse |學期*學期*期末學期 | TmAnd術語*術語 |期限*期限TmOr | TmXor術語*術語 | TmSum的術語*術語 | TmSub的術語*術語 | T term * term | TmPow術語*術語 | TmZero | TmSucc的術語 | TmPred的術語 | TmIsZero術語 | TmNot of term 我只想打印「沒有這樣的變量...」,0.0是我的類型與單位不同的額外元素... 所以第75行可能會改變,如果你說.. tnx您的幫助:) – Vandermond

+0

請更新您的問題以包含該信息。 – didierc

回答

3

您沒有可以表示值0.0的術語。也許你應該使用TmZero

+0

謝謝'傑弗裏',我們測試它,這個錯誤是在你的幫助下解決的;) 我這麼認爲,但是我沒有測試這個解決方案 我在StackOverFlow中的第一次提問經驗非常好;) tnx again .. 。 – Vandermond