回答
A似乎是一個BNF語法規則。我不確定你爲什麼會把這與正則表達式混淆起來。你有困惑是因爲它有一個*嗎?所有具有*的內容都不是正則表達式。
讓我困惑的是我們在左邊和右邊都有A。 *在RegEx中絕對是一個符號,因爲它告訴你A重複了0次或更多次。 – user397232 2010-02-05 04:33:18
「有*的所有東西都不是正則表達式。」不,有些東西具有正則表達式。我認爲你的意思並不是所有在其中都有\ *的東西都是正則表達式。 – Anonymous 2010-02-05 04:35:41
不,這個問題實際上並不涉及正則表達式。上下文無關語法指定不能用正則表達式描述的語言。
這裏,A
是非終端;也就是說,這是一個必須由生產規則擴展的標誌。鑑於您只有一條規則,它也是您的開始符號 - 此語法中的任何生產必須以A
開頭。
生產規則是
(1) A -> aA*b |
(2) empty_string
a
和b
是終端符號 - 他們是在語言的字母,且不能擴展。當你在左邊沒有更多的非終結者時,你就完成了。
因此,該語言指定的是類似平衡圓括號的字,除了a
和b
而不是(
和)
。
例如,您可能會產生ab
如下:
A -> aA*b (using 1)
aAb -> ab (using 2)
同樣的,你可能會產生aabb
:
A -> aA*b (1)
aAb -> aaA*bb (1)
aaAbb -> aabb (2)
甚至aababb
:
A -> aA*b
aA*b -> aabA*b:
aaba*b -> aababA*b:
aababA*b: -> aababb
明白了嗎?明星符號可能有點令人困惑,因爲你已經在正則表達式中看到它,但實際上它在那裏做着同樣的事情。它被稱爲Kleene-closure,它代表了所有可以用0或更多A
s製作的單詞。
正則表達式生成正則語言,可以使用狀態機進行分析。
BNF語法是上下文無關文法,其產生上下文無關語言,並且可以用推解析下自動機(堆機)
上下文無關文法所能做的一切常規語法可以和更多。
- 1. 描述正則表達式的上下文無關文法?
- 2. 在這個文件路徑上使用正則表達式嗎?
- 3. 這是一個正常的Java正則表達式行爲嗎?
- 4. 是這個postgres正則表達式相當於這個表達式嗎?
- 5. 這個正則表達式允許「*」嗎?
- 6. 這兩個上下文無關語法規則是否相同?
- 7. 似乎無法得到這個正則表達式下來
- 8. 這些模式可以通過正則表達式或上下文無關語法來匹配嗎?
- 9. 這是一個正則表達式BUG嗎?
- 10. 算法從任何正則表達式生成上下文無關語法
- 11. 用於表示正則表達式的上下文無關語法
- 12. 正則表達式Java字上下文
- 13. 如何爲這個表達式寫一個正則表達式?
- 14. DIFF其中一個文件是正則表達式文件
- 15. 正則表達式,以確定是否一個文件是一個RAR文件
- 16. 正則表達式表達和下一個符號不是「(」
- 17. R:一切不是,這是一個正則表達式
- 18. OWASP正則表達式存儲庫:這是正確的正則表達式嗎?
- 19. 什麼是MySQL的SQL正則表達式這個表達式
- 20. 這個正則表達式是多字節安全的嗎?
- 21. PHP正則表達式這是獲得這個結果的最快方法嗎?
- 22. 這個正則表達式不正確
- 23. 你能推薦一個正則表達式來捕捉這段文字嗎?
- 24. 這個正則表達式是否是非法的「a(b |)c」?
- 25. 這個模式的正則表達式
- 26. 電子郵件正則表達式。這個正則表達式是否合適?
- 27. 我可以做一個像這樣的正則表達式嗎?
- 28. 這是C中的合法正則表達式模式嗎?
- 29. 這是一個有效的正則表達式模式?
- 30. 正則表達式只是一個SSN
@danben:只有人更感興趣的評級比解決方案。 – Anonymous 2010-02-05 05:49:09