问题标签 [glr]

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 回答
43 浏览

c - C Bison GLR 常量堆栈项

我开始用 Bison 编写一个简单的 LR(1) 解析器。在处理列表时,我使用了一个简单的向量实现,例如在解析表达式列表时:

这工作得很好。但随后语法发生了变化,我不得不使用 GLR 解析器。突然,编译器抱怨说$list是常量。我发现对于 GLR 解析器:

  1. 当解析器拆分操作被记录并且不执行时,直到:
    • 除了一个解析器外,其他人都死了
    • 两个解析器合并
  2. 永远不应该yyval在一个动作中进行修改(这是前瞻)。

问题:

  1. 当我永远不必合并时,我确定只执行导致最终解析的操作吗?
  2. 首先分配$list给局部变量是有效的修复,还是应该深度复制向量?
0 投票
1 回答
144 浏览

parsing - 是否有一种解析器生成器可以处理所有确定性上下文无关文法?

我需要一种为所有确定性上下文无关语法生成解析器的方法。

我知道每个确定性的上下文无关语法都可以被一些 LR(k) 解析器解析。问题是我需要为未知k的语法生成解析器。因此,要处理每个确定性上下文无关文法,k需要是无限的。

我也知道 GLR 解析器可以解析所有上下文无关的语法,无论是否确定。但我需要拒绝非确定性语法。我不确定 GLR 是否可以从输入语法中检测到该属性。

是否有一种解析器生成器可以处理所有确定性上下文无关文法,同时拒绝非确定性文法,而不需要k输入?(唯一的输入是语法本身)