簡體   English   中英

這種無上下文的語法是正則表達式嗎?

[英]Is this context-free grammar a regular expression?

我的語法定義如下:

A -> aA*b | empty_string

A正則表達式? 我對如何解釋BNF語法感到困惑。

不,這個問題實際上與正則表達式無關。 無上下文語法指定了正則表達式無法描述的語言。

這里, 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所做的所有單詞。

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

BNF語法是Context Free Grammars,它可以生成無上下文語言,可以使用Push Down Automata(堆棧機器)進行解析

上下文免費語法可以做普通語法可以做的一切。

A似乎是BNF語法規則。 我不確定你為什么把它與正則表達式混淆了。 你有困惑因為它里面有*嗎? 所有帶*的東西都不是正則表達式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM