Compiler construction “定义令牌”;“整数矩阵”;灵活的

Compiler construction “定义令牌”;“整数矩阵”;灵活的,compiler-construction,bison,flex-lexer,Compiler Construction,Bison,Flex Lexer,我试图在flex中定义两个标记。第一个返回“tINTTYPE”,当它在输入中看到字符串“int”时返回,另一个返回“tINTTYPE”,当它在输入中看到“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]; 问题是,当输入是i

我试图在flex中定义两个标记。第一个返回“tINTTYPE”,当它在输入中看到字符串“int”时返回,另一个返回“tINTTYPE”,当它在输入中看到“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];
问题是,当输入是intmatrixm=4时扫描仪将其识别为int矩阵m=4并返回tINTMATRIXTYPE,但实际上,我们有一个名为matrixm的整数类型,我希望它被识别为这个类型,即它应该返回tINTTYPE。我能做些什么


谢谢

如果
int-matrix
后面跟有非空白、非标识符字符(例如
,这将是错误的。最好使用模式
int[\t\n]matrix/[^A-Za-z0-9\
,该模式将匹配任何
int matrix
,只要它后面不跟以
matrix
True开头的较长标识符。但是,由于我们对他的语法一无所知,所以我将它保持在他原来帖子的风格。
int                       {yylval.type_id.Type=1;return tINTTYPE;}
int[ \t\n]+matrix[ \t\n]+ {yylval.type_id.Type=2;return tINTMATRIXTYPE;} 
. return yytext[0];