【发布时间】:2016-02-25 16:30:50
【问题描述】:
背景
我正在使用 flex 为我正在实现的编程语言生成词法分析器。
我对标识符的这条规则有一些问题:
[a-zA-Z_][a-zA-Z_0-9]* {
printf("yytext is %s\n", yytext);
yylval.s = yytext;
return TOK_IDENTIFIER;
}
当我的解析器解析这样的表达式时,该规则会正常工作:
var0 = var1 + var2;
printf 语句将打印出以下内容:
yytext is 'var0'
yytext is 'var1'
yytext is 'var2'
这是应该的。
问题
但是当我的解析器解析这样的函数声明时:
func(array[10] type, arg2 wef, arg3 afe);
现在printf 语句将打印:
yytext is 'array['
yytext is 'arg2 wef'
yytext is 'arg3 afe'
问题是yytext 包含不匹配的字符。
问题
flex 为什么在yytext 中包含这些字符,我该如何解决这个问题?
【问题讨论】:
标签: regex string match flex-lexer lex