2013-05-08 91 views
1

我想爲簡單的計算器做解析器,但我不能理解我得到錯誤的簡單輸入。 Flex的文件看起來像這樣野牛,簡單的計算器程序

%{ 
#include "exp.tab.h" 
#include <string.h> 
%} 

blanks   [ \t\n]+ 


%% 

{blanks}  { /* ignore */ } 
[0-9]+   {yylval= strtol(yytext, NULL, 10); 
return(NUMB);} 

%% 

野牛文件看起來像這樣:

%{ 
#include <stdio.h> 
%} 


%token NUMB 


%left '+' 


%% 

exp: 
NUMB    { $$ = $1;   } 
| exp '+' exp  { $$ = $1 + $3;  } 

%% 
int yyerror(char *s) { 
printf("yyerror : %s\n",s); 
} 

int main(void) { 
yyparse(); 
} 

對於輸入

123 + 12 

我得到錯誤message.Why會出現這種情況?

+0

標記時請注意。 Flex用於Adobe/Apache框架。 Gnu-flex用於詞法分析器。 – JeffryHouser 2013-05-08 19:12:35

+1

@ Reboog711,'flex-lexer',其實...... – Charles 2013-05-08 21:46:11

+0

@Charles謝謝;我不知道。我剛剛修改了「Flex Tag Wiki」以提及flex-lexer標籤:http://stackoverflow.com/tags/flex/info – JeffryHouser 2013-05-08 22:50:21

回答

0

您的詞法分析器缺少匹配/返回'+'令牌的規則。試試在結尾處增加:

. { return *yytext; } /* any other single character returns as itself */ 

默認的詞法分析器行動,如果文本不匹配任何規則是打印出來並跳過它。所以他們從解析器中得到的錯誤是因爲它將123 12作爲輸入,這會導致語法錯誤。