java - 在 ll(1) 中检查一种语法与另一种语法的算法

标签 java parsing computer-science context-free-grammar context-free-language

我需要一个算法来检查 G1 的语言是否是 G2 语言的子集。 (假设 G1 和 G2 是两个具有相同字母表的 LL(1) 语法,其产生规则为 A-->aB 或 A-->a 形式,并且“a”是非 epsilon。我有一个解析算法根据字符串检查语法,但不检查另一种语言。有没有人有解决方案。

最佳答案

你的语法看起来很规律。所以算法就是将语法转换为NFA。这是一个简单的 1-1 映射。然后通过子集构造将 NFA 转换为 DFA。称它们为A和B。分析它们很容易确定L(A)子集吗?磅)。例如,由于有众所周知的有效算法来确定 L(A) ==? L(B) 并构造一个接受 L(A) 交集 L(B) 的新机器 I(A,B),只需计算

( L(I(A,B)) ==? L(A) )  or  ( L(I(A,B)) ==? L(B) ) 

关于java - 在 ll(1) 中检查一种语法与另一种语法的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34383584/

相关文章:

performance - 为什么类型检查很昂贵?

algorithm - 如何找到子序列?

binary - 计算机如何将十进制转换为二进制整数

java - 如何在没有部署描述符的情况下在 Spring 中注册监听器

java - "Failed to instantiate WebApplicationInitializer class"如何解决

java - 如何通过代理从 ActiveMQ 发送消息

java - 当组合多个模式时,Matcher.group() 不会返回正确的值

javascript - `dd-M-yyyy` 格式的日期解析字符串

json - 从将Json字符串转换为Struct解析错误

Java:解析字符串以查找括号的内容