0

我只是想知道你们中的任何人将如何使用 Flex 和 Bison / Lex 和 Yacc 在 c 中实现多字符变量?如果可以的话,你能提供一个简单的例子吗?

我正在尝试为一种语言编写解释器,但我似乎找不到实现变量的好方法,到目前为止,我尝试过的方法要么失败,要么导致执行任何具有大量变量的程序变得真的所以(我的意思是执行一个只分配 1000 个变量并且什么都不做的程序可能需要几分钟)

谢谢你的时间,弗朗西斯

4

1 回答 1

0

在 ADAIC 为 Ada 提供的词法分析器中,使用了以下方法,我发现它对于对多字符文字(例如保留字和变量)进行词法分析非常有用。它(以及相应的 Bison 语法和其他一些东西)可在ADAIC 文档中找到

%%
[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;
 }
于 2013-08-12T09:48:48.433 回答