c - 我如何禁用 Lex 中的最大咀嚼规则?

标签 c regex compiler-construction lex

假设我想处理某些模式并在输出文件中使用其他文本(VHDL 代码)。

为此,我需要在最后编写一个主规则作为

(MY_PATTERN){
// do something with my pattern
}

(.*){
return TOK_VHDL_CODE;

}

此策略的问题是 MY_PATTERN 在这种情况下无用,并且会根据最大 munch 规则与 .* 匹配。

那么我怎样才能获得这个功能呢?

最佳答案

最简单的方法是在最后去掉默认规则中的*,只使用

.    { append_to_buffer(*yytext); }

因此您的默认规则会获取所有与先前规则不匹配的内容,并将其填充到缓冲区中,以供其他人处理。

关于c - 我如何禁用 Lex 中的最大咀嚼规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27704747/

相关文章:

将 ASCII 码转换为字符值

javascript - 正则表达式在 IE 8、9 和 10 中根本不起作用

c - XCode 4.3 - 从 XCode 4.2 升级后,perl 找不到 C 编译器

c - 纯 C : Dialogue default handling of Ctrl+C messages

c++ - C 到 C++ 转换器

c++ - 如何在 C/C++ 中对字符串应用掩码?

python - 从列表中的列表中删除空值

regex - 使用正则表达式从 ps 输出中 grep 部分文本

java - 在mac终端上编译并运行java程序

.net - 为什么构造的委托(delegate)类的调用方法是虚拟的?