Parsing 如何使解析器变得优雅,即使在编译错误上也能继续工作?

Parsing 如何使解析器变得优雅,即使在编译错误上也能继续工作?,parsing,compiler-construction,abstract-syntax-tree,Parsing,Compiler Construction,Abstract Syntax Tree,我只需要为自己构建一些不同计算机语言的解析器。我曾考虑过使用ANTLR,但我真正想要的是自己探索一下,因为我不喜欢生成代码的想法(是的,我知道) 问题是编译错误(缺少标识符、某个规则的错误标记等)是如何在ASTs中处理和表示的 我从编译器讲座中了解到,解析器通常会尝试丢弃标记或尝试查找下一个匹配的代码元素(例如缺少“;”,因此取下一个表达式的“;”) 但这在AST中是如何表达的呢。是否存在格式不正确的表达式对象/类型?我有点困惑 我不想仅仅拒绝某个输入,而是处理它。一个有趣的问题是。我对编译器中

我只需要为自己构建一些不同计算机语言的解析器。我曾考虑过使用ANTLR,但我真正想要的是自己探索一下,因为我不喜欢生成代码的想法(是的,我知道)

问题是编译错误(缺少标识符、某个规则的错误标记等)是如何在ASTs中处理和表示的

我从编译器讲座中了解到,解析器通常会尝试丢弃标记或尝试查找下一个匹配的代码元素(例如缺少“;”,因此取下一个表达式的“;”)

但这在AST中是如何表达的呢。是否存在格式不正确的表达式对象/类型?我有点困惑


我不想仅仅拒绝某个输入,而是处理它。

一个有趣的问题是。我对编译器中的解析器实现不是特别精通。你能举几个例子说明[特定的]编译器试图“继续”的情况吗?我认为,如果出现语法错误,一些C编译器可能会放弃函数,如果出现语法错误,可能会继续使用以下函数。本主题之前已经讨论过了这就是一个例子。