编译原理题目总结

NFA转换DFA

在这里插入图片描述
在这里插入图片描述

eg:将下图NFA M确定化。
在这里插入图片描述

生成DFA M的初态ε-Closure({0})={0,2,3}。重新命名生成的各个状态:{0,2,3}为0,{1}为1,{2,3}为2,{3}为3。由于{0,2,3}、{2,3}和{3}中均包含M中的终态3,因此0、2、3为M’的终态。
在这里插入图片描述

化简DFA

eg:化简DFA
在这里插入图片描述
根据终态和非终态划分为两个子集:Π1={A,B,F},Π2={C,D,E,G}。
对Π1,输入b,状态A、B经过b可到达终态,而F经过b不能到达终态。因此Π1划分为两个子集Π11={A,B}和Π12={F}。
对Π11,输入bb,A经过bb可到达终态,而B不能,所以A和B是可区别的两个状态。
故Π1划分为{A}、{B}、{F}三个子集。
对Π2,输入b,划分成两个子集Π21={C,E}和Π¬22={D,G}。
对Π21,输入a,划分成两个子集{C}和{E}。
故Π2划分成{C}、{E}、{D,G}。
最终状态集合划分成:{A}、{B}、{F}、{C}、{E}、{D,G}。
在这里插入图片描述

识别单词的DFA

  1. 识别标识符的DFA

在这里插入图片描述

  1. 无符号数
    在这里插入图片描述

在这里插入图片描述

  1. 无符号整数
    在这里插入图片描述
  2. 注释
    在这里插入图片描述
  3. 识别token
    在这里插入图片描述

词法分析阶段的错误处理

  1. 词法分析阶段可检测错误的类型
  • 单词拼写错误 例:int i = 0x3G; float j =1.05e;
  • 非法字符 例:~ @
  1. 词法错误检测
    如果当前状态与当前输入符号在转换表对应项中的信息为空,而当前状态又不是终止状态,则调用错误处理程序

  2. 错误处理
    查找已扫描字符串中最后一个对应于某终态的字符

  • 如果找到了,将该字符与其前面的字符识别成一个单词。
    然后将输入指针退回到该字符,扫描器重新回到初始状
    态,继续识别下一个单词
  • 如果没找到,则确定出错,采用错误恢复策略
  1. 错误恢复策略
    最简单的错误恢复策略:“恐慌模式 (panic mode)”恢复
    :从剩余的输入中不断删除字符,直到词法分析器能够在剩余输入的开头发现一个正确的字符为止

回溯的消除

提取左因子

若有A→αβ1|αβ2|…|αβ1|γ,其中γ不是以α开头的候选式,则A的产生式规则可替换为A→αA‘|γ,A’→β1|β2|…|βn。A’是一个新的非终结符号。
在这里插入图片描述
在这里插入图片描述

消除左递归

  1. 左递归缺点:容易产生死循环
  2. 消除直接左递归
    若某个文法中非终结符A的产生式规则是直接左递归规则:A→Aα|β,其中α,β∈(VN∪VT)。若β不以A打头,则将A的产生式规则改写为:A→βA’,A’→αA’|ε。A’是新增加的非中介符号。
    在这里插入图片描述
    在这里插入图片描述
    eg:设有文法G[Z]:
    E→E+T|E-T|T
    T→T
    F|T/F|F
    F→(E)|i
    消除非终结符E,T的直接左递归后,文法G[Z’]改写为:
    E→TE’
    E’→+TE’|-TE’|ε
    T→FT’
    T’→*FT’|/FT’|ε
    F→(E)|i

消除间接左递归

1)对文法G的非终结符号按任一种顺序排列成A1,A2,…,An。
2)依次对各非终结符号对应的产生式进行左递归的消除:
for(j=1;j<=n;j++)
for(k=1;k<=j-1;k++){
i)把每个形如Aj→Akα的规则改写为Aj→δ1α|δ2α|…|δmα。其中Ak→δ1|δ2|…|δm是关于当前Ak的产生式规则;
ii)消除关于产生式规则Aj的直接左递归;
}
3)进一步化简消除左递归之后的新文法,删去多余的产生式规则。

eg:

设有文法G[S]:
S→Sa|Tbc|Td
T→Se|gh
将非终结符号排成顺序为S,T
消除产生式S左递归:
S→(Tbc|Td)S1
S1→aS1|ε
对T→Se|gh,将S代入展开得:
T→T(bc|d)S1e|gh
消除产生式T左递归:
T→ghT1
T1→(bc|d)S1eT1|ε

在这里插入图片描述

第三章

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

用状态转换图识别字符串

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

relop的状态转换图的概要实现

在这里插入图片描述

作业3

在这里插入图片描述

前缀、后缀、真前缀、子串和子序列

在这里插入图片描述

语言上的运算

在这里插入图片描述

正则表达式与语言

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

P53

第五章

判断LL文法,需要判断相同左部的产生式的SELECT集是否都不相交

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VengaZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值