gpt4 book ai didi

java - 如何处理递归下降解析器中无法中断语法错误的问题

转载 作者:行者123 更新时间:2023-12-01 16:00:55 25 4
gpt4 key购买 nike

我目前正在上系统软件开发类(class)。我们正在为虚构机器的汇编语言编写两遍汇编程序。我们已经实现了标记生成器,以及抽象表示该程序所需的所有类 - 剩下的就是解析标记(除了在稍后阶段实现代码生成器之外)。这是我遇到的一个主要问题。我选择将其实现为递归下降解析器,因为这是我目前拥有的唯一技术经验......但我们不允许在语法错误时停止汇编。例如,如果用户给出了语法无效的加载字指令,我们将用 NOP 替换它。如果用户给出了不好的标签,我们就简单地忽略它。如果用户在一行中放置未知字符,我们将丢弃它们。

一方面,这听起来很容易 - 然而,实现这个会导致我打破(我理解的)递归下降解析器的重要规则之一。我的每个函数在调用另一个函数之前都会提取多个标记,因为我需要考虑所有可能的可修复语法错误。鉴于我无法停止汇编,并且我必须拥有有关当前上下文的足够信息才能智能地确定用户打算做什么,因此我必须在一个函数内处理很多事情。

这将程序从真正的递归下降解析器转变为半有限状态机。我觉得我做得很糟糕,但我不知道还能如何实现这一点。有人有什么建议/想法吗?

顺便说一句 - 我不允许使用 ANTLR 等工具或任何其他解析器生成器。

谢谢。

最佳答案

我的建议是不要尝试。糟糕的语法错误恢复是递归下降解析器所固有的。如果您不允许使用解析器生成器,那么体面的语法错误恢复可能超出了您的作业范围。 (与您的教练核实...)

关于java - 如何处理递归下降解析器中无法中断语法错误的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3947667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com