繁体   English   中英

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

[英]Using first-set in recursive descent parser

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

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

我读到有关“第一套”的文章,该套书将前瞻性令牌/字符与可能出现的终端(在生产中排在第一位)进行了比较。 目前,我一直坚持在递归下降解析器中使用第一个集合,因为我只有一个函数,没有别的东西,每个规则或其他可以识别规则/生产的对象都没有对象。

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

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

可以在这里停止,您在标记语句和表达式语句之间存在冲突。 您需要转换语法以消除左侧歧义(通过临时语法节点包含公共部分,因此在分支时,您可以仅使用前瞻性来确定要转到哪个分支)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM