我有两个确定性无上下文语法:
G1
和G2
G1=(N1,T,P1,S1)
和G2=(N2,T,P2,S2)
(请注意,两个语法共享同一组终端符号)
我需要使用G3
L(G3)=L(G1){L(G2)}*
我认为这里的关键点是常用的终端设备。但我不知道如何继续......
任何帮助?
答案 0 :(得分:1)
普通的终端设备并不是非常重要,但会让事情变得更容易。让我们假设N1和N2没有共同的符号,并且S
和X
不在任何一个集合中。然后是语法:
[N1+N2+{S,X}, T, P1+P2+{S->S1X, X->S2X, X->lambda}, S]
生成您想要的语言。
新规则从S1(S2)*生成一些字符串。从那以后,你显然可以从L(G1)生成一个单词,后跟L(G2)中的任意数量的单词。非终结字母的双重性保证了两个语法不会相互干扰派生的部分。