我有一个相当简单的语言表示为 CFG。
S → A z
A → A y A
| A x A
| A w
| v
由于存在左递归,递归下降解析器不会削减它。但是,我还需要找到所有可能的解释:给定v x v y v z
,我需要我的解析器同时找到(v x (v y v)) z
和((v x v) y v) z
。
我有什么选择?添加回溯以查找所有可能性的 Shift-reduce 似乎很好,但我听说向 shift-reduce 解析器添加回溯可以使其时间复杂度呈指数级增长。这个 CFG 足够小,应该没关系,但我需要将它扩展到更大的语法(有数千个终端)。