2015-02-04 120 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