资讯详情

编译原理笔记

编译原理

非终结符和终结符

非终结符是大写字母,其余为终结符,除非终结符,如小写字母。

first集

first集是看产生式左侧,右边只看第一个终结符(小写字母)。如果第一个是大写字母,第二个是小写字母,只看第一个,那就去大写字母找。 · 就是看右边第一个是不是终结符,直接写出来,不是去它的非终结符的产生式。

eg:G(E) E->TE’ E’-> E|ε T->FT’ T’->T|ε F->PF’ F’->*F’|ε P->(E)|a|b|∧

first(E)={(,a,b,∧} first(E’)={ ,ε} first(T)={(,a,b,∧} first(T’)={(,a,b,∧,ε} first(F)={(,a,b,∧} first(F’)={*,ε} first(P )={(,a,b,∧}

follow集

follow集是看产生式右侧,比如求follow(E)就是在产生式右侧找E在哪里 eg:follow集 比如求follow(A) 1.看开始符,加# 2.follow后面是小写字母,直接写小写字母 3.看右边A后面有没有东西,也就是非终结符,有的话不可->空,即ε,把first加入(东西)follow(A)中间,扣除空集;为空寻找;follow(左边) 4.看右边A后面什么都没有,follow(左)加入follow(A)

eg1:G(E) E->TE’ E’-> E|ε T->FT’ T’->T|ε F->PF’ F’->*F’|ε P->(E)|a|b|∧

follow(E)={),#} follow(E’)={),#} follow(T)={ ,),#} follow(T’)={ ,#,)} 将follow(T)加入follow(T’)中 follow(F)={(,a,b,∧, ,#,)} 将first(T’)加入follow(F)中 follow(F’)={(,a,b,∧, ,#,)} 将follow(F)和follow(F’)加入follow(F’)中 follow(P )={ *,(,a,b,∧, ,#,)}

eg2: 在这里插入图片描述

eg3:

构造DFA

1.A → α.aβ(可移动项):如果当前剩余输入为终结符 a ,则移进 a 2.B → β. (可规约项):按生式 B → β 进行规约 扫描.有非终结符后,在项目中复制相应的符号 如果产生.之后就没了,结构就结束了。SLR(1)分析表需要相应的要求follow集

LL(1)文法

1.消除左递归 2.消除回溯

把first集和follow集写出来 此题A’->ε则需要求follow集,即follow(A相反,如果推出不是空的,直接写first集

SLR(1)文法

移进时填入ACTION表中 遇到规定就去找是第一个推导,然后填。GOTO表中

概念

词法分析器的输入是(符号串) 用于识别(单词)的词法分析器

1.编译程序,解释程序的区别:是否生成目标代码(前者有,后者没有) 2.编译程序的五个主要阶段:词法分析、语法许可、语义分析和中间代码生成、代码优化、目标代码生成 3.克林闭包比正闭包多了一个空串 4.由终结符组成的字符串称为句子 5.句型可以包含非终结符,句子不能包含非终结符

短语

1.二义性 不同的语法树有二义性 文法的规定不一定是唯一的 2.直接短语(简单短语):语法树找两层子树,叶结点从左到右依次连接 3.句柄:最左边的直接短语 4.短语:语法树找到任何子树,从左到右依次得到短语

文法的分类

PSG 0型文法(短语结构文法) CSG 1型文法(上下文相关文法) CFG 2型文法(上下文与文法无关) BC 3型文法(正则文法)

属性

1.文法符号X携带的语义信息称为X的语义属性,简称属性 2.综合属性:节点的属性值是通过分析树中节点或其子节点的属性值值 3.继承属性:节点的属性值由节点、节点的兄弟节点或父节点的属性值计算 4.固有属性:通过词法分析直接获得的属性

标签: psg3m磁感应传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台