簡體   English   中英

創建CFG的技術

[英]Techniques for creating CFG's

我必須創建一個CFG

{a^n (ab)^nc^md^le^k | n>0, k, l, m>=0, k<m, m=l+k}

第一部分很簡單,我想出了

S -> aS2abS3 S2 -> aS2ab | epsilon

但是,第二部分非常令人困惑。 到目前為止,我有

S3 -> S4 | epsilon

我的問題是如何跟蹤所有這些變量? K必須小於m,m必須等於l + k,並且l必須擴展為至少1。 有人可以給我一些使用這些CFG的一般提示嗎?

由內而外思考(因為這是CFG的工作方式),不要被無關的細節弄糊塗。

提示:CFG是下推自動機(PDA),這意味着它們具有堆棧。 PDA擅長對稱性,但不能反對稱。 因此他們可以做回文,但不能重復。 這就是堆棧的本質。

因此,您始終需要查找鏡像。 例如, a m b m是鏡像iamge的平凡形式,其中鏡子將a s變成b s。

這只是稍微復雜一點,但是如果您專注於尋找對稱性,就會發現它。

話雖如此,以下是解決方案:

由於m > l

cmdlek

可以重寫為:

cm-lcldlek

由於k = m - l ,因此與:

ckcldlek

從那里是微不足道的:

Sinner → cd | c Sinner d
Souter → Sinner | c Souter e

暫無
暫無

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

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