编译Bison / Flex文件时未定义的令牌

时间:2012-06-01 00:17:16

标签: bison yacc lex

我开始使用Bison / YACC和Flex / Lex,但我无法编译最简单的解析器。

文件: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]);        }
%%

我使用“Bison -vd Ruby.y”编译Ruby.y,然后使用“Flex Ruby.l”编译,然后尝试使用GCC编译整个内容,使用“GCC -c Ruby.tab.c”和“GCC - c lex.yy.c“但我对后者有以下错误:

Ruby.l:2:9:错误:宏名称必须是标识符 Ruby.l:在函数'yylex'中: Ruby.l:6:10:错误:'NUMBER'未声明(在此函数中首次使用) Ruby.l:6:10:注意:每个未声明的标识符仅为每个乐趣报告一次 它出现在

我无知,任何想法?

谢谢。

1 个答案:

答案 0 :(得分:0)

在Ruby.l文件中:

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

应该是:

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