2013-04-12 31 views
-5

我想在flex中定義兩個令牌。第一個返回「tINTTYPE」,它在輸入中看到字符串「int」時返回,另一個返回「TINTTYPE」,當它在輸入中看到「int matrix」時返回。在flex中定義令牌「int matrix」

這是我的FLX文件的相關部分:

int {yylval.type_id.Type=1;return tINTTYPE;} 
int[ \t\n]+matrix {yylval.type_id.Type=2;return tINTMATRIXTYPE;} 
. return yytext[0]; 

的問題是,當輸入爲INT matrixm = 4;掃描器將其識別爲int matrix m = 4;並返回tINTMATRIXTYPE,但實際上,我們有一個名爲matrixm的整數類型,我希望它被識別爲this,即它返回tINTTYPE。我能做些什麼呢?

謝謝

回答

1
int      {yylval.type_id.Type=1;return tINTTYPE;} 
int[ \t\n]+matrix[ \t\n]+ {yylval.type_id.Type=2;return tINTMATRIXTYPE;} 
. return yytext[0]; 
+0

如果'INT matrix'後跟非空白的,非標識符字符(如')這將表現不好')。最好使用'int [\ t \ n] matrix/[^ A-Za-z0-9_]'這個模式,它會匹配任何'int matrix',只要它沒有後面跟着的東西以'matrix'開始的更長的標識符 –

+0

正確。但是因爲我們對他的語法一無所知,所以我保持原文的風格。 – Josh