我开始使用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:注意:每个未声明的标识符仅为每个乐趣报告一次 它出现在
中我无知,任何想法?
谢谢。
答案 0 :(得分:0)
在Ruby.l文件中:
%{
#define "Ruby.tab.h"
%}
应该是:
%{
#include "Ruby.tab.h"
%}