如何在Flex解​​析器

时间:2015-10-08 13:20:53

标签: flex-lexer

我希望匹配类似:

var i=1;

所以我想知道var是否已从字边界开始。

当它与此行匹配时,我想知道前一个yytext的最后一个字符。 只是为了确保var之前的char真的是一个非变量字符(在regex中也称为“\ b”)

在每条规则中维护old_yytext并使用默认规则“。”的一种粗略方法。

如何获得?

1 个答案:

答案 0 :(得分:0)

唯一的方法是保存前一个标记的副本,或至少保存最后一个标记。 Flex的缓冲区管理策略不保证先前的令牌仍然存在于内存中。当前令牌可能在flex的缓冲区开始处开始。

但是在每条规则中保存前一个标记的工作真的很傻。您应该相信flex可以像宣传的那样工作,并编写适当的规则。例如,如果您的标识符模式如下所示:

[[:alpha:]][[:alnum:]]*

那么var不可能立即跟随一个标识符,因为它会被包含在idebtifier中。

“正常”弹性扫描仪定义中有一种常见情况,其中关键字或标识符可能紧跟字母数字字符,即关键字紧跟数字(123var)之后。这通常不是问题,因为在几乎所有语言中,它都会触发语法错误(如果它不是语法错误,也许就可以了:-))

如果您确实想要触发词法错误,可以添加一个识别数字后跟字母的模式。