210 likes | 445 Views
《编译原理》期中复习. 第1-6章基本概念和基本方法 出题方法 (包括实验). 文法. 基本概念:字母表、符号串、集合的闭包、产生式、句型、句子、语言、文法类型、语法树、最左(最右)推导、短语、直接短语、句柄. 考试方法. 根据文法写出语言 根据语言写出文法 判断文法类型 根据推导过程画出语法树. 根据文法写出语言 判断文法类型. 例:文法 G: S → 0S1, S → 01 问:它的语言是什么?它属于 Chomsky 四种类型文法中的哪一种类型文法(写最贴切的一种)?. 答: L(G)={0 n 1 n |n ≥ 1} 属于2型文法(上下文无关文法).
E N D
《编译原理》期中复习 第1-6章基本概念和基本方法 出题方法 (包括实验)
文法 • 基本概念:字母表、符号串、集合的闭包、产生式、句型、句子、语言、文法类型、语法树、最左(最右)推导、短语、直接短语、句柄
考试方法 • 根据文法写出语言 • 根据语言写出文法 • 判断文法类型 • 根据推导过程画出语法树
根据文法写出语言判断文法类型 例:文法G:S→0S1, S→01 问:它的语言是什么?它属于Chomsky四种类型文法中的哪一种类型文法(写最贴切的一种)? 答:L(G)={0n1n|n≥1} 属于2型文法(上下文无关文法) 点击看答案
E E + E E * E i i i 根据推导过程画出语法树 • 例:文法G[E]: E → i E → E+E E → E*E E → (E) 推导:E E+E E*E+E i*E+E i*i+E i*i+i 根据该推导画出一棵推导树。 点击看答案
根据语言写出文法 • 已知语言为 {0n1n|n≥1},写出能生成该语言的一个上下文无关文法。 答:文法为: G[S]: S→0S1 S→01 点击看答案
正规式 • 基本概念:正规文法、正规式、正规集、确定的有穷自动机(DFA)、不确定的有穷自动机(NFA)、接受(识别)
考试方法 • 根据正规式写出语言 • 根据语言写出正规式 • 根据DFA的状态图判断字符串能否被接受 • 根据正规式完成状态图 • 根据状态图写出正规式
根据正规式写出语言 • 例. ={l,d},正规式r=l(l d) 定义的正规集是什么? 答:正规集是: 以l开头,后跟任意多个l和d,组成的串的集合。 (比较:{l,ll,ld,ldd,……} (标识符)) 点击看答案
根据语言写出正规式 • 写出标识符的正规式,其中设字母为l,数字为d,标识符长度不受限制。 答:正规式为 l(l d) 点击看答案
a a U a,b Q a b S V b b 根据DFA的状态图判断字符串能否被接受 • 例.字符串baab能否被下面的DFA接受 答:能被接受。 点击看答案
B A S Q 根据正规式完成状态图 • 根据正规式R= l(l d) 完成下列相应的状态图。 A处填( ),B处填( )。 l,d l 点击看答案
l,d l S Q 根据状态图写出正规式 例: 求正规式R 答:R= l(l d) 点击看答案
LL(1)文法 • LL(1)的含义(P.72) • 提供判断LL(1)文法有关的完整方法和各种定义,完成对一个文法进行的判断过程(P.73-78) • 提取左公共因子(P.78) • 消除简单的左递归(P.81) • 提供文法的SELECT集合,构造预测分析表,同时对某个符号串进行分析(P.89-90)
提取左公共因子 解答: 文法G1可化为:S→aS(b|ε)S→ε 进一步化为:S→aSA A→b A→ε S→ε • 例:文法G1[S] 为:S→aSbS→aSS→ε 消除文法中的左公共因子。 点击看答案
消除简单的左递归 • 文法G:S→SaS→b其中含有直接左递归,试消除之。 解答: 文法G可改为:S→bS'S'→aS'|ε 参考: L={ban|n≥0} 点击看答案
分析栈 #E #E'T #E'T'F #E'T'i #E'T' #E'T+ #E'T #E'T'F #E'T'i #E'T' #E'T'F* #E'T'F #E'T'i #E'T' #E' # 剩余串 i+i*i# i+i*i# i+i*i# i+i*i# +i*i# +i*i# +i*i# i*i# i*i# *i# *i# i# i# # # # 产生式 E→TE' T→FT' F → i i 匹配 T' → ε + 匹配 T →FT' F → i i 匹配 T → *FT' * 匹配 F → i i 匹配 T' → ε E' → ε 接受 根据预测分析表对输入串进行分析 例:表达式的预测分析表如下: #E' E' →+TE' i*i# 现对输入串 i+i*i 进行分析,请将右图填写完整。
自底向上优先分析法 • 基本概念:简单优先分析法、算符优先分析法、素短语、最左素短语、算符优先分析法的局限性
考试方法 • 提供定义,根据文法写出简单优先关系表(P.96) • 提供定义,根据文法写出算符优先关系表(P.99、102-103) • 根据文法和算符优先关系表完成字符串的移进-规约变化过程(演示文稿)
写出算符优先关系表 文法G[E]:E→E+E|E-E|E*E|E/E|EE|(E)|i 步骤 符号栈 输入符号串 动作 例: 请将表格填写完整: 1) # i+i*i# #<i,移进 2) #i +i*i# #<i>+,规约 3) #E +i*i# #<+,移进 4) #E+ i*i# +<i,移进 5) #E+i *i# +<i>*,规约 6) #E+E *i# +<*,移进 7) #E+E* i# *<i,移进 8) #E+E*i # *<i>#,规约 9) #E+E*E # +<*>#,规约 10) #E+E # #<+>#,规约 11) #E # 接受 说明:现在是完整的。 对输入串i+i*i的算符优先分析过程
实验考试方法 • 根据源代码识别函数的功能(扫描字符、词法分析[单词分割]、规约、移进) • 写出你在做某个实验的步骤,你的程序的功能,其中某几个函数的接口定义(参数含义、返回值、全局变量变化、调用方法) • 画出模块结构图