【发布时间】:2023-03-24 23:23:02
【问题描述】:
我有一个语法,除了我不相信语法是 LL(1) 之外,我不知道我需要什么类型的解析器来解析它。我在想我需要一个带有回溯或某种 LL(*) 的解析器。我想出的语法(可能需要重写)是:
S: Rules
Rules: Rule | Rule Rules
Rule: id '=' Ids
Ids: id | Ids id
我尝试生成的语言如下所示:
abc = def g hi jk lm
xy = aaa bbb ccc ddd eee fff jjj kkk
foo = bar ha ha
零个或多个包含左标识符后跟等号后跟一个或多个标识符的规则。我认为编写解析器时会遇到问题的部分是语法允许规则中包含任意数量的 id,并且判断新规则何时开始的唯一方法是找到 id =,这需要回溯。
对于手写解析器,有谁知道这种语法的分类和最佳解析方法?
【问题讨论】:
-
最后一条规则不需要在 RHS 上的“Ids”之前或之后包含一个额外的“id”吗?