返回
编译原理入门课,深度解析简单错误处理逻辑与负数解析
开发工具
2023-11-02 22:44:56
如今,我们的解析器已能进行基本运算和括号解析,然而随着新功能加入,各类错误也会接踵而至。因此本章内容是为解析器添加一套错误处理逻辑,不感兴趣的朋友可直接跳过。
一、错误处理的意义
编译时,如果碰上非法的表达式,未预设错误处理模块,后果可能不堪设想。
二、错误处理方式
错误处理主要包括两步,第一,在编译时查找错误,第二,把错误信息传递给用户。前者又分为词汇分析错误检测和语法分析错误检测。前者通常使用正则表达式(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();
}
}
}
六、扩展阅读