2011-06-27 13 views
1

私はOcamlにミニパスカルのコンパイラを書いています。私は、例えば、次のコードを受け入れるように、私のコンパイラをしたいと思います:parser.mlyで変数の宣言を処理する方法は?

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のリストである変数の宣言をビルドするようにコンパイラに指示することができます。私は(など、terminated_bindingsbindingseparated_nonempty_listsib_parser.mlyの終わりに立石の一部を改良する必要があると思いますが、私は

は誰が助けることができるか...わからないのですか?どうもありがとうございました!その様子から、

答えて

2

、あなたの結合ルールでは、変数名のリストですidsへのアクセス権を持っているので、あなたは、例えば、書くことができます:

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ルールのリターンになるだろうa s_var list

+0

ありがとうございます。あなたが見てみたい場合は、今後、私は別の関連[スレッド](http://stackoverflow.com/questions/6518436/)を投稿しました... – SoftTimur

関連する問題