联盟和两种语言的交集

时间:2016-06-27 09:19:08

标签: union intersection automaton

鉴于语言

L 1 = {(i|l)p(f|g)n(f|h)m(f|i)r(l|m)p : n + m > r > 0, p >= 0}

L 2 = (f|g)*(h|i)+

为L 1 ∪L 2 制作自动机,并且(另一个为)L 1 ∩L 2

我知道L 1 是一个CFL,你需要一个PDA来解析它,我知道L 2 是一个RL,而DFA将被使用。
我的问题是:你如何建立交叉点(和联盟)?也就是说,你做自动机的实际语言L 3 = L 1 ∩L 2 是什么?你如何计算它?

1 个答案:

答案 0 :(得分:0)

联盟很简单 - 如果您有两种语言的PDA,可以通过引入一个新的初始状态,使用epsilon转换到您的语言的自动机的每个初始状态来接受联合的非确定性PDA。接受的语言将是任何一个(或两个)自动机都接受的语言。

交叉点有点棘手。现在,你说你想要一个自动机 - 可以引用任何理论机器,包括图灵机或等效的双栈PDA。如果您可以创建双栈PDA,那么您的任务很简单。使用笛卡尔积机构造用于构造A和B的DFA,给出A和B的DFA,并且具有形式的每个转变((a,b),w) - > (a',b')将符号(x,y)推到堆栈上iff(a,w) - > a'将x推到A的堆栈上并且(b,w) - > b'将y推到B的堆栈上

当然,如果您从RL开​​始使用DFA并执行上述构造,您只需要一个堆栈,生成的自动机就是PDA,而不是双栈PDA。