lr1相关内容

我如何看到LR(0)项目自动机中存在冲突?

关于 LR(0),我有些不了解.我想弄清楚什么时候语法不是 LR(0).据我了解,我构建了 LR(0)项目自动机.然后,我需要寻找冲突.但是我不完全理解 LR(0)项目自动机中的两个项目之间是否存在冲突.是否有可能清除有关此部分的内容?我何时知道 LR(0)项目自动机中有冲突?看看一个或两个示例会很有帮助(不是语法本身,而是两个有某种冲突的项目). 例如: S :: = T CT :: ..
发布时间:2021-04-23 20:02:08 其他开发

如何重写上下文无关的语法,使其成为LR(1)?

对于给定的上下文自由语法: S-> G $ G-> PG | P P-> id:R R-> ID R | epsilon 如何重写语法使其为LR(1)? 在解析输入“ id:.id”(其中“。”)时,当前语法具有移位/减少冲突。是解析器的输入指针。 此语法产生满足正则表达式(id:(id)*)+ 的语言 解决方案 很容易为同一语言生成LR(1) ..

如何将LR(1)解析转换为抽象语法树?

我已经编码了一个表驱动的LR(1)解析器,但是它工作得很好,但是在解析语法树/抽象语法树的阶段,我有些脱节。这是一个我非常热衷的项目,但是我真的在这里陷入了僵局。提前谢谢你的帮助。 编辑:同样,我的解析器仅使用一个2d数组和一个动作对象,该对象告诉它接下来要去哪里,或者它减少了哪里去以及弹出了多少项目。我注意到许多人使用访客模式。我不确定他们如何知道要制作哪种类型的节点。 这是上下文的 ..

带有epsilon生产的LR(1)解析表

我在使用包含epsilon生产的语法为LR(1)解析器构建项目集时遇到麻烦.例如,给定以下语法(其中eps代表epsilon) S -> a S U U -> b | eps State0为 S' -> .S, $ S -> .a S U, $ 从State0中移动"a"会得到以下状态,我们称其为State2 S -> a .S U, $ S -> .a S U, ..
发布时间:2020-05-25 01:15:10 其他开发

LR1解析器和Epsilon

我试图了解LR1解析器的工作原理,但是我想到了一个奇怪的问题:如果语法中包含Epsilons,该怎么办?例如:如果我有语法: S -> A A -> a A | B B -> a 很清楚如何开始: S -> .A A -> .a A A -> .B ...等等 但是我不知道怎么做这样的语法: S -> A A -> a A a | \epsilon 这样做正确 ..
发布时间:2020-05-25 00:36:51 其他开发

我在哪里可以找到一个_simple_,易于理解的实施LR(1)语法分析器发电机?

我在哪里可以找到一个简单的(尽可能多的,而不是简单!)实现的LR(1)语法分析器发电机? 我不是在寻找性能,只是生成LR(1)状态(项集)。结果 C ++,C#,Java的能力,和Python都会为我工作。 解决方案 我已经写了一个非常简单的C#和想在这里分享。 它基本上填充动作查找表,它告诉你转向哪个国家或哪个规则使用。减少结果 如果数字非负,那么它表示一个新的状态;如果是否 ..
发布时间:2016-10-03 21:19:23 C#/.NET