2010-10-23 21 views
1
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; 
} 
当我运行我的编译progrum

功能的yyerror(),我有这样的结果:为什么卡列斯在样品PROGRAMM

./curs 

ff //I introduced 

    //result 

ff //I introduced 

11 //result 

syntax error //result 

[email protected]:~/documents/compilers$ 

任何人都可以解释我为什么似乎有“语法错误”? 在此先感谢。

回答

1

你的语法玷污了一个有效文件只包含一个VARIABLE。要有多一个,你需要引入一个recursive rule

%start vars 

%% 

var: VARIABLE {printf($1);}; 

vars: var 
    | vars var; 

%% 
+0

谢谢,我已经解决了这个问题。错误发生,因为我的程序没有处理像'\ n'这样的符号。谢谢您的回复。 – evgeniy44 2010-10-26 17:15:36