2011-12-04 230 views
4

通用令牌我有一個文件,我的令牌聲明declarations.h:Flex和野牛

#define ID 257 
#define NUM 258 
... 

在我的Flex代碼我返回該值或標誌之一(如「+」,「 - ','*')。一切正常。

在野牛文件中的問題。 如果我寫這樣的東西: exp:ID'+'ID 我會得到錯誤,因爲野牛不知道任何關於ID。 添加一行%令牌ID也無濟於事,因爲在這種情況下,我必須編譯錯誤(預處理將257更改ID,我會得到257 = 257)

回答

7

你得到野牛創建憑證清單;你的詞法分析器使用Bison生成的列表。

bison -d grammar.y 
# Generates grammar.tab.c and grammar.tab.h 

你的詞法分析器然後使用grammar.tab.h

$ cat grammar.y 
%token ID 
%% 
program: /* Nothing */ 
    |  program ID 
    ; 
%% 
$ cat lexer.l 
%{ 
#include "grammar.tab.h" 
%} 
%% 
[a-zA-Z][A-Za-z_0-9]+ { return ID; } 
[ \t\n]     { /* Nothing */ } 
.      { return *yytext; } 
%% 
$ bison -d grammar.y 
$ flex lexer.l 
$ gcc -o testgrammar grammar.tab.c lex.yy.c -ly -lfl 
$ ./testgrammar 
id est 
quod erat demonstrandum 
$ 

野牛2.4.3在MacOS X 10.7.2生成令牌數爲enum,而不是一系列#define值 - 獲得令牌。名字到調試器的符號表中(一個非常好的主意!)。

+1

謝謝這幫了我 – kobra