我如何构建这样的正式语法?

时间:2018-04-05 20:25:28

标签: theory formal-languages

我有两个确定性无上下文语法: G1G2

G1=(N1,T,P1,S1)G2=(N2,T,P2,S2)

(请注意,两个语法共享同一组终端符号)

我需要使用G3

构建语法L(G3)=L(G1){L(G2)}*

我认为这里的关键点是常用的终端设备。但我不知道如何继续......

任何帮助?

1 个答案:

答案 0 :(得分:1)

普通的终端设备并不是非常重要,但会让事情变得更容易。让我们假设N1和N2没有共同的符号,并且SX不在任何一个集合中。然后是语法:

[N1+N2+{S,X}, T, P1+P2+{S->S1X, X->S2X, X->lambda}, S]

生成您想要的语言。

新规则从S1(S2)*生成一些字符串。从那以后,你显然可以从L(G1)生成一个单词,后跟L(G2)中的任意数量的单词。非终结字母的双重性保证了两个语法不会相互干扰派生的部分。