繁体   English   中英

这些模式可以通过正则表达式或上下文无关语法进行匹配吗?

[英]Could these patterns be matched by regular expression or context free grammar?

这是编译器的练习。 我们被问到是否可以将以下模式与正则表达式或无上下文语法匹配:

  1. n'a'后跟n'b',就像'aabb'
  2. 回文,像'abbccbba'
  3. n'a',然后n'b',然后n'c',就像'aabbcc'

注意,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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM