簡體   English   中英

考慮以下BNF語法(BNF,遞歸和派生)

[英]Consider the following BNF grammar (BNF, Recursion, and Derivation)

請考慮以下BNF語法:

<S> ::= a <S> c <B> | <A> | b
<A> ::= c <A> | c
<B> ::= d | <A>

好的,然后給我各種字符串,其中一個是:

aabccd

如果字符串可以從BNF語法派生,那么我應該提供一個派生詞。

所以我從一個非終端開始(據我了解):

<S> ::= a <S> c <B> -> a a <S> c <B> c <B> -> a a b c <B> c <B> ->
a a b c <A> c <B> -> a a b c c c <B> ->  a b c c c d

這個對嗎? 因此,它不能導出? 因為我有三個C? 還是我做錯了。 對於BNF,總計為n00b。

編輯:好的,從更“免費”的角度來看。 將字符串中的非終結符<A>(即“ c <A>”)與被稱為“ c”的終結符/令牌轉換為簡單的“ c”是否合法/合法? 假設“ c A”是“ A”? 因此,允許我將它們轉換為簡單的“ c”。 然后,這將允許我獲取所請求的字符串:

<S> ::= a <S> c <B> -> a a <S> c <B> c <B> -> a a b c <B> c <B> ->
a a b c <A> c <B> -> a a b c c <B> ->  a a b c c d

有效?

編輯:我不知道如何使小於和大於符號出現,嘗試使用美元符號,但我想這在這里不起作用。

由於語法是無上下文的,因此您可以將其轉換為Chomsky范式(CNF)並應用CYK(Cooke-Young-Kasemi)算法檢查該單詞是否為L(G)的一部分,從而無需猜測確定性方法。

您的第一個推導是正確的,並且'aabccd'不會使用此語法進行解析。 您需要第三個'c'使其可解析-因此可以解析'aabcccd',而不是'aabccd'。

祝你好運。

暫無
暫無

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

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