1

Ocamlでmini-pascalのコンパイラを書いています。たとえば、コンパイラが次のコードを受け入れるようにしたいと思います。

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; }

ここにsib_parser.mlyがあります。私の質問は、globals実際には のリストである変数の宣言であるs_var. sib_parser.mly( terminated_bindingsbinding、など)の末尾のメンヒルの部分を改良する必要があると思いseparated_nonempty_listますが、方法がわかりません...

誰でも助けてもらえますか?どうもありがとうございました!

4

1 に答える 1

2

見た目から、バインディング ルールでidsは、変数名のリストである which にアクセスできるため、たとえば次のように記述できます。

binding:
  | ids = separated_nonempty_list(COMMA, IDENT) COLON INTEGER
      { List.map (fun id -> { s_var_name = id ; s_var_type = St_int}) ids }
  | ids = separated_nonempty_list(COMMA, IDENT) COLON BOOLEAN
      { List.map (fun id -> { s_var_name = id ; s_var_type = St_bool}) ids }

これにより、bindingルールは を返しますs_var list

于 2011-06-27T22:07:13.730 に答える