2012-12-02 29 views
1

我需要在flex中查找除少數幾個詞以外的所有單詞(例如「car」,「bus」,「train」)。你有什麼想法如何做到這一點?如何找到除flex以外的所有單詞?

+1

您需要了解如何使用'negative lookahead',並創建一個負面lookahead **正則表達式**。 –

+0

我不明白你的意思是「找到除了幾個以外的所有單詞」。你能找到所有的單詞,然後忽略你不關心的幾個單詞嗎?如果您向我們展示您迄今爲止編寫的代碼會非常有幫助 - 它會給我們一些背景。 –

回答

0

這個問題一直沒有答案,是lex/flex新用戶啓動時遇到的一個標準問題。 SO的其他地方也沒有明確的答案。

問題是詢問你如何匹配所有不是保留字的標識符。這是幾乎所有編譯器都會出現的標準計算機語言功能。它只是沒有表達清楚的方式。在編譯器構造中,使用flex,我們必須找到除少數(例如「if」,「then」,「else」)以外的所有單詞(也稱爲標識符)。這是通過將詞彙模式放入規範中的順序來實現的。在Wikipedia page on Flex中的主要例子顯示了這一點很常見!

我們會做這種方式:

car return(CAR); 
bus return(BUS); 
train return(TRAIN); 
[a-z]+ return(WORD); 

但是,如果我們以不同的順序做了這一點,我們會得到一個錯誤:

[a-z]+ return(WORD); 
car return(CAR); 
bus return(BUS); 
train return(TRAIN); 

它會反對「汽車的匹配「,」公共汽車「和」火車「,因爲它們已經包含在WORD中。

這種情況在其他語言中也會出現。以例如「=」,「> =」,「>」,「==」,「++」,「+」,「+ =」等符號爲例。我們還必須小心我們定義他們的詞位的順序在flex中確保沒有錯誤。

相關問題