#define
yacc/bison でマクロを実装するにはどうすればよいですか?
すべての定義文字は通常の変数と一致する必要があると考えていました。変数は次のように定義されて[a-zA-Z_][a-zA-Z0-9_]*
いるので、変数が定義されているかどうかを確認するためにそこにチェックを入れることができると思います。次に、テキストを本来あるべきものに置き換えます。
どうやってやるの?現時点では、BAD という単語#define BAD
を C で定義したかのように完全に無視したいと考えています。以下はその lex ルールのコードですが、間違っています。また、lex は「BA」がストリームにあることに文句を言います。以下は完全に間違っていて非論理的であることを知っているので、どのようにBADを無視し、次にそれをfloatのようなものに置き換えるにはどうすればよいですか
if(strcmp(yytext, "BAD")==0) {
int i, l = strlen(yytext);
for(i=0; i<l; i++) { REJECT }
return;
}
return VAR; }
主な手順は、1) 定義を定義する、2) ソースでそれを検出する、3) lex にマクロ文字を忘れさせる、4) 新しい正しい文字を挿入する、ということを知っています。