簡體   English   中英

規格為長度/長度的集合{a,b}的無上下文語法?

[英]Context-free grammar for set {a,b} with specifications length/amt?

這是針對練習考試的問題,因此,請解釋答案,並提供思考類似問題的提示。 所以我有一個問題:

為一種語言接受上下文無關的語法,該語言接受字母{a,b}上的字符串,其中a的個數可被3整除或x的長度可被3整除,或兩者均可....其中x =輸入字符串。

我在如何開始這個問題上苦苦掙扎。

我了解一種接受字母{a,b}可以被3整除的字符串的語法可能是這樣的:

0 -> a1 | b1
1 -> a2 | b2 
2 -> a | b | a0 | b0

下面是我到目前為止的工作,試圖同時跟蹤x的總長度和x中a的數量,以了解a和b的任何組合:

0 -> a1 | b1
1 -> a2 | b3
2 -> a | a0 | b1
3 -> a | b | a2 | b4
4 -> a1 | b5
5 -> b | b1 | a2

以上顯然是錯誤的,但我需要一些幫助。 因此,應該傳遞的示例字符串:

ababab
abaa
abbabb

根據我的經驗和學歷,最好是:

遞歸建立語法

建立這種類型的語法(一定數量的終端)時,最好遞歸進行。 首先,您假設您的起始符號是您想要的字符串。 然后將其拆分為子字符串,每個子字符串仍符合您的規則,直到僅剩下終端為止。

您通過從頭開始構建字符串並嘗試計算您有多少個終端(這是上下文無關的語法無法做到的(它們可以,但僅對於有限的字符串))來加倍地解決該問題。

所以第一個規則是

S -> 3

哪里

S...starting symbol
3..."multiple of three"

“ 3的倍數”可以是3個a或3個長度的字符串。

3 -> A | L 

哪里

A...string with 3 a's 
L...string with length of 3

為了能夠構建任何長度的字符串,我們可以將符合相同“三規則”的任何字符串加在一起。

A -> AA
L -> LL

現在-長度為3的字符串很簡單。

L -> aM | bM
M -> aN | bN 
N -> a | b

3a字符串只是三個a的字符串,在三個a之間和周圍散布着任意數量的b。

A -> bA | aB  
B -> bB | aC
C -> bC | a | aD
D -> bD | b

3a字符串是從左到右構建的。 每個規則可以產生任意數量的b,直到將其用a覆蓋。 最終規則可以在右側產生任何數字b。

一切都在一起:

S -> 3

3 -> A | L 
L -> LL | aM | bM
M -> aN | bN 
N -> a | b
A -> AA | bA | aB  
B -> bB | aC
C -> bC | a | aD
D -> bD | b

備注

  1. 遞歸建立語法
  2. 從小單元構建語法

暫無
暫無

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

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