我在flex中定義了一些正則表達式和規則。現在我想編寫一個正則表達式,它執行以下操作:如果有一個輸入與我定義的任何規則不匹配,我只想簡單地輸出該輸入。你可能會認爲,因爲它不符合任何規則,它會自動打印出來,但事實並非如此。考慮我的例子中,我定義了以下的正則表達式:如何在Flex中說「除了所有這些規則」?
[a-zA-Z_]+[a-zA-Z0-9_]* printf("%d tIDENT (%s)\n",lineNum,yytext);
此規則定義了一個標識符,標識符可以以下劃線或字母開頭,而且是字母,數字和下劃線的組合。
[0-9]+ printf("%d tPOSINT (%s)\n",lineNum,yytext,yytext);
該規則認可正整數。
假設這些是我唯一的規則,輸入是2a3
。這不是一個標識符,也不是一個整數。但是我的輸出以2
爲整數,然後以a3
作爲標識符。但2a3
不符合任何規則,我想打印出來,因爲它是。我怎樣才能做到這一點?
例如,您可以添加一些分隔符(空格等),並將符號與這些分隔符一起匹配。 – niculare 2013-02-27 19:44:18
我不相信你可以輕鬆做到這一點。我甚至不確定你是否正在考慮這個方法 - 這些定義表明你有兩個令牌2和a3應該是輸入2a3的輸出。你試圖解決什麼問題? – 2013-02-27 19:49:17
您定義它的方式,它會在您輸入「2a3」時識別出一個數字。你是否試圖拒絕任何*序列的ID和數字? – 2013-02-27 20:01:00