我的代碼: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;)
爲了得到一個很好的答案,你需要顯示'Syntax.term'的類型。我希望有一個代表浮動值的構造函數。你會用它來構造你的結果。值「0.0」本身是「float」類型。這不是你可以改變的。 –
我的詞條類型:類型 term = TmTrue | TmFalse |學期*學期*期末學期 | TmAnd術語*術語 |期限*期限TmOr | TmXor術語*術語 | TmSum的術語*術語 | TmSub的術語*術語 | T term * term | TmPow術語*術語 | TmZero | TmSucc的術語 | TmPred的術語 | TmIsZero術語 | TmNot of term 我只想打印「沒有這樣的變量...」,0.0是我的類型與單位不同的額外元素... 所以第75行可能會改變,如果你說.. tnx您的幫助:) – Vandermond
請更新您的問題以包含該信息。 – didierc