- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有以下内容:
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/
这是 .lex 文件的片段: /* Empty line just with the newline character signs end of the title block
Lex 包含一个函数 yymore(),它将下一个识别的输入表达式连接到当前输入字符串。 JLex 实现了 Java 版 Lex(据我所知,它与 jflex 不是同一个包),在其 documentat
假设我有以下内容: pattern {/* 在这里过滤/处理然后调用 */yymore(); 我想做的是在调用 yymore() 之前过滤/处理 yytext 中的一些内容。 yytext 的长度永远
我是一名优秀的程序员,十分优秀!