[英]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.