lex - 无法识别的规则 - 使用正则表达式

时间:2015-02-04 19:24:02

标签: c regex parsing lex

我刚接触lex并且想尝试看看我是否可以尝试制作一个使用正则表达式在C文件中查找注释的文件。

%%

(/\*([^*]|[^]|(\*+([^*/]|[^])))*\*+/)|(//.*){   
    return 5;
}
.   ;

%%

int yywrap(void)
{
    return1;
}

所以这里的想法是,每次评论时,它都会“返回5”,否则,没有任何反应。

问题是,正则表达式未被识别,我遇到错误:

第3行:无法识别的规则 第3行:无法识别的规则 第3行:无法识别的规则 第3行:无法识别的规则 ...等

任何帮助将不胜感激,提前谢谢。

1 个答案:

答案 0 :(得分:1)

在(f)lex正则表达式中,与标准Posix正则表达式一样,您可以在字符类中包含] 作为类中的第一个字符。 (无论你是否使用正([...])或否定([^...])字符类,都是如此。)

所以第一个[^]启动一个字符类,然后由下一个]终止,下一个字符类未终止。我不清楚你期望[^]的意思,所以我无法提供其他建议。

此外,在操作之前需要一个空格,以便定义正则表达式的结尾。