Flex と Bison / Lex と Yacc を使用して、c で複数文字の変数を実装する方法を知りたいと思っていました。もしそうなら、おそらく簡単な例を提供できますか?
言語のインタープリターを作成しようとしていますが、変数を実装する良い方法が見つからないようです。これまでに試した方法は失敗したか、多くの変数を持つプログラムの実行が本当につまり、1000 個の変数を代入するだけで他に何もしないプログラムを実行するには、数分かかる可能性があるということです)
お時間をありがとう、フランシス
Flex と Bison / Lex と Yacc を使用して、c で複数文字の変数を実装する方法を知りたいと思っていました。もしそうなら、おそらく簡単な例を提供できますか?
言語のインタープリターを作成しようとしていますが、変数を実装する良い方法が見つからないようです。これまでに試した方法は失敗したか、多くの変数を持つプログラムの実行が本当につまり、1000 個の変数を代入するだけで他に何もしないプログラムを実行するには、数分かかる可能性があるということです)
お時間をありがとう、フランシス
ADAIC が提供する Ada 用の字句解析器では、次の方法が使用されます。予約語や変数などの複数文字リテラルを字句解析するのに非常に便利です。これは (対応する Bison 文法やその他のものと共に) ADAIC docsで入手できます。
%%
[a-zA-Z](_?[a-zA-Z0-9])* return(lk_keyword(yytext));
%%
# define NUM_KEYWORDS 69
KEY_TABLE key_tab[NUM_KEYWORDS] =
{
{"ABORT", ABORT},
{"ABS", ABS},
....
....
....
};
lk_keyword(str)
char *str;
{
int min;
int max;
int guess, compare;
min = 0;
max = NUM_KEYWORDS-1;
guess = (min + max) / 2;
to_upper(str);
for (guess=(min+max)/2; min<=max; guess=(min+max)/2) {
if ((compare = strcmp(key_tab[guess].kw, str)) < 0) {
min = guess + 1;
} else if (compare > 0) {
max = guess - 1;
} else {
return key_tab[guess].kwv;
}
}
return identifier;
}