[英]Is this context-free grammar a regular expression?
我的語法定義如下:
A -> aA*b | empty_string
是A
正則表達式? 我對如何解釋BNF語法感到困惑。
不,這個問題實際上與正則表達式無關。 無上下文語法指定了正則表達式無法描述的語言。
這里, 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語法是Context Free Grammars,它可以生成無上下文語言,可以使用Push Down Automata(堆棧機器)進行解析
上下文免費語法可以做普通語法可以做的一切。
A似乎是BNF語法規則。 我不確定你為什么把它與正則表達式混淆了。 你有困惑因為它里面有*嗎? 所有帶*的東西都不是正則表達式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.