我使用Flex寫一個詞法分析器我怎樣才能使它避免看上去 像這樣的評論:
/* COMMENTS */
我使用Flex寫一個詞法分析器我怎樣才能使它避免看上去 像這樣的評論:
/* COMMENTS */
它有點複雜。這裏是一個解決方案,我發現:
<INITIAL>{
"/*" BEGIN(IN_COMMENT);
}
<IN_COMMENT>{
"*/" BEGIN(INITIAL);
[^*\n]+ // eat comment in chunks
"*" // eat the lone star
\n yylineno++;
} { return COMMENT; }
的 「明顯」 的解決方案,這樣的事情:
"/*".*"*/" { return COMMENT; }
將匹配太多。
但是如果評論是這樣的/ * \ n * /「」。將匹配除「\ n」換行符之外的每個字符,以及{return COMMENT; }呢?它在哪裏返回?不能,我只是喜歡這個「/*".*"*/」; – flashdisk
Flex生成的掃描程序是貪婪的,並且會盡可能匹配,因此**「/ *」。*「* /」**將匹配所有**/* foo */fum */**,而不僅僅是**/* foo */** ** {return COMMENT; } **部分僅返回Flex生成的掃描器中的令牌代碼。在大多數情況下,你會想忽略註釋,然後你應該刪除返回語句。 –
如果flex scanner是貪婪的,就像你說的那樣,上面的「顯而易見的」解決方案是如此的錯誤,因爲這是一個例子:/ *評論*/do_my_thing(「oops * /」); – flashdisk
使用正則表達式? – ProfessionalAmateur
@ProfessionalAmateur:如果問題是關於「flex」,那麼提問者已經在使用正則表達式。 –