bison と C++ の森で彷徨う

bison で C++ を使うには

% bison -o hoge.cpp hoge.y

のように拡張子を cpp で出力すればよい。同時に .hpp なファイルも生成される。


あとはこのような感じで

typedef Object YYSTYPE;
#define YYSTYPE_IS_DECLARED 1

extern "C" int yylex(void);
extern "C" int yyerror(const char *);
extern "C" char* yytext;

で yylval の型を Object にしてやればよいかと思いきや。
あああ。これでは flex 側から値を int, char* として渡せないな。
.y なファイルで yytext を直接参照するのが正しいのかな?微妙?

ここをうまく乗り越えれば R6RS の数値表現の複雑さ周りでかなり楽をできるのだけどなあ。情報求む。