Где / как объявить уникальный ключ переменных в компиляторе, написанном на Ocaml?

Я пишу компилятор мини-паскаля на Ocaml. Я бы хотел, чтобы мой компилятор принял, например, следующий код:

program test;
var
   a,b : boolean;
   n : integer;
begin
   ...
end.

У меня проблемы с объявлением переменных (часть, следующая за var ). На данный момент тип переменных определен следующим образом в sib_syntax.ml :

type s_var =
    { s_var_name: string;
      s_var_type: s_type; 
      s_var_uniqueId: s_uniqueId (* key *) }

Где s_var_uniqueId (вместо s_var_name ) - уникальный ключ переменные. Мой первый вопрос: где и как я мог бы реализовать механизм генерации нового идентификатора (фактически, увеличивая самый большой идентификатор на 1) каждый раз, когда у меня появляется новая переменная. Мне интересно, следует ли мне реализовать его в sib_parser.mly , который, вероятно, включает статическую переменную cur_id и модификацию части привязки , опять же, не надо » Я не знаю, как их реализовать в .mly .Или реализовать механизм на следующем этапе - интерпретатор.ml ? но в этом случае вопрос в том, как сделать .mly совместимым с типом s_var , что s_var_uniqueId я должен предоставить в части привязка ?

Другой вопрос касается этой части утверждения в .mly :

id = IDENT COLONEQ e = expression
  { Sc_assign (Sle_var {s_var_name = id; s_var_type = St_void}, e) }

Здесь мне также нужно предоставить следующий уровень ( Interpreter.ml ) переменная, из которой мне известно только s_var_name , так что я могу сделать с ее s_var_type и s_var_uniqueId здесь? Может ли кто-нибудь помочь? Большое спасибо!

5
задан SoftTimur 29 June 2011 в 09:28
поделиться