程序设计语言——编译原理 第四章总结

程序设计语言——编译原理   第四章总结

知识点

CHP4.1  语法分析器的功能

语法分析器任务:分析并判定程序的语法结构是否符合语法规则。

语法分析办法:自上而下分析法,自下而上分析法。

CHP4.2   自上而下面临的问题

1).自上而下的主旨:对任何输入串,试图用一切办法,从文法开始符号出发,自上而下地为输入串建一棵语法树/为输入串寻找一个最左推导

2).匹配过程:

①从文法的开始符号产生根结S,指示器IP指向输入串x的第一个字符,用S的语法规则发展语法树。

②用S的子结从左至右地匹配整个输入串。

若遇到非终结符,则扩展,由非终结符的候选式的终结符去匹配x,匹配成功则IP指向下一输入符号;不成功把发展的子树注销,把IP恢复。在试探非终结符的其他候选式。

若遇到终结符,直接匹配,匹配成功则IP指向下一输入符号;不成功则IP不变,看下一子结。

3).自上而下的问题:左递归(在扩展语法树时,发现是非终结符→非终结符,不停地扩展,还未匹配输入符号),回溯(工作量大),虚假匹配,定位出错位置,效率。

CHP4.3  LL(1)分析法

  • 左递归的消除

直接左递归的消除


间接左递归的消除(消除左递归的算)


最终结果:消除非终结符(无法到达的)

代价:大量引进新非终结符与空字产生式

  • 消除回溯 (思想 (自己理解课本)非终结符由若干候选式,让若干候选式互斥,即在匹配时只有一个可以匹配成功。让一个候选式代表非终结符,候选式匹配失败则非终结符匹配失败)

终结首符集    由非终结符经0步/若干步推导;右部的第一个终结符。

提取公共左因子(让非终结符的所有候选式两两不相交)

后继符号集 处理空字) 当非终结符A面临输入符号a,a不属于A的任意候选式的终结首符集,但A的某候选式的终结首符集含空字,当a属于后继符号集,允许A自动匹配。

LL(1)文法的条件  不含左递归;非终结符的各产生式的候选首符集两两不相交;包含空字的条件。

CHP4.5  预测分析程序(重点,重点)

预测分析表:是M[A,a]形式的矩阵,A为终结符,a为非终结符或“#”。矩阵中存放关于A的产生式,即当A面临输入符号a所采用的候选式。

  • 预测分析表的构造  

求FIRST集与FOLLOW集,根据FIRST集与FOLLOW集执行算法。


  • 执行程序

在栈底放入“#”(作为结束符),放入开始符号,栈顶符号X,输入符号a。

        ①X=a=#,分析成功

        ②X=a≠#,X从栈顶移出,a指向下一符号

        ③X∈Vn

           M[A,a]=X→UVW,X出栈,UVW入栈(最左推导)

           M[A,a]=X→error,出错处理

           M[A,a]=X→ε,a为X的后继符号,X出栈,不读入下一符号。

符号栈(课本上有)

习题



体会

语法分析就是运用一定的方法建立一棵语法树。预测分析表重要,包含了求First集与Follow集,将文法转为LL(1)文法,以为自己会,在做题就露馅,在求Follow集时,还是多有难处,但仔细复习回顾后,还是容易了许多,要多加理解。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值