【理论】编译原理导论

1.编译过程概述 : 
词法分析 : 对源程序的字符流进行扫描和分解,识别出一个个单词符号
语法分析 : 将单词序列分解成各类语法短语(这种语法单位可以表示成语法树)
语义分析 : 对源程序进行类型审查,为代码生成收集信息;
中间代码生成 : 把源程序变成内部表示(三地址指令的四元式 : 运算符,运算对象1,运算对象2,结果),设计原则 : 容易生成,容易翻译成目标代码
代码优化 : 对中间代码进行变换改造,使目标代码省时省空间;
目标代码生成 : 把中间代码转换成具体机器的绝对指令;


2.四种文法类型(存在等价文法,语言和文法是一对多的关系)
0型文法(短语文法) : 能力相当于图灵机,等价于'递归可枚举'
1型文法(上下文有关文法) : aAb->aBb只有A出现在ab的上下文中,B才可替换A
2型文法(上下文无关文法) : 用B替换A时,与A所在的上下文无关;
3型文法(正规文法) : 形如A->aB或A->a,其中A,B非终结,a终结符

3.式图转换
(1)正规式转NFA:
aa (X1) a-> (X2) a-> (X3)
a|b (X1)  a-> (X2)
 |b-> (X3)
(a)* (X1)->  (X2)  ->(X3)
   | a-> |
(2)NFA转DFA:
状态(equel) 跳转状态(move a) 跳转状态(move b)...
S S的等价move一个a所达到的等价状态集
...
(3)最简化DFA:
一致性(Vt,Vn)
蔓延性(看跳转集)

ps: DFA一个输入只跳一个状态,图中不存在空输入;
    正规式形如:aa(a|b)(a)*b
文法->句型->句子(Vt)->语言: 语言对于一个等价文法集

4.自顶向下语法分析
a.消除左递归
P->Pa|b : P->bQ , Q->aQ|#
b.消除回溯
P->Qa|Qb : P->Q(a|b)

First集: 左边->右边 取右边第一个终结符
直接取终结符
若首符非终结,继续深入
First集可以包含空字符

Follow集: 右边里紧跟其后的终结符
直接找后跟终结符
找后跟非终结符的First集
考虑后跟的非终结符取空
本身如果可取空,添加左邻Vt的Follow集
Select集:
Select(A->a) = First(a) | First(a)-# + Follow(A)

Ps:

LL(k)最左推导,只需看k个符号就可决定如何推导

 

附加:

算术表达式文法:

E->E+T|E-T|T

T->T*F|T%F|

F->i|(E)

消回溯后:

E->TE'

E'->+TE'|-TE'|#

T->FT'

T'->*FT'|/FT'|#

F->i|(E)

其中i代表变量或者数字;

改天有空附一个表达式的语法匹配,C++版;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值