语法分析
本文主要介绍了编译原理中的语法分析,希望对您有所帮助
一. 完成的功能
输入:所给文法的源程序字符串
输出:success or error
例:测试案例
1
2
3
4
begin
x:=9;
x:=2*x+1/3
end #
二. 主体框架
主函数
递归下降分析
语句串分析
statement语句分析
expression表达式分析
term分析
factor分析
三. 重难点
了解递归下降程序的一般形式
当遇到终结符时 if(..==..) scaner();
当遇到非终结符时 调用该非终结符的函数
当遇到推 ε 时
if(当前符号不属于对应的follow集) error()
列出BNF表示法式子
(1)<程序>::=begin<语句串> end
(2)<语句串>::=<语句>{;<语句>}
(3)<语句>::=<赋值语句>
(4)<赋值语句>::=ID:=<表达式>
(5)<表达式>::=<项>{+<项>|-<项>}
(6)<项>::=<因子>{*<因子>|/<因子>}
(7)<因子>::=ID | NUM | {<表达式>}
如果分析的语法过于复杂则BNF表示的式子也会过多 导致编写困难
四. 收获
首先更加清晰的理解了语法分析的主要任务,它是在词法分析的基础上将单词组合起来,组成一些语句,其次是理解了递归下降分析法,它是一种自顶向下的分析,根据文法来构造递归函数,代码简单直观,易于编写,但是对文法要求必须是LL(1)文法,由于递归调用次数会较多,影响分析的效率。