语法分析的理论知识---整理自龙书

本文介绍了语法分析的基本概念,包括通用、自顶向下和自底向上的分析方法,以及在处理语法错误时的策略。重点讨论了词法错误、语法错误、语义错误和逻辑错误的识别,并提及编译器如何处理过多错误导致的退出逻辑。最后,解释了最左推导、最右推导和二义性文法的概念,以及左递归的类型。
摘要由CSDN通过智能技术生成

通常来说,语法分析器会构造一棵语法分析树抽象(不一定显示构造)。

处理文法的语法分析器大体上有三类:通用,自顶向下,自低向上。

通用语法分析算法如CYK和Earley可以用于分析任何文法,但是效率较低,不能用于编译器产品。

顾名思义,自顶向下是从语法树的顶点开始像底部构造语法树,而自底向上则完全相反。

自顶向下比较简单,不过用来分析C语言之类的简单语言,在一些辅助手段的辅助下已经足够用,lcc也是采用自顶向下的递归下降算法。

在自顶向下和自底向上的语法分析模型中,其输入都是从左向右扫描,每次一个词素。

语法分析的首要任务是识别语法错误,这里的语法错误实际上包括以下4类:

1,词法错误,如关键字拼写错误,没有在字符串文本中正确加上引号。

2,语法错误,少掉一个}等。

3,语义错误,给一个未定义的变量赋值等,或者返回值与实际类型不匹配等。

4,逻辑错误,如==写成了=。

编译器要一次尽可能的多检查出错误,那么在已经检查出错误之后就需要排除已知错误带来的干扰,才能正确的继续识别。

当然有些错误如包含了没有的头文件之类的错误是无法恢复的,也即是我们常见的fatal error。

当然编译器一般也会有个编译错误上界,即使对于普通错误,如果达到了错误上界,也会推出。因为错误太多,可能导致语法分析器无法正常工作。

对于lcc,错误退出逻辑在error.c中

/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值