我希望匹配类似:
var i=1;
所以我想知道var
是否已从字边界开始。
当它与此行匹配时,我想知道前一个yytext的最后一个字符。 只是为了确保var之前的char真的是一个非变量字符(在regex中也称为“\ b”)
在每条规则中维护old_yytext
并使用默认规则“。”的一种粗略方法。
如何获得?
答案 0 :(得分:0)
唯一的方法是保存前一个标记的副本,或至少保存最后一个标记。 Flex的缓冲区管理策略不保证先前的令牌仍然存在于内存中。当前令牌可能在flex的缓冲区开始处开始。
但是在每条规则中保存前一个标记的工作真的很傻。您应该相信flex可以像宣传的那样工作,并编写适当的规则。例如,如果您的标识符模式如下所示:
[[:alpha:]][[:alnum:]]*
那么var
不可能立即跟随一个标识符,因为它会被包含在idebtifier中。
“正常”弹性扫描仪定义中有一种常见情况,其中关键字或标识符可能紧跟字母数字字符,即关键字紧跟数字(123var
)之后。这通常不是问题,因为在几乎所有语言中,它都会触发语法错误(如果它不是语法错误,也许就可以了:-))
如果您确实想要触发词法错误,可以添加一个识别数字后跟字母的模式。