2016-07-29 6 views
0

私はBison文法ファイルを700行長く伸ばしています。私はそれを分裂させようと努力しましたが、私の言語に複雑さを加えると、すべてのルールを管理し整理するのが難しくなります。私は#includeなどのバイソン相当物を何かする方法を探してみました。それで、少なくともテキスト的に分割して乾燥させることができました。メイクファイルのハックなどに頼らずに文法を小さなモジュールに分割する方法はありますか?Bison文法を小さな文法ファイルに分割する

答えて

2

Bisonには、Cの#includeと同様の機能がありません。

バイソンレシピにプリプロセッサステップを追加することは、メイクファイルのハックではなく、makeの予想されるユースケースです。

cppをbisonファイルに使用するのはちょっと難しいですが、プロローグに#defineというディレクティブを使用する傾向があるためですが、他のプリプロセッサもあります。簡単な場合は、catを使用してください。

+0

私は、私のインタラクティブなコンパイルのフィードバックをvimで動作させたいと考えていましたが、それは行きます。 'cat'それはそうです。ありがとう! –

0

代わりの分割アップ文法そのものを、あなたはルール体が関数を呼び出すことによってワンライナーのほとんどの配列にそれを凝縮することができます

foo : ID bar '{' whatever_list '}' { $$ = ast_node_foo($1, $2, $4); } 
    ; 

構文指向変換方式レストの詳細これらの機能では、モジュールに分割することができます。

0

btyaccは、複数のファイルから

%include bar.y /* inserts the contents of bar.y at this point */ 

を読むために%includeをサポートしているyaccの変異体であるbtyaccは、POSIXのYACCのすべてをサポートしていますが、それだけでしかし、バイソン拡張子のカップルをサポートしています。

+0

興味深い。 btyaccとbisonの違いについて書かれていますか?私は基本的にすべてのディストリビューションのためのパッケージを持っているものに固執したいと思います。 '%include'のサポートが私を船に乗せるのに十分であるとは確信していません。 –

関連する問題