微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

这种语言的上下文无关语法是什么:L= {a^n b^m c^p d^q / m+n=p+q where n,m,p,q >=0 }

如何解决这种语言的上下文无关语法是什么:L= {a^n b^m c^p d^q / m+n=p+q where n,m,p,q >=0 }

我试图找到
的上下文无关语法 L= {a^n b^m c^p d^q / m+n=p+q where n,m,p,q >=0 } 但我卡住了。 这是我到目前为止所做的:

S -> X S Y | epsilon
X -> a|b
Y -> c|d

但我发现它不遵守顺序,例如 bacd 被接受但它不应该:

X S Y -> XX S YY -> ba S cd -> bacd

解决方法

S -> aSd 将 A 和 d 放在两边。

S -> X | Y - X 产生更多的 A,Y 产生更多的 d

X -> aXc - A 比 d 多

Y -> bYd - d 比 a 多

X -> Z. - Z 添加 b 和 c

Y -> Z - Z 添加 b 和 c

Z -> bZc Z 添加 b 和 c

Z -> eps Z 终于消失了。

,

我们可以使用以下“技巧”来“强制”订单:

  S -> aSd |  X | Y
  X -> bXd | Z
  Y -> aYc | Z
  Z -> bZc | epsilon

基本上,我们只允许 S 派生 ad(完全派生词的“外部”部分)。然后,我们允许 S 派生出 XY,它们中的每一个都代表一个变化:我们开始写 b's 而不是 a' s 或开始使用 c's 而不是 d's(这是完全派生词的第二层),最后 Z 只允许 b' s 和 c's(这是完全派生词的最内层)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?