编译原理复习四:编译器结构 消除左递归、左公因子 最右推导 寻找句柄讲解(附题目和答案)

简介: 编译原理复习四:编译器结构 消除左递归、左公因子 最右推导 寻找句柄讲解(附题目和答案)

需要原卷和答案请点赞关注收藏后评论区留言私信~~~

下面对编译原理中一些常见的概念以及算法小题的讲解,这部分可能单独出题考试,也有可能混在大题中出现

一、编译器结构

题目如下

The phases of a complier for statement “b=a+i*2” are described in the following figure 1. Please give the meanings of A, B, C, D, E in the Figure 1

一个编译器大体上有以下结构:词法分析-语法分析-语义分析-中间代码生成-中间代码优化-目标代码生成-目标代码优化等步骤

答案如下

A: Scanner

B:

C: Semantic analyzer

D: IR Generation

E: Code generator

二、正则表达式的应用

Alphabet∑={a,b}, write a regular expression that will generates the set of all strings over this alphabet that contain an even number of a’s.

答案如下

R.E.: ((ab*a)|b)*

三、消除左递归与左公因子

Rewrite the following grammar G(S) to remove left recursion and left factor.

A → bAbB | bABb | aB

B → BaA | ab | ba

上面第一条式子中明显有左公因子bA,第二条式子中有左递归B,消除后结果如下

tips:自顶向下分析的LL(1)文法不能分析带有左公因子和左递归的语法,所有要先进行消除

四、为输入串构造左右推导

Consider the following grammar for Boolean expressions:

E→T+E| T-E|T,   T→1|2|3|4|5|6|7|8|9|0

Write a rightmost derivation for the string: 2+3-4

最右推导就是每次替换最右边的非终结符,结果如下

五、找出句型的句柄

来找句柄之前,我们需要介绍以下概念

1:短语 在为输入串构造的语法树中所有子树的叶子节点为短语

2:直接短语  短语中只有父子两代节点,即高度为2的短语

3:句柄 句柄为语法树中最左的直接短语

Given grammar G[E]:

E→E+E | T

T→T*F | F

F→i | (E)

Write out the handle of the sentential form T*F+i

该句型句柄如下

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
12月前
|
自然语言处理 算法 编译器
编译原理复习一:正则表达式-NFA NFA-DFA DFA最小化(附题目与答案 超详细)
编译原理复习一:正则表达式-NFA NFA-DFA DFA最小化(附题目与答案 超详细)
721 0
|
7月前
|
算法 定位技术
数据结构与算法学习九:学习递归。递归的经典实例:打印问题、阶乘问题、递归-迷宫问题、八皇后问题
本文详细介绍了递归的概念、重要规则、形式,并展示了递归在解决打印问题、阶乘问题、迷宫问题和八皇后问题等经典实例中的应用。
123 0
|
11月前
|
C语言
C语言学习记录——用递归思想求第n个斐波那契数,函数递归
C语言学习记录——用递归思想求第n个斐波那契数,函数递归
65 0
|
12月前
【错题集-编程题】重排字符串(贪心 + 构造)
【错题集-编程题】重排字符串(贪心 + 构造)
|
算法 C语言
KMP算法详解(理论+C语言代码实现)(下)
KMP算法详解(理论+C语言代码实现)(下)
110 0
|
算法 C语言
KMP算法详解(理论+C语言代码实现)(上)
KMP算法详解(理论+C语言代码实现)
233 0
|
机器学习/深度学习 存储
【每日易题】求二进制中1的个数——三种非常巧妙的解题思路
【每日易题】求二进制中1的个数——三种非常巧妙的解题思路
112 0
初阶函数递归经典例题(1)
初阶函数递归经典例题(1)
|
C++
C++ Primer Plus 第五章答案 循环和关系表达式
只有聪明人才能看见的摘要~( ̄▽ ̄~)~
81 0

热门文章

最新文章