AST生成

AST生成プログラム、ちょっとやってみたんですが……

atom = Identifier;

type Module = Declarations;
type Declarations = Delclaration*;
type Declaration = AtomDef | TypeDef;
type AtomDef = Atoms;
type Atoms = Identifier*;
type TypeDef = Identifier, TypeDefRight;
type TypeDefRight = Scalor | List | Variant;
type Scalor = Identifier;
type List = Identfier;
type Variant = Identifier*;

大体こんな定義ファイルをユーザに書かせて、
そこからstruct群もしくはboost::tuple+boost::variantを生成しようかなと。
(これはその生成プログラムの文法の例です)

で、感想としては、どうでもいい(一度しか使わないような)リストとかチョイスとかに名前をつけなければいけないのがちょっとうっとおしいですね。これは文法の制限ではなく出力コードの制限なので、なんとかするにはcaperの方でEBNFに対応する必要があるかも。その場合、懸念となっている「リストのセマンティックアクションをどうするか」という問題が。動的メモリ確保なしじゃ無理だろうなあ。……とどんどん深入りが必要になってしまうのでした。

思考の道具としては十分簡潔なきがするし、これでいいか。