Код парсера 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?

Другие вопросы по тегам