我在解决这种特殊语言的语法时遇到一些问题,希望您能提供帮助: 语言是: Σ= {x,y,z} A = {w | w∈Σ^ ∗∧| w | _x mod 2> = | w | _y mod 2}
因为这是如此困难,所以我首先尝试将所有属性放在一个语法中,所以| w | _x mod 2> = | w | _y mod 2和w∈Σ^ ∗,但是没有得到像cacbcacb这样的所有组合等等
我得到的是这样的:ccccc ... caa ... abcbbbcc,然后我用 ac-> ca等可更改组合并获得我想要的每个单词。
但是我们也可以做一些上下文无关的语法吗?
我的爱慕
S → G | U | c | cS | ɛ
G → AGB | ɛ | cG
A → ɛ | a | cA
B → ɛ | bb | cB
U → ab | DaUbE | cU
D → a
E → b
ab → ba
ba → ab
ac → ca
ca → ac
bc → cb
cb → bc
非常脚
答案 0 :(得分:0)
正如您所说,这种语言是常规语言,因此显然不需要上下文相关的语法。
构造正则表达式是乏味的,对于查找无上下文语法的任务不是特别有用。直接从状态机进行操作更容易,尤其是在这种情况下,因为只有四个状态。
将状态机转换为CFG几乎是微不足道的。每个状态都变成一个非终止状态,您可以从状态转换中读取结果。如果符号P
上的状态Q
过渡到状态a
,则CFG的生产为Q -> P a
。然后,起始符号将具有每个最终状态的单位产量。就是这样。