问题标签 [lalr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
78 浏览

bison - 有没有办法在保持 LALR(1) 的同时减少这种减少中的替代品数量?

我目前减少了野牛,这意味着将逗号分隔的列表与几个可选的不同规则相匹配:

如果不清楚,这意味着实现(在伪代码中):

这样做的方法是实施,例如:

然而,后一个公式不是 LALR(1),因为在 Bison 看到逗号的每一步,它必须决定是转移并寻找一个 *assignment_list* 还是减少一个空的 *optional_assignment_list* 并继续前进寻找* optional_varargs *。

我正在尝试寻找是否有更好的方法来表示这一点。我已经能够通过引入 *optional_varkwdargs* 来减少备选方案的数量,但这仍然留下了 9 个备选方案来减少,我猜这比 16 个要好:

任何想法,将不胜感激。

0 投票
0 回答
55 浏览

grammar - 分解 LALR 语法

可能重复:
Python/YACC:解决移位/减少冲突

我正在尝试使用 Ply 创建一个解析器,它实现了一个像 Yacc 这样的 LALR(1) 解析器。但是,我遇到了困难的减少/减少冲突。据我所知,我的语法没有歧义,相反,冲突源于 LALR(1) 解析器的有限前瞻。我猜A A是遇到问题的时候会出现问题,因为解析器需要知道是否有第三个token来决定是否归约t1。那么如何将其分解为只需要单个标记前瞻的语法呢?

这是 Ply 调试输出中的相关状态,尽管我不太了解它。

0 投票
1 回答
470 浏览

parsing - 方案 - LALR 解析器生成 - 来自字符串的输入

我们正在尝试生成(以诡计)从字符串而不是标准输入读取字符的解析器和词法分析器。

我们开始修改 http://code.google.com/p/lalr-scm/source/browse/trunk/calc.scm?r=52代码中包含的计算器示例

问题似乎在以下行:

我们尝试定义一个新的输入端口:

并且变量程序是这样定义的:

但它不起作用,它仍然等待标准输入字符。

该文档缺少详细信息,因此我们无法弄清楚如何解决这个问题。

谢谢

0 投票
3 回答
482 浏览

regex - 常规 vs LALR(1):什么更快

假设我们有两种定义相同语言的文法:常规文法和 LALR(1) 文法。

常规和 LALR(1) 算法都是 O(n),其中 n 是输入长度。

正则表达式通常是解析常规语言的首选。为什么?是否有正式的证据(或者可能很明显)证明它们更快?

0 投票
1 回答
109 浏览

bison - PCYACC 期望关键字等效

PCYACC 中是否有相当于 BISON 的期望声明的关键字:

0 投票
1 回答
455 浏览

grammar - LALR 语法模棱两可

我为布尔和算术表达式制作了一个语法。我想处理算术表达式,例如:

我已经完成了这项工作:我可以处理我想要的所有表达式。

我的问题是布尔表达式可能类似于:

所以在某些时候我的布尔规则必须引用我的算术表达式规则。我不能在布尔规则中使用括号 (),因为它会导致我的语法不明确。我明白为什么,但我无法找到解决这个问题的方法。

0 投票
1 回答
95 浏览

expression - Bison - 处理非 LALR(1) 语法

我正在使用 flex,bison 制作一个简单的计算器。

我开发了一种语法,其中包括两种类型的表达式——整数表达式和实数表达式。

语法与此类似:

这不是 LALR(1)。

例如,考虑字符串 INT '+' REAL。在“INT”处,前瞻为“+”,仅基于此,无法判断字符串是 intExp 还是 realExp。

我尝试重写语法以解决歧义,但没有任何结果。

我知道我可以在解析期间推迟进行计算,而是构建一个解析树。然后通过类型检查,问题可以解决。但是对于这样一个简单的问题来说,这似乎有点过分了。

有没有办法让野牛本身来处理这种歧义?或者可以用更好的方式重写语法吗?

0 投票
1 回答
269 浏览

parsing - 如何使用可选的非终端修复语法?

我为 LALR 解析器编写了语法,但我被困在可选的非终端。考虑例如 C++ 取消引用,当您可以编写时:

当然你可以写:

这是我的问题,取消引用非终结符确实是可选的,这对语法有很大的影响,现在解析器看到它适合任何地方(几乎),因为它可能是空的。

是否有一个常见的模式我应该如何重写语法来修复它?

如果您指出一些涉及“编写语法时的常见问题和模式”的书籍或其他资源,我也将不胜感激。

0 投票
2 回答
300 浏览

python - 解析隐含与显式时间运算符

我一直在使用 ply 编写一个 LALR 解析器,并且在尝试解析乘法时遇到了不一致。

由于完整的解析器链接长达数千行,我不会在此处包含它,但我创建了一个简单的演示:

PLY 没有报告移位/减少冲突或减少/减少冲突,但我得到以下不一致:

这对我来说似乎很奇怪,因为显式和隐式时间规则具有相同的优先级。但我认为这可能是因为 PLY 为“times”令牌分配了优先级,因此将其转移到堆栈上,以支持使用 p_plus 规则减少表达式。我怎样才能解决这个问题?

编辑:更简单的演示。

0 投票
2 回答
350 浏览

parsing - Bison 的这种转变/减少冲突从何而来?

我试图通过在 Jison(一个 javascript 解析器)中定义一种非常简单的语言来掌握解析的窍门。它接受与野牛相同/非常相似的语法。

这是我的语法:

我得到一个班次/减少冲突。Jison 的输出在这里: