在递归下降解析器中使用第一集

Using first-set in recursive descent parser

本文关键字:第一集 递归      更新时间:2023-10-16

我在c++中为C编写递归下降解析器。我不知道在以下情况下如何选择正确的产品:

statement: labeled-statement | compound-statement | expression-statement | selection-statement | iteration-statement | jump-statement

我读到关于"first"-set的内容,它将预先标记/char与可能出现在结果中的第一个终端进行比较。目前我被困在使用递归下降解析器中的第一集,因为我只有一个函数,没有其他东西,没有每个规则的对象或任何其他我可以识别规则/产品的东西。

您的语法对于递归下降解析器无效,因为它在左侧是模糊的:

  • labeled-statement以标识符
  • 开头
  • compound-statement{开头(这是好的)
  • expression-statement以标识符或数字开头(或()

可以停在这里,你有标签语句和表达式语句之间的冲突。您需要转换您的语法以消除左侧的歧义(通过临时语法节点来包含公共部分,以便在进行分支时,您可以仅使用提前查找来确定要转到哪个分支)。