[英]Could these patterns be matched by regular expression or context free grammar?
这是编译器的练习。 我们被问到是否可以将以下模式与正则表达式或无上下文语法匹配:
注意,n可以是任何正整数。 (否则太简单了)
在文本中只能出现3个字符'abc'来解析。
我很困惑,因为据我所见,这些模式中没有一个可以通过正则表达式和上下文无关语法来描述。
关键问题是:你需要多少和什么样的记忆?
在问题1的情况下,你需要以某种方式保存数轨迹a
终端为你解析b
端子。 因为你知道你需要一对一,所以堆栈显然已经足够了(你可以将a
放在堆栈上并用每个b
弹出一个)。 由于下推自动机相当于表达能力的CFG,因此您可以为问题1创建CFG。
在问题2的情况下,PDA在问题1中使用的技术应该提示您可以用于问题2的技术.PDA可以构建输入的前半部分的堆栈,然后在其反向出现时将其弹出在。
在问题3的情况下,如果你使用的堆栈技术用于计数的数目a
端子和b
端子,这一切都很好,但什么发生在你的堆栈内存? 这够了吗? 不,你会需要存储号码的a
s ^别的地方,所以CFG无法表达这种语法。
这是针对问题2的一个简单CFG的尝试(它验证了一个空输入,但你会得到这个想法):
S -> a S a
S -> b S b
S -> c S c
S -> ɛ
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.