鉴于语言
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 是什么?你如何计算它?
答案 0 :(得分:0)
交叉点有点棘手。现在,你说你想要一个自动机 - 可以引用任何理论机器,包括图灵机或等效的双栈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。