2012-12-21 49 views
0

允許在JFlex輸入文件的詞彙規則中使用關鍵字和正則表達式的關鍵是什麼?JFlex正則表達式與詞法規則中的關鍵字

看來

retrieve { action code} 

...和

"retrieve" { action code } 

...二者匹配包含「檢索」時,第一個是一個正則表達式和第二個是一個關鍵字的輸入。我的意思是所有關鍵字都應該能夠以正則表達式的形式進行解釋,所以看起來好像是多餘的。

+0

lex/flex/jflex中沒有關鍵字。一切都通過正則表達式完成。 – EJP

回答

1

我不太清楚你的意思是「關鍵字」。根據the "Lexical rules" section of the JFlex User's Manual您的示例都使用使用正則表達式。

這是真的,在正則表達式retrieve"retrieve"是等價的,但是這只是因爲"..."符號的唯一效果是禁用的正則表達式元字符,並且沒有在retrieve的字符是正則表達式元字符開始。 (順便說一下,你也可以換隻部分在引號正則表達式的;因此,例如,retrieve也相當於r"et"ri"ev"e

引號是更加有用的,如果(說)的一個您的語言中的關鍵字是+++***+++,在這種情況下,您可以編寫以下任一項:

\+\+\+\*\*\*\+\+\+ { action code } 
"+++***+++" { action code } 
+0

啊哈...然後我誤解了一些東西..正在使用「....」來轉義元字符一般用於正則表達式或僅在這種特定情況下使用?我認爲「不被認爲是正則表達式中具有特殊含義的字符,因此會與實際匹配」。 (所以「檢索」將只匹配「檢索」,而不是作爲正則表達式檢索,因此我得出這樣的結論,它不是一個正則表達式) –

+0

@快速反射:「正則表達式」不是一個單一的單一概念;正則表達式引擎之間有很多不同之處。所以說'''在正則表達式中並不特別有點像'floobet'在編程語言中不是保留字:通常是真實的,但不一定是絕對的(但是可以肯定,我從未見過*以這種方式使用'「'的任何*其他正則表達式語言。) – ruakh

+0

明白了!非常感謝! –