簡體   English   中英

給定語言的上下文無關語法和 pda

[英]Context free grammar and pda for given language

我有一種上下文無關的語言,我必須為其創建一個上下文無關的語法以及確定性或非確定性的下推自動機。 我嘗試了不同的生產規則並使用 jflap 模擬它們,但不幸的是不成功。

任何類型的指導方針都值得贊賞。

L = { s1@s2@s3@…@sk | k > 1
       ∧ si ∈ {0,1}*
       ∧ ∃i,j i≠j ∧ si=sjR
     }

L 中的字符串示例有:{01@10, 110@11111@011, ...}

正式的定義有點難以解析,但這是我從中得到的:

  • 這種語言的形式是 s1@s2@s3...@sk
  • 每個 si 都是一個 0 和 1 的字符串
  • 至少有一對 si, sj 使得 si = sj^R

假設這是語言,我們的策略將是首先執行第 3 個條件,然后執行第 1 個條件,然后執行第 2 個條件。 為了強制執行第 3 個,我們將要求輸入至少一對彼此相反的字符串:

S -> 0S0 | 1S1

這給了我們 wSw^R 形式的字符串。 現在,我們希望能夠在前面、中間或后面添加其他字符串,全部用@分隔:

S -> 0S0 | 1S1
S -> T@S | S@T | @T@ | @

最后,我們需要讓 T 生成 0 和 1 的字符串:

S -> 0S0 | 1S1
S -> T@S | S@T | @T@ | @
T -> 0T | 1T | e

要生成語言中的任何字符串:

  1. 首先使用第一行的產生式生成一對所需的反向字符串。
  2. 使用第二行的第一個產生式將任何其他字符串添加到左側。
  3. 使用第二行的第二個產生式將任何其他字符串添加到右側。
  4. 使用第二行的第三個和第四個產生式將任何其他字符串添加到中間。
  5. 使用第三行的產生式填寫其他字符串。

這種語言的 PDA 可以執行以下操作:

  1. 循環讀取 (0+1)*@
  2. 不確定地跳轉到 state ,您假設您已找到第 3 個條件所需的第一個字符串
  3. 跳躍時,將字符串壓入堆棧
  4. 再次循環讀取 (0+1)*@
  5. 不確定地跳轉到 state ,您假設您已找到第三個條件所需的第二個字符串
  6. 跳轉時,將字符串從堆棧中彈出以驗證
  7. 再次循環讀取 (0+1)*@

你在這里做了兩個不確定的猜測:首先,你猜測將有反轉的字符串。 其次,你猜你找到了它。 如果這兩個猜測都是正確的(並且它們將適用於語言中的任何字符串,至少對於一對 k(k+1)/2 猜測)然后 NPDA 接受。

暫無
暫無

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

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