返回

编译原理入门课,深度解析简单错误处理逻辑与负数解析

开发工具

如今,我们的解析器已能进行基本运算和括号解析,然而随着新功能加入,各类错误也会接踵而至。因此本章内容是为解析器添加一套错误处理逻辑,不感兴趣的朋友可直接跳过。

一、错误处理的意义

编译时,如果碰上非法的表达式,未预设错误处理模块,后果可能不堪设想。

二、错误处理方式

错误处理主要包括两步,第一,在编译时查找错误,第二,把错误信息传递给用户。前者又分为词汇分析错误检测和语法分析错误检测。前者通常使用正则表达式(Regular Expression)进行词法分析,查找与规则不符的单词,后者则用递归下降法(Recursive Descent Parsing)找到语法上不正确的语句。

三、负数解析

负数解析的原理是把负号视为一元运算符,在词法分析时将其识别出来,然后在语法分析时将其与操作数组合成一个新的符号。

四、总结

编译原理入门课的第三部分介绍了错误处理逻辑和负数解析。这部分内容对编译器的构建非常重要,它可以帮助编译器在遇到非法表达式时及时报错,并把错误信息传递给用户。负数解析也是编译器中的一项基本功能,它可以帮助编译器正确解析负数表达式。

五、示例代码

public class Parser {

    private Lexer lexer;

    public Parser(Lexer lexer) {
        this.lexer = lexer;
    }

    public void parse() {
        Token token = lexer.nextToken();
        while (token.type != TokenType.EOF) {
            // 语法分析代码
            token = lexer.nextToken();
        }
    }
}

六、扩展阅读