首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >flex递归定义会导致flex扫描器向后推溢出。

flex递归定义会导致flex扫描器向后推溢出。
EN

Stack Overflow用户
提问于 2021-11-01 04:13:00
回答 1查看 76关注 0票数 0

我对flex非常陌生,我不知道如何处理递归定义。当我尝试这样做的时候:

代码语言:javascript
复制
C   A|BA|A{C}|BA{C}

它告诉我

代码语言:javascript
复制
flex scanner push-back overflow

我不知道为什么会这样。我认为它应该匹配all _,BABA,,_A等。不带{C}的端点BA和A已经定义好了。为了解决这个错误,重写定义的正确方法是什么?我现在很困惑。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-01 06:26:58

Flex定义是宏,仅此而已。与C预处理器不同,Flex不检测或抑制递归扩展,也没有条件,因此自引用宏不可避免地会溢出输入缓冲区。(Flex通过将替换字符串推回输入缓冲区来扩展宏。与lex不同的是,它用括号包围替换文本,以提供一点卫生功能。)

基本上,flex模式实际上是正则表达式(在数学意义上),只能与常规语言相匹配。这通常足以识别令牌,这是预期的用例。任何更复杂的事情都应该用解析器来处理。

在这种情况下,递归位于模式的末尾,您可以只使用一个重复操作符,例如(B?A)+

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69792551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档