2013-02-27 53 views
1

我在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不符合任何規則,我想打印出來,因爲它是。我怎樣才能做到這一點?

+0

例如,您可以添加一些分隔符(空格等),並將符號與這些分隔符一起匹配。 – niculare 2013-02-27 19:44:18

+1

我不相信你可以輕鬆做到這一點。我甚至不確定你是否正在考慮這個方法 - 這些定義表明你有兩個令牌2和a3應該是輸入2a3的輸出。你試圖解決什麼問題? – 2013-02-27 19:49:17

+0

您定義它的方式,它會在您輸入「2a3」時識別出一個數字。你是否試圖拒絕任何*序列的ID和數字? – 2013-02-27 20:01:00

回答

1

你可能會認爲,因爲它不與任何規則相匹配,它會自動打印出來

不,我不這樣認爲。如果我沒有記錯的話,如果輸入不符合任何規則,它會輸出一個錯誤,說明'flex jammed'。但在這種情況下,輸入符合您的規則,所以不會發生。如果它不匹配,請相應地更改您的規則。但我會離開它。 2然後是a3將不會是合法的語法,所以讓解析器處理它。

爲了避免卡紙消息並打印出不匹配,你需要添加一個最後的規則是這樣的:

。 {printf(「%s」,yytext); }。 //或任何你想要的

你還需要添加一個空白的規則。

相關問題