2012-06-01 46 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

上帝,我感到难以置信的愚蠢!不能相信我错过了!我一直在阅读样本和手册,我使用了一个定义而不是一个包含! *打头阵*谢谢! –