`

【编译原理】第二章 一个简单的语法制导翻译器

 
阅读更多

一,语法定义

1)文法:对语言结构的定义与描述。即从形式上用于描述和规定语言结构的称为“文法”(或称为“语法”),而未
涉及语义问题。

例:有一句子:“我是大学生” 。这是一个在语法、语义上都正确的句子,该句子的结构(称为语法结构)是由它的语法决定的。在本例中它为“主谓结构”

2)文法定义

文法G=(Vn,Vt,P,Z)
Vn:非终结符号集,语法变量
Vt:终结符号集,词法单元
P:产生式或规则的集合
Z:开始符号(识别符号) Z∈Vn

例:if(expression) statement else statement;

关键字if和括号:为 终结符号(词法单元)

expression、statement:非终结符号

3)推导

从一个要识别的符号开始推导,即用相应规则的右部来替代规则的左部,每次仅用一条规则去进行推导。从开始符号出发,不断将某个非终结符号替换为该非终结符号的某个产生式的体。

<句子>::=<主语><谓语>
<主语>::=<代词>|<名词>
<代词> ::=你|我|他
<名词>::= 王民|大学生|工人|英语
<谓语>::=<动词><直接宾语>
<动词>::=是|学习
<直接宾语>::=<代词>|<名词>

4)语法分析

接受一个终结符号串作为输入,找出从文法的开始符号推导出这个串的方法。如果不能从文法符号推到得到该终结符号串,则报错。

5)语法分析树

语法分析树被定义为具有下述性质的一棵树:
1) 根由开始符号所标记;
2) 每个叶子由一个终结符、非终结符、或ε标记;
3) 每个内部结点由一个非终结符标记;
4) 若A是某内部节点的标记,且X1,X2,...,Xn是该节点从左到右所有孩子的标记,则A→X1X2...Xn是一个产生式。若A→ε,则标记为A的结点可以仅有一个标记为ε的孩子。

例子:9-5+2

文法的产生式:list -> list + digit ;

list -> list - digit ;

list -> digit

digit -> 0 | 1| 2| 3| 4| 5| 6| 7| 8| 9

非终结符:list digit list是文法开始符号

终结符:零个或多个终结符号组成的序列,零个终结符组成的串称为空串

语法分析树:

list

/ | \

list | digit

/ | \ | |

list | digit | |

| | | | |

9 - 5 + 2

6)二义性

一个文法可能有多颗语法分析树,生成同一个给定的终结符号。

例子:句子id+id*id可能的分析树


(id+id)*id id+id*id

消除二义性:

① 改写二义文法为非二义文法;
② 规定二义文法中符号的优先级和结合性,使仅产生一棵分析树。

二义文法的优点:
① 比非二义文法容易理解;
② 分析效率高(分析树低,直接推导步骤少)。

三,语法制导翻译

1)属性:与某个程序构造相关的任意的量,属性可以使多种多样的,比如表达式的数据类型、生成的代码中的指令数目或为某个生成的代码中第一条指令的位置。

2)翻译方案:将程序片段附加到一个文法的各个产生式上的表示法。当在语法分析过程中使用一个产生式时,相应的程序片段就会执行。

3)语法制导定义:把每个文法符号和一个属性集合相关联,并且把每个产生式和一组语义规则相关联,这些规则用于计算与该产生式中符号相关联的属性值


四,语法分析

1)语法分析:决定如何使用一个文法生成一个终结符号串的过程。原则上语法分析器必须能够构造出语法分析树,否则将无法保证翻译的正确性

2)语法分析分为:自顶向下分析方法和自底向上分析方法

3)自顶向下分析方法:构造方法从根节点开始,逐步向叶子节点方向进行。

4)预测分析法(递归下降分析法):自顶向下的语法分析方法,使用一组递归过程来处理输入。


五,简单表达式的翻译器

1)抽象语法树:每个内部节点代表一个运算符(而不像语法分析树 为非终结符号)

2)将中缀表达式翻译成后缀表达式:


六,词法分析

1)从输入中读取字符,并将它们组成”词法单元对象“。构成一个词法单元的输入字符序列成为词素。

2)剔除空白和注释:实现这个远非易事

3)预读:比如读到 then 还要往下读,如果是空格或其他非标识符则判断为关键字。否则为标识符(thenOther)

<= >= == <>

4)识别关键字和标识符:词法分析采用一个表来保存字符串


七,符号表

1)符号表:一种供编译器用于保存有关源程序构造的各种信息的数据结构。这些信息在编译器的分析阶段被逐步手机并放入符号表。

2)符号表条目:在分析阶段由,词法分析器、语法分析器和语义分析器创建并使用。语法分析器创建。

3)每个作用域设置一个符号表,其作用是将信息从声明的地方传递到实际使用的地方。


八,生成中间代码

1)两种中间表示形式:树形结构,线性表示形式(特别是"三地址代码")











分享到:
评论

相关推荐

    编译原理(第一版)课后答案

    1. **第二章**:通常涵盖词法分析,这是编译过程的第一步,涉及到识别源代码中的单词或符号,将其转化为可供解析器处理的标记序列。这部分可能会讨论正则表达式、有限状态自动机以及如何设计和实现词法分析器。 2. ...

    编译 原理 第四章 语义分析 中间代码 生成 课后 答案

    2. 语法制导翻译(SDTS)是一种编译技术,它为每个产生式定义了一个语义动作,当产生式被匹配或归约时,相应的语义动作被执行。在生成中间代码的过程中,应注意以下几点: - 按照语义要求生成中间代码,即根据程序...

    《编译原理》清华第二版习题答案

    在《编译原理》清华第二版的习题中,你可能遇到的问题涵盖以上所有方面。例如,可能会要求你设计词法分析器来识别特定的标记,编写解析器来处理特定的语法结构,或者实现语义规则来验证程序的正确性。习题还可能涉及...

    编译原理第三版课后习题答案

    第二章 前后文无关文法和语言:该章涉及的形式语言理论是编译器设计的基础,包括上下文无关文法(CFG)和正规文法。课后习题可能要求读者分析文法规则,构造或简化文法,或者判断特定的语言是否可由某类文法描述。 ...

    编译原理实验报告+语法分析++语义分析++词法分析+详细的源程序

    例如,如果一个变量被声明为整型,但在某个地方被赋值为浮点数,语义分析器会检测到这个错误。同时,它也会处理程序的控制流和数据流,比如函数调用的参数匹配、返回值处理等。 4. **源程序**:源程序是用高级编程...

    程序设计语言编译原理 (陈火旺)

    第二章讲述的是高级语言及其语法描述,内容包括程序语言的定义、高级语言的一般特性、程序语言的语法描述。这一章节重点介绍了语法、语义以及如何使用上下文无关文法描述程序语言,并讨论了形式语言的基础知识,为...

    合工大编译原理17级课件全.zip

    第二章 高级语言及其语法描述  2.1 程序语言的定义  2.2 高级语言的一般特性  2.3 程序语言的语法描述 第三章 词法分析  3.1 对于词法分析器的要求  3.2 词法分析器的设计  3.3 正规表达式与有限自动机  3.4 ...

    编译原理(第二版中文)

    第8章 语法制导翻译法  8.1 一般原理和树变换  8.2 简单SDTS和自上而下翻译器  8.3 简单后缀SDTS和自下而上翻译器  8.4 抽象语法树的构造  8.5 属性文法  8.6 中间代码形式  8.7 属性翻译文法的应用 ...

    华中科技大学 编译原理课件

    - "222-2 28-1第二章(2)网.ppt"可能介绍了词法分析和语法分析的算法,如正则表达式、有限状态自动机(FSM)和上下文无关文法(CFG)。 5. **抽象语法树(AST)** - "229-1 306-3第三章(2)网.ppt"可能涉及到AST的...

    编译原理与实践的课后答案

    #### 第二章:词法分析 ##### 2.1 这部分涉及到了正则表达式的构建以及从非确定有限自动机(NFA)到确定有限自动机(DFA)的转换。 **2.1(a):** - 正则表达式: `a|a[a-z]*a` - 解析: 这个表达式表示的是以字母`a`开头...

    编译原理期末习题精选附答案.pdf

    第二章介绍了简单的语法制导分析器。尽管本章内容不作为考试重点,但学生仍需要理解语法制导分析器的基本概念和工作原理。它通过对输入的语句进行语法分析,并根据语法规则进行处理,指导了编译器后续的语义分析和...

    编译原理龙书第二版

    《编译原理龙书第二版》是计算机科学领域的经典教材,由Alfred V. Aho、Monica S. Lam、Ravi Sethi、Jeffrey D. Ullman四位学者共同撰写,赵建华、郑汗、戴新宇翻译,机械工业出版社出版。本书在计算机科学尤其是...

    福州大学编译原理ppt

    2. **第二章 演示文稿** 这部分可能涉及到编译器的基本概念和工作流程,包括词法单元、语法结构和语义规则的定义,以及如何使用这些规则构建编译器的抽象语法树(AST)。 3. **第三章 语法分析** 语法分析是编译...

    编译原理ppt第一章

    **编译原理**是软件工程领域的一个重要分支,本课程旨在介绍编译器构造的一般原理和基本实现方法。通过对编译器构造的学习,学生能够深入了解编程语言的设计与实现,掌握与编程语言相关的理论知识,如形式语言和...

    适合大学生的编译原理课件

    1. **第二章 - PL0编译程序**:这部分内容通常会介绍一个简单的编程语言PL0,它是用来教授编译原理概念的理想教学工具。PL0是一个非常基础的语言,只包含有限的语法规则,便于初学者理解和实现编译器。章节可能涵盖...

    编译原理课件

    3. **形式语言与自动机理论基础**:第二章分为两部分,分别探讨了形式语言和有限自动机(Finite Automata)。形式语言用于描述编程语言的结构,而有限自动机则是分析这些语言结构的重要工具,如确定性有限自动机...

    编译原理第三版答案,一共有多个PDF

    2. **第二章 前后文无关文法和语言**:前后文无关文法(CFG)是描述编程语言语法的一种形式化方法。本章可能涉及文法的基本概念、上下文无关文法的构造、识别和解析算法,如LL和LR解析。 3. **第三章 词法分析及...

    编译原理教案与课后答案(陈火旺第三版)

    2. **第二章_高级语言及其语法描述**: 这一章深入讨论高级语言的特点,如C、Java或Python等,并介绍如何用形式化语言(如BNF或EBNF)来描述编程语言的语法规则,为后续的语法分析打下基础。 3. **第三章_词法分析**...

Global site tag (gtag.js) - Google Analytics