0
Q
左递归语法识别
A
回答
2
有用于识别为空的非端,它运行在时间的线性在语法的大小的标准算法(见下文)。完成之后,您可以在所有非终端A
,B
上构建关系A potentially-starts-with B
。 (事实上,这是比较正常的,构建在所有的语法符号这种关系,因为它也用于构建FIRST
套,但在这种情况下,我们只需要投射到非终端)。
已经这样做了,留下-recursive非终端都A
这样A potentially-starts-with+ A
,其中potentially-starts-with+
是:
potentially-starts-with ∘ potentially-starts-with*
你可以使用任何传递闭包的算法来计算这种关系。
仅供参考,用于检测可为空的非终端。
- 删除所有无用的符号。
- 附加一个指向每个生产的指针,最初位于第一个位置。
- 将所有作品放入作品中。
- 虽然可能,发现生产,其执行以下操作之一适用:
- 如果生产的左手侧已被标记为&的ε-; - 壬终端,丢弃生产。
- 如果指针右侧的标记是终端,则放弃生产。
- 如果没有立即令牌指针(即,指针是在端部)标注生产的左手侧作为与小量的权利; - 壬终端并且丢弃的生产。
- 如果令牌立即向指针的右侧是已经标记为&小量非末端; - 壬终端,前进指针一个令牌的权利和生产返回到工作队列。
一旦它不再能够从工作队列,所有的ε-&选择生产; - 壬终端已被识别。
只是为了好玩,上述算法的一个微不足道的修改就可以用来做第1步我会离开它作为一个练习(这也是在龙书的练习)。作为练习还剩下的方法是确保上述算法在线性时间内执行。
相关问题
- 1. 解析左递归语法
- 2. 删除左递归语法
- 3. 左递归ANTLR语法
- 4. XTEXT处理左递归语法
- 5. ANTLR4 - 相互左递归语法
- 6. 消除语法的左递归
- 7. 语法中的左递归冲突
- 8. ANTLR4 C#语法和左递归
- 9. JavaScript(ECMA)语法 - 左递归问题
- 10. 消除此PEG.js语法的左递归
- 11. 删除左递归语法中的
- 12. 左分解非左递归语法使其成为LL(1)
- 13. 左分解的自动语法转换;和左递归移除
- 14. Antlr左递归
- 15. PEG递归语法
- 16. SAPI语法识别
- 17. 使用递归进行识别
- 18. 递归SQL查询来识别
- 19. 递归识别排序列表
- 20. 创建递归识别联合值
- 21. DCG和左递归
- 22. 左递归消除
- 23. 左分解因子和左递归之间的区别
- 24. 如何删除以下语法中的左递归?
- 25. 用ANTLR编码语法(相互左向递归)
- 26. 如何消除LL语法分析器的左递归
- 27. 左递归调用错误和语法翻译
- 28. 我的语法中的间接左递归?
- 29. 如何消除以下语法中的左递归?
- 30. 上下文无关语法是否可以左右递归?