curs.l :
%{
#include <stdlib.h>
#include "tree.c"
#include "yycurs.h"
%}
L [a-zA-Z_]
D [0-9]
D4 [0-3]
IDENTIFIER ({L})({L}|{D})*
INT4 {D4}+'q'
INT {D}+
%%
{IDENTIFIER} {return VARIABLE;}
%%
int yywrap(void){
return 0;
}
curs.y:
%{
#include stdio.h
void yyerror(char*);
int yylex(void);
%}
%token VARIABLE INTEGER
%%
var: VARIABLE {printf($1);};
%%
void yyerror(char *s){
fprintf(stderr, "11\n");
fprintf(stderr, "%s\n", s);
}
int main(void){
yyparse();
return 0;
}
当我运行我编译的程序时,我有这样的结果:
./curs
ff //I introduced
//result
ff //I introduced
11 //result
syntax error //result
evgeniy@evgeniy-desktop:~/documents/compilers$
任何人都可以解释一下,为什么会出现“语法错误”? 提前谢谢。
答案 0 :(得分:1)
您的语法证明有效文件只包含一个VARIABLE。要拥有多个,您需要引入recursive rule。
%start vars
%%
var: VARIABLE {printf($1);};
vars: var
| vars var;
%%