Код парсера 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.term, который определен в Syntax.ml и Syntax.mll, но я хочу указать тип 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 в термин с кодом выше. Я создаю хеш-таблицу и другие вещи для нее, но этот раздел меня смущает...
----------------------/РЕДАКТИРОВАТЬ------------------------
TNX;)
1 ответ
Решение
У вас нет термина, который может представлять значение 0.0. Может быть, вы должны использовать TmZero
?