编译原理问题

简答题1

编译的各个逻辑阶段和各阶段的主要功能?

阶段:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成

各阶段主要功能:
词法分析:读入源程序并转换为有意义的语法单元序列
语法分析:根据语法单元序列判断输入的源程序是否符合语法
语义分析:检查输入的源程序是否符合语义;手机类型信息并存入符号表
中间代码生成:将输入的的源程序翻译为中间代码
代码优化:改进中间代码
目标代码生成:这一阶段的任务是把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码

简答题2

Chomsky把形式语言分为哪几类,写出每一类对应的自动机。

0型文法、1型文法、2型文法、3型文法
0型文法:
1型文法:
2型文法:
3型文法:有限状态自动机

什么是正则表达式?

是一种文本模式,包括普通字符(例如,a到z之间的字母)和特殊字符(称为"元字符"

什么是NFA

不确定的有穷自动机
由一个有穷的状态集合、输入符号集合、一个转换函数、开始状态、接受状态集合组成
在某个状态时,输入一个符号可能有多个目标状态

什么是DFA

确定的有穷自动机
由一个有穷的状态集合、输入符号集合、一个转换函数、开始状态、接受状态集合组成
在某个状态时,输入一个符号只有多个目标状态

什么是上下文无关文法,写出其定义

由终结符集合、非终结符集合、产生式集合、开始符号组成

简答题3

自下而上的语法分析方法主要有几类?

1. 规范归约分析法:从输入串开始,朝着文法的开始符号进行归约,直到文法的开始符号为止的过程。
2. 简单优先分析法:是一种自下而上的归约分析法,它维护一个候选式的集合,并在需要时为每个候选式生成相应的移进-规约、规约-规约或规约-移进-规约等归约动作。
3. 算符优先分析法:是一种自下而上的归约分析法,它维护一个算符集合,并在需要时为每个算符生成相应的归约动作。

递归下降分析的基本思想是什么,对文法有什么要求

基本思想:把产生式右部的符号串(包括终结符和非终结符)依次替换成相应的左部符号,直到产生式的左部是开始符号为止

递归下降分析法要求文法满足以下几点:
文法的每一产生式右部必须含有一个终结符和非终结符;
文法的每一产生式右部的非终结符必须与该产生式左部的非终结符相同;
文法的每一非终结符必须正则限界。

LR分析方法主要分为哪四类?

LR(0)、LR(1)、SLR(1)、LALR(1)

什么是递归下降分析,构造一个确定的递归下降分析对文法有什么要求

递归下降分析是一种自下而上的归约分析方法,其基本思想是利用语法规则递归地定义文法,并从输入串开始进行归约,直到文法的开始符号或产生式左部为止

在递归下降分析中,每个非终结符都需要定义一个递归下降函数,这些函数在语法规则中指定。因此,构造一个确定的递归下降分析对文法有以下要求:

文法必须二义性以下:为了避免递归下降分析陷入无限循环,文法必须是二义性以下的。
文法必须含有足够的产生式:为了避免在分析过程中出现无法归约的情况,文法必须含有足够的产生式。
文法必须含有足够的语义动作:在递归下降分析中,语义动作用于执行文法规则后的操作,如变量赋值、符号输出等。因此,文法必须含有足够的语义动作。
文法必须具有规约的终止性:在递归下降分析中,归约操作必须具有终止性,否则分析将陷入无限循环。

LL(1)文法的判定条件是什么

1. 不含左递归
2. 文法中的任一非终结符的产生式的FIRST集两两不相交

从搜索符角度来比较LR(0) SLR(1) LALR(1) LR(1)文法的差异,并写出它们的强弱关系

LALR(1)文法的判定条件是什么

简答题4

S属性定义和L属性定义

什么是中间代码?列出三种中间代码

什么是目标代码优化,代码优化有哪些主要的形式(列举至少四种)

LR(0)文法的规范项目集族的构造算法步骤

什么是SLR(1)文法

什么是LR(0)文法

什么是LR(1)文法

什么是LALR(1)文法

什么是属性文法, 什么是综合属性和继承属性?

简单计算题1

构造一个NFA,M 满足L(M)={w|w是奇数个0和奇数个1组成的二进制数,0可以作为前导符号}。


已知文法 E->E+E|E*E|(E)|id ;给出串id*(id+id)的最右推导。

E => E*E => E*(E) => E*(E+E) => E*(E+id) => E*(id+id) => id*(id+id)

已知文法 E->E+E|EE|(E)|id ;分别给出串(id+id)id的最左推导

E => E*E => id*E => id*(E) => id*(E+E) => id*(id+E) => id*(id+id)

构造一个NFA,M 满足L(M)={w|w是奇数个0和偶数个1组成的二进制数,0可以作为前导符号}。


简单计算题2

计算文法S->Sa|Sb|Sc|x|y|z 的Frist(S)和Follow(S)

First(S) = {x,y,z}
Follow(S) = {$,a,b,c}

计算文法S->Sa|Sb|Sc|x|y 的Frist(S)和Follow(S)

First(S) = {x,y}
Follow(S) = {$,a,b,c}

把左递归文法S->Sa|Sb|x|y|z 转化为右递归文法

S->xS|yS|zS|a|b

已知文法 E->E+E|EE|(E)|id ;给出句型E+Fid的语法树,并求出所有短语,直接短语和句柄


已知文法 E->E+E|EE|(E)|id ;给出句型T+Fid的语法树,并求出所有短语,直接短语和句柄


简单计算题3

为文法 S->(L)|a L->L,S|S 写一个语法制导定义输出括号的最大层数

为文法 S->(L)|a L->L,S|S ,试写一个语法制导定义,输出括号的对数

写出拓广文法G[E’]的 LR(0)文法的状态集闭包I0 以及I4=GOTO(I0,E)

(0) E’ -> E

(1) E -> E+T
(2) E -> T
(3) T -> ( E )
(4) T -> id

I0:
    E' -> . E
    E -> . E + T
    E -> . T
    T -> . ( E )
    T -> . id


写出拓广文法G[E’]的 LR(0)文法的状态集闭包I0 以及I5=GOTO(I0,()

(0) E’ -> E

(1) E -> E+T
(2) E -> T
(3) T -> ( E )
(4) T -> id

I0:
    E' -> . E
    E -> . E + T
    E -> . T
    T -> . ( E )
    T -> . id


简单计算题3

为文法 S->(L)|a L->L,S|S 写一个语法制导定义输出括号的最大层数


为文法 S->(L)|a L->L,S|S ,试写一个语法制导定义,输出括号的对数


写出拓广文法G[E’]的 LR(0)文法的状态集闭包I0 以及I4=GOTO(I0,E)

(0) E’ -> E

(1) E -> E+T
(2) E -> T
(3) T -> ( E )
(4) T -> id

写出拓广文法G[E’]的 LR(0)文法的状态集闭包I0 以及I5=GOTO(I0,()

(0) E’ -> E

(1) E -> E+T
(2) E -> T
(3) T -> ( E )
(4) T -> id

简单计算题4

构造表达式a+b-c*d/e<max(3,4)的四元式序列

(+, a, b, t1)
(*, c, d, t2)
(/, t1, e, t3)
(-, t1, t3, t4)
(param, 3, , )
(param, 4, , )
(call, max, 2 t5)
(<, t4, t5, t6)

试求表达式(a-b)/(a-b)> a+b * c的抽象语法树AST与逆波兰式

a b - a b - / a b c * + >

构造表达式min(a,b)<(a+b)/ a-b * c四元式序列

综合计算题1

求出正则表达式 0(0|1)1对应的

(1)等价的NFA (4分)

(2)确定化的DFA (4分)

(3)最小状态的DFA (4分)


求出正则表达式 1(0|1)0 等价

(1)NFA (4分)
pCunj3D.png

(2)确定化的DFA (4分)
pCunX9O.png

(3)最小状态的DFA (4分)
pCuuSud.png

参考 github

求出正则表达式 0(0|1)0对应的

(1)NFA (4分)
pCuupDA.png

(2)确定化的DFA (4分)
pCuu9HI.png

(3)最小状态的DFA (4分)
pCuuPEt.png

参考 github

综合计算题2

以下拓广文法G【S】:

(0) S->E

(1) E->T

(2) E->E+T

(3) T->F

(4) T->T*F

(5) F->(E)

(6) F->id

(1)构造G[S']的LR(0)规范项目集族(8分)

项目集规范族:

I0:
    S -> . E
    E -> . T
    E -> . E + T
    T -> . F
    T -> . T * F
    F -> . ( E )
    F -> . id

I1:
    S -> E .
    E -> E . + T

I2:
    E -> T .
    T -> T . * F

I3:
    T -> F .

I4:
    F -> ( . E )
    E -> . T
    E -> . E + T
    T -> . F
    T -> . T * F
    F -> . ( E )
    F -> . id

I5:
    F -> id .

I6:
    E -> E + . T
    T -> . F
    T -> . T * F
    F -> . ( E )
    F -> . id

I7:
    T -> T * . F
    F -> . ( E )
    F -> . id

I8:
    F -> ( E . )
    E -> E . + T

I9:
    E -> E + T .
    T -> T . * F

I10:
    T -> T * F .

I11:
    F -> ( E ) .

(2)证明G[S]不是LR(0)文法而是 SLR(1)文法(4分)

有文法G【S】

(0) S->E

(1) E->T

(2) E->E+T

(3) T->F

(4) T->T*F

(5) F->(E)

(6) F->id

(1)构造G[S']的LR(0)分析表(8分)

pCuu88U.png

(2)判定是否为SLR(1)文法(4分)

有以下不含左递归的上下文无关文法G【E】

(1) E->TE’

(2) E’->+TE’

(3) E’->ε

(4) T->FT’

(5) T’->*FT’

(6) T’->ε

(7) F->(E)|id

(1)构造G【E】的LL(1)分析表(9分)

(2)证明G[E]是 LL(1)文法(3分)

以下指针和变量赋值文法

S'->S

S->V=E

S->E

V->*E

V->id

E ->V

(2)构造文法G[S'](的SLR(1)状态机(8分)

(3)证明文法不是SLR(1)文法(4分)

已知文法G【S】

S -> aA

A->aBd

A->d

B->bB|ε

(1)构造G[S]的LL(1)分析表(9分)

(2)判定是否为LL(1)文法(3分)

posted @   我的名字好长啊  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示