2010-02-05 51 views

回答

0

A似乎是一個BNF語法規則。我不確定你爲什麼會把這與正則表達式混淆起來。你有困惑是因爲它有一個*嗎?所有具有*的內容都不是正則表達式。

+0

讓我困惑的是我們在左邊和右邊都有A。 *在RegEx中絕對是一個符號,因爲它告訴你A重複了0次或更多次。 – user397232 2010-02-05 04:33:18

+1

「有*的所有東西都不是正則表達式。」不,有些東西具有正則表達式。我認爲你的意思並不是所有在其中都有\ *的東西都是正則表達式。 – Anonymous 2010-02-05 04:35:41

8

不,這個問題實際上並不涉及正則表達式。上下文無關語法指定不能用正則表達式描述的語言。

這裏,A是非終端;也就是說,這是一個必須由生產規則擴展的標誌。鑑於您只有一條規則,它也是您的開始符號 - 此語法中的任何生產必須以A開頭。

生產規則是

(1) A -> aA*b | 
(2)   empty_string 

ab是終端符號 - 他們是在語言的字母,且不能擴展。當你在左邊沒有更多的非終結者時,你就完成了。

因此,該語言指定的是類似平衡圓括號的字,除了ab而不是()

例如,您可能會產生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製作的單詞。

2

正則表達式生成正則語言,可以使用狀態機進行分析。

BNF語法是上下文無關文法,其產生上下文無關語言,並且可以用推解析下自動機(堆機)

上下文無關文法所能做的一切常規語法可以和更多。

相關問題