2012-06-01 69 views
1

我開始使用Bison/YACC和Flex/Lex,但我無法編譯最簡單的解析器。編譯Bison/Flex文件時未定義的令牌

文件:Ruby.y

%{ 
#include <stdio.h> 
#include <stdlib.h> 
%} 

%start program 
%token NUMBER 

%% 

program : NUMBER; 

%% 

main(int argc, char* argv[]) { 
    yyparse(); 
} 

yyerror(char *s){ 
    printf("%s\n", s); 
} 

文件:Ruby.l

%{ 
#define "Ruby.tab.h" 
%} 
DIGIT [0-9] 
%% 
{DIGIT}+ { return(NUMBER);   } 
[ \t\n]+ 
.   { return(yytext[0]);  } 
%% 

我使用 「野牛-vd Ruby.y」 編譯Ruby.y,然後 「軟硬Ruby.l」然後嘗試使用GCC與「GCC -c Ruby.tab.c」和「GCC -c lex.yy.c」編譯整個東西,但是後者出現以下錯誤:

Ruby.l: 2:9:錯誤:宏名稱必須是標識符 Ruby.l:In f 'yylex': Ruby.l:6:10:錯誤:'NUMBER'未申報(首次在此函數中使用) Ruby.l:6:10:注意:每個未申報的標識符僅對每個樂趣報告一次 ction它出現在

我很無知,有什麼想法嗎?

謝謝。

回答

0

在Ruby.l文件這樣的:

%{ 
#define "Ruby.tab.h" 
%} 

應該是:

%{ 
#include "Ruby.tab.h" 
%} 
+0

上帝,我感到難以置信的愚蠢!不能相信我錯過了!我一直在閱讀樣本和手冊,我使用了一個定義而不是一個包含! *打頭陣*謝謝! –