2013-11-14 51 views
0

我使用Flex生成從聲明語句標記爲:在柔性掃描分離標識符從關鍵字

int a = 5; 

令牌是:這詞位爲INT

<int> <id,a> <=> <5> 

值得注意的是int和一個是詞法id的詞法。

來到法代碼:

%{ 
#define YYSTYPE char* 
#include "parser.tab.h" 
#include "stdlib.h" 

int lineno=1; 
%} 

white [ \t]+ 
letter [A-Za-z] 
digit [0-9] 
id {letter}({letter}|{digit})* 
number {digit}+ 
relop >=|<=|>|<|==|!= 


%% 

{white} { } 

{number} {yylval=strdup(yytext); return NUMBER;} 
{id} { yylval=strdup(yytext); return ID;} 
"+" return PLUS; 
"-" return MINUS; 
"*" return TIMES; 
"/" return DIVIDE; 
int return INT; 
float return FLOAT; 

問題是字符串int和浮子被匹配爲ID和令牌被返回作爲ID。因此存在語法錯誤。有什麼辦法可以解決這個問題嗎?

回答

1

首先放置int/float行,您列出它們的順序是匹配的順序。

規則字母(字母|數)*將匹配的多個字母中的任何一項序列,把浮在它上面和浮動將匹配它試圖字母之前(信|號)

通過首先我的意思是「在任何地方以上ID,仍在定義部分「