[英]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.