2015-02-04 122 views
0

我是新来的使用lex,只是想试试看看我是否可以尝试使用正则表达式来定位C文件中的注释。lex - 无法识别的规则 - 使用正则表达式

%% 

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

%% 

int yywrap(void) 
{ 
    return1; 
} 

所以这里的想法将是每次一个注释所在,它将“返回5”,否则,什么都不会发生。

问题是,正则表达式是不被认可,我会见了错误:

线3:无法识别规则 线3:无法识别规则 线3:无法识别规则 线3:无法识别规则 ...等

任何帮助,将不胜感激,在此先感谢。

+0

太好了。 *实际发生了什么? –

+0

出现错误::3:无法识别的规则,又名正则表达式未被识别(编辑成主要问题--WOOP) – Shno

+1

您的规则应该通过空格与其动作分开。另外,我建议单独的规则来匹配两种评论。 –

回答

1

在(F)法的正则表达式,如在标准的Posix正则表达式,可以在字符类如在类中的第一字符包括]。 (这是真的,你是否使用正([...])或负([^...])字符类。)

所以第一[^]开始一个字符类,然后由下一个]终止,下一个是未终结。我不清楚你期望[^]是什么意思,所以我不能提供一个替代的建议。

另外,为了定义正则表达式的结尾,您需要在动作之前有一个空格。

+0

谢谢你花时间,(和约翰太)我发现[^]类很少被我使用,所以我只是在这种情况下删除它,我也意识到我需要逃避'/ '在正则表达式中以便读取它,因为我没有意识到这是lex中的实际操作,根据:http://www.csd.uwo.ca/~moreno//CS447/Lectures/Lexical。 html/node11.html,这两个更改很好地解决了我的问题 – Shno