gpt4 book ai didi

flex-lexer - 在调用 yymore() 之前修改/过滤 yytext

转载 作者:行者123 更新时间:2023-12-01 12:43:05 25 4
gpt4 key购买 nike

假设我有以下内容:

pattern {/* 在这里过滤/处理然后调用 */yymore();

我想做的是在调用 yymore() 之前过滤/处理 yytext 中的一些内容。 yytext 的长度永远不会增长,只有在处理过程中可能会变短。这需要能够缩短 yytext。作为起点,我试图看看是否有一种简单的方法,例如删除 yytext 的最后一个字符,但是做一些天真的事情,比如

yytext[yyleng-1] = '\0'; yyleng--;

不会工作。 yymore() 似乎在 NIL 字符之后附加了一些东西,这表明在 flex 生成的代码中有一些指针指向 yytext 的当前结尾。有没有一些惯用的方法可以做到这一点而不必编写一组更复杂的规则?

像 yyless 这样的东西会把东西放回输入流中,这不是我想要的。

最佳答案

您不能在 C 版本的“flex”中这样做,因为 yytext 直接指向输入缓冲区。它不是副本。如果你修改输入缓冲区,你会把事情搞砸的。 flex 非常小心地处理每个字符一次且仅一次,并且除了您提供给它的任何源之外,它不会自己做任何额外的缓冲。我相信它在执行 Action 时会暂时将 NUL 放入缓冲区,并在 Action 返回时再次将其取出,为此它必须有一个指向 NUL 所在位置的指针。

我会在适当的位置将该处理移动到语法中,您必须在此处获取 yytext. 的副本。

关于flex-lexer - 在调用 yymore() 之前修改/过滤 yytext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22521406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com