2010-10-23 43 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