【发布时间】:2015-02-04 19:24:02
【问题描述】:
我是使用 lex 的新手,我只是想尝试看看我是否可以尝试制作一个文件,该文件可以使用正则表达式在 C 文件中定位 cmets。
%%
(/\*([^*]|[^]|(\*+([^*/]|[^])))*\*+/)|(//.*){
return 5;
}
. ;
%%
int yywrap(void)
{
return1;
}
所以这里的想法是,每次找到评论时,它都会“返回 5”,否则,什么也不会发生。
问题是,正则表达式没有被识别,我遇到了错误:
第 3 行:无法识别的规则 第 3 行:无法识别的规则 第 3 行:无法识别的规则 第 3 行:无法识别的规则 ...等
任何帮助将不胜感激,在此先感谢。
【问题讨论】:
-
太棒了。实际上会发生什么?
-
an error: :3 :unrecognized rule, aka 正则表达式未被识别(将其编辑为主要问题--woops)
-
您的规则应该用空格与其操作分开。另外,我建议使用单独的规则来匹配这两种 cmets。
-
请注意,模式片段
[^*]|[^]仅相当于[^*],片段[^*/]|[^]相当于[^*/]。 -
@JohnBollinger:不完全是。
[^]是一个未终止的字符类(不仅在 flex 中;在 posix 中也是如此。)