源程序中的错误可以分为词法/语法错误、语义错误两类。前者主要形式是命名不合虚悄雹法、关键字书写错误、语法结构有问题(比如缺分号、该配对的东西不配对)等;后者则可分为静态/动态两种,静态例如类型使用错误、参数使用错误等,动态语义错误则是无穷递归这类逻辑性的问题。
例如:
紧急恢复:x = a+b+d// 丢运芹弃掉 b 后的记号,直到遇到 +
短语级恢复: x = a+b// 加入分号
在写程序时,要养成减少错误的好习惯:每次用变量、参数时,要在使用之前进行初始化,并在差帆直接使用之前检查一下是否出现值为空等问题,防止出现不可预知的错误
LL分析法和LR分析法。
1、自上而下语法分析方法(LL分析法)
给定文法G和源程序串r。从G的开始符号S出发,通过反复使用产生式对句型中的非终结符进行替换(推导),逐步推导出r 。 是一种产生的方法,面向目标的方法。分析的主旨为选择产生式的合适的侯选式进行推导,逐步使推导结果与r匹配。
2、自下而上语法分析方法(LR分析法)
从给定的输入串r开始,不断寻找子串与迹激罩文法G中某个产生式P的候选式进行匹配,并用P的左部代替(归约)之,逐步归约到开始符号S。是一种辨认的方法,基于目标的方法。分析的主旨为寻找合适的子串与P的侯选式进行匹配,直到归约到G的S为止 。
扩展资料
LALR分析器可以对上下无关文法进行语法分析。LALR即“Look-AheadLR”。其中,Look-Ahead为“向前看”,L代表对输入进行从左到右的检查,R代表反向构造出最右推导序列。
LALR分析器可以根据一种程序设计语言的正式语法的产生式而对一段文本程序输入进行语法分析,从而在语法层面上判断输入程序是姿闹否合法。
实际应用中的LALR分析器并不铅猛是由人手工写成的,而是由类似于yacc和GNU Bison之类的LALR语法分析器生成工具构成。由机器自动生成的代码相比较于程序员手工的代码,拥有更好的运行效率而且减少了程序员的工作量。
参考资料来源:百度百科-语法分析器
参考资料来源:百度百科-语法分析
词法分析阶段:读入源程序,对构成源程序的字符流进行扫描和分解,识别出单词,语法分析阶段:机器通过词法分析,将单词序列分物做解成不同的语法短语,确定整个输入串能够构成语法上正确的程序。
语义分析阶段:检查源程序上有没有语义错误,在代码生成阶段收集类型信息
中间代码生成阶段:在进行了上述的语法分析和语义分析阶段的工作之后,有的编译程序将源程序变成一种内部表示形式
代码优化:这一阶段的任务是对前一阶段产生的中间代码进行变换或进行改备渗造,目的是使生成的目标代码更为高效,即省时间和省空间
目标代仿蚂脊码生成:这一阶段的任务是把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)