编译原理基础 10份

合集下载

编译原理基础知识

编译原理基础知识

编译原理基础知识编译原理是计算机科学中一门重要的学科,它研究的是将程序源代码转化为可执行代码的过程。

掌握编译原理的基础知识对于理解计算机编程语言的运行原理以及进行高效编程至关重要。

本文将介绍编译原理的基本概念、过程和常用算法。

一、编译原理概述编译器是实现编译原理的工具,它将高级语言代码转化为机器语言代码。

编译器的工作过程可以分为三个主要阶段:词法分析、语法分析和语义分析。

词法分析器主要负责将源代码分解为词法单元,语法分析器则负责将词法单元组织成语法树,而语义分析器则检查语法树的语义错误并进行修正。

二、词法分析词法分析是编译器的第一个阶段,它将源代码分解为词法单元(Token)。

词法单元是程序中的最小可识别单位,如标识符、关键字、运算符等。

词法分析器通常使用有限自动机、正则表达式等方法进行词法单元的识别和分类。

三、语法分析语法分析是编译器的第二个阶段,它将词法单元组织成语法树(Parse Tree)。

语法树是由语法分析器根据源代码的语法规则生成的一棵树状结构。

语法分析器使用上下文无关文法(CFG)来描述语法规则,并通过递归下降、LR分析等算法进行语法单元的解析和组织。

四、语义分析语义分析是编译器的第三个阶段,它主要负责检查语法树的语义错误并进行修正。

语义分析器会检查变量的声明和使用是否一致、类型是否匹配等问题,并生成中间代码或目标代码。

常见的语义分析算法包括类型检查、符号表管理等。

五、代码生成代码生成是编译器的最后一个阶段,它将语义分析阶段生成的中间代码或目标代码转化为可执行代码。

代码生成器会优化代码的执行效率,包括寄存器分配、指令选择、代码重排等。

常用的代码生成算法有静态单赋值(SSA)形式转换、线性扫描代码生成等。

六、总结编译原理是计算机科学中的一门重要学科,它涉及到将源代码转化为可执行代码的过程。

掌握编译原理的基础知识可以帮助我们理解计算机编程语言的运行原理,提高编程效率。

本文介绍了编译原理的概述,包括词法分析、语法分析、语义分析和代码生成等基本概念和过程。

编译原理的基础知识和技术

编译原理的基础知识和技术

编译原理的基础知识和技术编译原理是计算机科学中的重要领域,它研究的是将高级程序语言转换为机器语言的方法和过程。

在计算机软件开发中,编译器扮演着重要的角色,它能够将编写的源代码转化为可执行的机器代码。

本文将介绍编译原理的基础知识和相关技术。

一、编译原理的定义与概述编译原理是指将高级语言程序转化为等价的机器语言程序的技术和理论研究。

编译器是实现编译原理的工具,它负责将源代码进行词法分析、语法分析、语义分析、优化和代码生成等一系列步骤,最终生成可执行的目标代码。

二、编译过程的基本步骤1. 词法分析词法分析是编译过程的第一步,它将源代码分解为一个个的词法单元。

词法单元包括关键字、标识符、常量、运算符和分隔符等。

通过词法分析器,编译器能够识别和提取源代码中的各种词法单元。

2. 语法分析语法分析是编译过程的第二步,它将词法单元串转化为一个个的语法分析树。

语法分析树反映了源代码的语法结构,它能够帮助编译器理解源代码的语义。

常用的语法分析方法包括递归下降法和LR分析法等。

3. 语义分析语义分析是编译过程的第三步,它对语法分析树进行进一步的处理和分析。

语义分析器能够检查源代码是否符合语义规则,并生成语义动作或中间代码。

语义分析的主要任务是类型检查、符号表管理和语义动作的生成等。

4. 优化优化是编译过程中非常重要的一步,它能够对生成的中间代码进行进一步的优化处理。

优化的目标是提高目标代码的执行效率,并减少程序的存储空间。

常见的优化技术包括常量折叠、循环展开、公共子表达式消除等。

5. 代码生成代码生成是编译过程的最后一步,它将优化后的中间代码转化为目标代码。

代码生成器根据目标机器的特性和指令集,生成可执行的机器代码。

代码生成的过程中,需要进行寄存器分配、指令选择和地址分配等。

三、常用的编译器工具1. LexLex是一种常用的词法分析器生成工具,它能够根据用户定义的正则表达式,自动生成词法分析器程序。

Lex生成的词法分析器能够快速地将源代码分解为词法单元,简化了编译器的实现过程。

编译原理基础知识

编译原理基础知识

编译原理基础知识编译原理是计算机科学领域的一个重要分支,涵盖了计算机程序设计的基本概念和技术。

它主要研究如何将高级程序设计语言(源语言)转换为计算机能够执行的机器语言(目标语言),以实现程序的正确性和高效性。

本文将重点介绍编译原理的基础知识。

一、编译原理的定义与作用编译原理是通过编译器将源代码转换为目标代码的理论和方法的总称。

编译器是一个软件工具,它能够将高级语言程序翻译成机器语言程序。

编译原理的主要作用是提高程序的执行效率和可维护性,同时也有助于程序员更好地理解程序的结构和语义。

二、编译原理的基本过程1. 词法分析(Lexical Analysis):将源程序分解为词法单元(Token)的序列,每个词法单元代表了程序中的一个基本语法单位,如关键字、标识符、常量等。

2. 语法分析(Syntax Analysis):通过语法分析器(Parser)根据语法规则检测和分析词法单元序列,构建语法树(Syntax Tree),以表达程序的语法结构。

3. 语义分析(Semantic Analysis):对语法树进行语义检查,包括类型检查、作用域分析等,并生成符号表。

4. 中间代码生成(Intermediate Code Generation):将语法树转换为中间代码,中间代码是一种类似于汇编语言的低级表示形式,与具体的硬件平台无关,便于后续优化与目标代码生成。

5. 代码优化(Code Optimization):对中间代码进行各种优化,以提高程序的执行效率和资源利用率。

6. 目标代码生成(Code Generation):将优化后的中间代码转换为目标代码,目标代码是特定硬件平台上的机器代码,可以直接由计算机执行。

三、编译原理的常见技术和算法1. 正则表达式和有限自动机:用于对词法单元进行识别和划分的基础技术。

2. 上下文无关文法和语法分析算法:用于语法分析的基本概念和方法,如LL文法、LR文法和LALR文法等。

计算机编译原理基础

计算机编译原理基础

计算机编译原理基础计算机编译原理是计算机科学与技术中的重要学科。

本文将介绍编译原理的基础知识,包括编译的概念、编译过程中的各个阶段以及编译器的核心功能。

通过学习本文,读者将对计算机编译原理有更深入的了解。

一、概念与定义编译是将一种语言的源代码转换为另一种语言的过程。

在计算机编译原理中,源代码通常是高级语言,而转换后的代码则是机器语言或者是中间代码。

编译器是执行编译过程的软件工具,它由多个组件组成,每个组件都有特定的功能。

二、编译过程编译过程可以分为以下几个阶段:词法分析、语法分析、语义分析、中间代码生成、代码优化以及目标代码生成。

1. 词法分析词法分析是将源代码分解为一个个的词法单元,例如标识符和运算符。

词法分析器通常使用正则表达式来匹配代码中的词法单元,并生成一个词法单元流。

2. 语法分析语法分析是对词法单元流进行分析,构建语法树。

语法分析器通常使用上下文无关文法来描述源代码的语法结构,通过递归下降法或者是LR算法来实现语法分析。

3. 语义分析语义分析是在语法树的基础上对代码进行进一步的分析,以检查代码的语义正确性。

语义分析器通常会执行类型检查,并生成一些附加的信息供后续的代码生成阶段使用。

4. 中间代码生成中间代码生成是将源代码转换为一种中间表示形式,这种形式比源代码更容易进行优化和转换。

常见的中间表示形式包括三地址码和抽象语法树。

5. 代码优化代码优化是对中间代码进行优化,以提高程序的执行速度或者是减小程序的体积。

常见的代码优化技术包括常量折叠、公共子表达式消除和死代码删除等。

6. 目标代码生成目标代码生成是将中间代码转换为特定目标机器的机器代码。

目标代码生成器通常会针对不同的机器体系结构生成相应的目标代码。

三、编译器的核心功能编译器的核心功能包括词法分析、语法分析、语义分析和中间代码生成。

这些功能是编译器的基础,也是编译器能够将源代码转换为目标代码的关键。

1. 词法分析器词法分析器负责将源代码分解为一个个的词法单元,并将其传递给语法分析器。

编译原理基础

编译原理基础

第一章引论主要内容:编译原理的基本概念、定义、编译原理的应用发展和现状。

重点:编译程序工作的基本构成及各阶段的基本任务,具体要求:理解什么是编译程序,了解各编译程序的基本构成及各阶段的基本任务,编译程序总框,了解编译程序生成过程和构造工具。

一、名词解释1、编译程序:能够把用各种高级语言书写的源程序翻译成某种等价的目标程序的翻译程序。

2、遍:指编译程序对源程序或中间代码程序从头到尾扫描一次。

3、静态分配:在编译时就能够安排好目标程序运行时的全部数据空间。

二、问答题1、简述编译程序的结构?答:编译程序包括词法分析、语法分析、中间代码生成、优化,目标代码产生五个阶段,上述各阶段中还要进行表格处理和出错处理的工作。

2、编译程序可分成哪几个阶段?它们之间的关系如何?答:编译程序可分为五个阶段:词法分析、语法分析、中间代码生成、优化、目标代码生成。

上述五个阶段之间每个阶段输出为作下一阶段的输入,第一阶段的输入是源程序,最后阶段的输出是目标代码程序。

注意:编译过程中,阶段的划分和遍的划分不一定相同第二章高级程序语言概述主要内容:程序语言定义、初等数据类型、数据结构、表达式、语句、高级语言的一般特征及程序语言的语法描述。

重点:程序语言定义具体要求:理解程序语言的词法、语法和语义等概念;熟悉高级程序语言的一般结构和主要共同特征。

一、填空题1、程序语言是由(语法)和(语义)两方面定义的。

2、一个名字的属性包括(类型)和(作用域)3、目标代码一般有三种形式:能够立即执行的机器语言代码,(待装配的机器语言模块)和(汇编语言代码)4、语义:定义一个程序的意义的(一组规则)5、2型文法又称为(上下文无关文法),3型文法又为(正规文法)二、是非题1、虽然名字都是用标识符表示的,但名字和标识符有着本质的区别(对)2、各种名字都是用标识符表示的,所以名字和标识没有本质的区别(错)3、数组元素的地址计算与数组的存储方式没有关系(错)4、语法是指程序的含义(错)5、因名字都是用标识符表示的,故名字与标识符没有区别(错)第三章词法分析主要内容:词法分析器的任务、词法分析器的设计、正规表达式与有限自动机、词法分析器的自动生成。

编译原理基础

编译原理基础

第一章引论主要内容:编译原理的基本概念、定义、编译原理的应用发展和现状。

重点:编译程序工作的基本构成及各阶段的基本任务,具体要求:理解什么是编译程序,了解各编译程序的基本构成及各阶段的基本任务,编译程序总框,了解编译程序生成过程和构造工具。

一、名词解释1、编译程序:能够把用各种高级语言书写的源程序翻译成某种等价的目标程序的翻译程序。

2、遍:指编译程序对源程序或中间代码程序从头到尾扫描一次。

3、静态分配:在编译时就能够安排好目标程序运行时的全部数据空间。

二、问答题1、简述编译程序的结构?答:编译程序包括词法分析、语法分析、中间代码生成、优化,目标代码产生五个阶段,上述各阶段中还要进行表格处理和出错处理的工作。

2、编译程序可分成哪几个阶段?它们之间的关系如何?答:编译程序可分为五个阶段:词法分析、语法分析、中间代码生成、优化、目标代码生成。

上述五个阶段之间每个阶段输出为作下一阶段的输入,第一阶段的输入是源程序,最后阶段的输出是目标代码程序。

注意:编译过程中,阶段的划分和遍的划分不一定相同第二章高级程序语言概述主要内容:程序语言定义、初等数据类型、数据结构、表达式、语句、高级语言的一般特征及程序语言的语法描述。

重点:程序语言定义具体要求:理解程序语言的词法、语法和语义等概念;熟悉高级程序语言的一般结构和主要共同特征。

一、填空题1、程序语言是由(语法)和(语义)两方面定义的。

2、一个名字的属性包括(类型)和(作用域)3、目标代码一般有三种形式:能够立即执行的机器语言代码,(待装配的机器语言模块)和(汇编语言代码)4、语义:定义一个程序的意义的(一组规则)5、2型文法又称为(上下文无关文法),3型文法又为(正规文法)二、是非题1、虽然名字都是用标识符表示的,但名字和标识符有着本质的区别(对)2、各种名字都是用标识符表示的,所以名字和标识没有本质的区别(错)3、数组元素的地址计算与数组的存储方式没有关系(错)4、语法是指程序的含义(错)5、因名字都是用标识符表示的,故名字与标识符没有区别(错)第三章词法分析主要内容:词法分析器的任务、词法分析器的设计、正规表达式与有限自动机、词法分析器的自动生成。

编译原理的基础知识

编译原理的基础知识

编译原理的基础知识编译原理是计算机科学与技术领域中的一门重要学科,研究的是将高级语言程序翻译成可被计算机执行的机器语言程序的方法和过程。

它是计算机软件开发中不可或缺的一环,对于计算机科学专业的学生而言,具备一定的编译原理基础知识是至关重要的。

本文将介绍编译原理的基础知识,包括编译器的基本概念、编译器的主要组成部分以及编译过程的基本流程。

一、编译器的基本概念编译器是一种将高级语言程序转换为低级语言(如机器语言)程序的工具。

它负责将程序源代码进行词法分析、语法分析、语义分析、优化和代码生成等多个阶段的处理,最终生成可被计算机执行的目标代码。

编译器的基本概念包括以下几个方面:1. 词法分析:词法分析器将源代码划分为一个个的词法单元,如关键字、标识符、运算符和常量等。

2. 语法分析:语法分析器根据事先定义好的文法规则,将词法单元序列进行语法分析,构建语法树。

3. 语义分析:语义分析器对语法树进行分析,并进行类型检查、语义检查等操作,确保程序代码在语法和语义上是正确的。

4. 中间代码生成:中间代码是一种抽象的中间表示形式,它在不同的平台之间具有移植性。

中间代码生成器将语法树转换为中间代码。

5. 优化:优化器通过分析程序的中间代码,寻找程序中的冗余、低效或无用代码,并对其进行优化,以改善程序的性能。

6. 目标代码生成:目标代码生成器将中间代码转换为目标平台的机器代码,可以是汇编语言或二进制指令等形式。

二、编译器的主要组成部分一个完整的编译器通常由以下几个主要组成部分构成:1. 前端:前端负责对源代码进行词法分析、语法分析、语义分析和中间代码生成等工作。

它将源代码转换为一种中间表示形式,以供后端使用。

2. 中间表示:中间表示是前端生成的一种抽象的中间形式,它在不同的编译器阶段之间传递信息。

常见的中间表示形式有抽象语法树(AST)、三地址码和字节码等。

3. 优化器:优化器在前端生成的中间表示上进行优化,通过分析程序的结构和特性,寻找可以提高程序性能的优化机会,并进行相应的代码改写。

编译原理资料汇总

编译原理资料汇总

第一章1.翻译,是指在计算机中放置一个能由计算机直接执行的翻译程序,它以某一种程序设计语言(源语言)所编写的程序(源程序)作为翻译或加工的对象,当计算机翻译程序时,就将它翻译为与之等价的另一种语言(目标语言)的程序(目标程序)。

2.编译程序与运行系统合称为编译系统。

3.源程序的编译(或汇编)和目标程序的执行不一定在同一种计算机上完成。

当源程序由另一种计算机进行编译(或汇编)时,我们将此种编译(或汇编)称为交叉编译(或汇编)。

4.解释程序也以源程序作为它的输入,它与编译程序的主要区别是在解释程序的执行过程中不产生目标程序,而是解释执行源程序本身。

5.编译程序的主要功能是把用高级语言编写的源程序翻译为等价的目标程序。

6.编译程序的8个组成部分:(1)词法分析程序(也称扫描器)(2)语法分析程序(3)语义分析程序(4)中间代码分析程序(5)代码优化程序(6)目标代码生成程序(7)错误检查和处理程序(8)信息表格的管理程序7.编译程序的逻辑结构:(八个组成部分间的控制流程和信息流程)源程序->(1)词法分析程序->(2)语法分析程序->(3)语义分析程序->(4)中间代码生成->(5)代码优化程序->(6)目标代码生成->目标代码和以上1 2 3 4 5 6 相关联的还有(7)错误检查和处理程序和(8)信息表管理程序。

8.用形如(Class,V alue)的序偶(二元式)作为一个单词的内部表示。

Class表示单词的类别,Value是单词的值。

9.语法分析程序以词法分析程序所输出的用内部编码格式表示的单词序列作为输入,其任务是分析源程序的结构,判别他是否为相应程序设计语言中的一个合法程序。

10.前后文无关文法CFG11.常见的中间代码形式:逆波兰表示、三元式、四元式、树形结构12.目标代码生成程序以语义分析(或优化处理)所产生的中间代码作为输入,其功能是根据前面各阶段对源程序进行分析和加工所得到的有关信息,将中间代码翻译为机器语言或汇编语言形式的目标程序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

机密★启用前大连理工大学网络教育学院2019年秋《编译原理基础》期末考试复习题☆注意事项:本复习题满分共:200分。

一、单项选择题1、以010结尾的二进制串的正规式为()。

A.(1|0)*01 B.0*01*C.(1|0)*010 D.0(1|0)*012、与(s|t)* (s|t)等价的正规式是()。

A.s*| t* B.(st)*(s|t)C.(s|t)(s|t)* D.(s|t)*3、对正规式(a*|b*)+所描述的语言,下列说法准确的是()。

A.连续个a再加连续个b所组成的串的集合B.a和b个数相等的串的集合C.a和b组成的所有串(不含空串)的集合D.a和b组成的所有串(包含空串)的集合4、对于DFA模型,说法错误的是()。

A.DFA从任何状态出发,对于任何输入符号,可有多个转换B.任何状态都没有ε转换C.DFA有唯一的开始状态D.DFA可以有多个接受状态5、以下说法错误的是()。

A. NFA的状态集合是无限的B. NFA的输入符号可能有多个C. DFA的状态集合是有限的D. DFA的输入符号可能有多个6、符号串ab1b2是文法G[A]:A→aB B→bB|b的句子,该句子的句柄是()。

A.b1B.b2C.a D.b1b27、移进-归约分析为输入串构造分析树是从()开始的。

A.根结点B.叶结点C.中间结点D.任一结点8、下列叙述正确的是()。

A.任何LL(1)文法都是LR(1)文法B.任何LL(1)文法都是SLR(1)文法C.任何SLR(1)文法肯定是LR(1)文法D.任何LR(1)文法肯定是LALR(1)文法9、下列叙述正确的是()。

A.S属性定义属于L属性定义B.变量类型声明的语法制导定义不是一个L属性定义C.L属性定义只包含综合属性D.L属性定义只包含继承属性10、中间代码生成时所依据的为()。

A.语法规则B.语法规则C.语义规则D.等价变换规则单选题答案1. A 2. B 3. D 4. A 5. A6. B 7. B 8. C 9. A 10.C二、填空题1、对编译程序而言,输入数据是,输出结果是。

答案:源程序目标程序2、对于一个文法G而言,如果L(G)中存在某个句子对应两棵不同的那么该文法就称为是二义的。

答案:语法树3、编译器常用的语法分析方法有和两种。

答案:自底向上、自顶向下4、程序设计语言的发展带来日渐多变的运行时存储管理方案,主要分为两大类即分配方案和分配方案。

答案:静态存储、动态存储5、最右推导称为,由规范推导产生的句型称为规范句型。

答案:规范推导三、判断题1、L*表示零个或多个L连接的并集。

()2、闭包运算有最高的优先级并且是右结合的运算。

()3、不确定的有限自动机是指对于某个输入符号,它存在不止一种转换。

()4、每一个正规集都可以由一个状态数最少的DFA识别,这个DFA是可以不唯一的。

()5、对于S属性定义,分析树各结点属性的计算可以自下而上地完成。

()6、编程语言的一些构造的属性依赖于它们所在的上下文,此时使用继承属性是方便的。

()7、中间表示设计的选择随编译器不同而不同。

()8、三地址代码每条指令通常包含三个地址,即两个运算对象的地址和一个结果的地址。

()9、静态单赋值形式是一种便于某些代码优化的中间表示。

()10、流图的结点是基本块。

()11、解释器可以通过翻译来生成目标程序。

()12、如果X和Y都是串,那么X和Y的连接是把Y加到X的后面形成的串。

()13、LM表示L和M的并。

()14、正规式a*表示由字母a构成的所有串的集合其中不包括空串。

()15、有限自动机分成确定的和不确定的两种情况。

()16、由上下文无关文法产生的语言叫做上下文无关语言。

()17、分析树子结点由非终结符本次推导所用产生式的右部的各符号从右到左依次来标记。

()18、在语法制导定义中,其中的文法被称为基础文法。

()19、后缀表示的最大优点是便于计算机处理表达式。

()20、三地址语句序列的一种图形表示叫做流图。

()答案:1.√ 2.× 3.√ 4.× 5.√6.√ 7.√ 8.√ 9.√ 10.√11.× 12.√ 13.× 14.× 15.√16.√ 17.× 18.√ 19.√ 20.√四、名词解释1、基本块连续的语句序列,控制流从它的开始进入,并从它的末尾离开2、词法单元又称单元,是源程序中匹配一个记号模式的字符序列,它由词法分析器识别该记号的一个实例。

3、翻译器把一种语言变换到另外一种语言的软件。

这两种语言分别称为源语言和目标语言。

4、编译器是一种翻译器,它的目标语言比源语言低级。

五、简答题1、给出下列语言的正规表达式。

在{0,1}上不以0开头的,以11结尾的字符串集合。

最多只含2个a的{a,b}上的语言。

答:(1) 11 | 1(1|0)* 11(2) b*(a| ε)b *(a| ε)b* 或者b*|b*ab*|b*ab*ab*2、简述用综合属性代替继承属性的方法。

答:(1)删除翻译方案中嵌入的动作;(2)分析栈上的继承属性,使用栈上的综合属性代替继承属性;(3)模拟继承属性的计算3、分析器的基本动作分类答:移进动作归约动作接受动作报错动作4、简述确定的有限自动机和不确定的有限自动机的区别。

答:确定和不确定的有限自动机都正好能识别正规集,它们之间存在着时空权衡问题:从确定的有限自动机得到识别器,比从等价的不确定的有限自动机得到识别器要快得多,但是,确定的有限自动机可能比等价的不确定有限自动机占用更多的空间,把正规式变成不确定的自动机更直接一些。

5、设∑={0, 1},写出∑上所有以1开头,101结束的字符串的正规式,并构造其对应的NFA。

答:构造该正规式相应的不确定有限自动机NFA: 1(0|1)*101。

评分标准:画出DFA视为等同画出NFA。

6、简述编译器常用的语法分析方法答:编译器常用的语法分析方法有自上而下和自下而上两种。

自上而下分析器按从根结点到叶结点的次序来建立分析树,而自下而上分析器恰好相反,它们的共同点是从左向右地扫描输入,每次一个符号。

7、从软件工程的角度看,词法分析和语法分析的分离有什么好处?答:编译器的效率会改进。

编译器的可移植性加强。

把语言的语法结构分成词法和非词法两部分,为编译器前端的模块划分提供了方便的途径。

8、简述编程通常会出现的错误。

答:词法错误语法错误语义错误逻辑错误9、试述为什么用正规式定义语言的词法?答:语言的词法规则非常简单,不必用功能更强的上下文无关文法描述它。

对于词法记号,正规式给出的描述比上下文无关文法给出的更简洁且易于理解。

从正规式自动构造出的词法分析器比从上下文无关文法构造出的更有效。

10、写出X:=(B-5)*A+(C+D)*T的三地址代码。

答:t1=B-5t2= t1*At3=C+Dt4=t3*TX=t2+t411、简述分析器错误处理的基本目标。

答:清楚而准确地报告错误的出现;迅速地从每个错误中恢复过来,以便诊断剩余程序的错误;它不应该使处理正确程序的速度降低太多。

六、分析题1、设文法G[E]:E→T | E + T | E - TT→F | T * F | T / FF→( E ) | i1)给出该文法的终结符集合。

2)给出该文法的非终结符集合。

3)画出句子i*( i + i )的自上而下分析树。

4)该文法是LL(1)文法吗?请解释。

答:1)给出该文法的终结符集合。

+ - * / ( ) i2)给出该文法的非终结符集合。

E, T, F3)画出句子i*( i + i )的的自上而下分析树。

最左推导E⇒T⇒T*F⇒F*F ⇒i*F⇒i*(E) ⇒ i*(E+T) ⇒ i*(T+T) ⇒ i*(F+T) ⇒ i*(i+T) ⇒ i*(i+F) ⇒ i*( i + i )F E F T E ()E T T F iF T *4)该文法是LL(1)文法吗?请解释。

不是。

因为存在左递归,因此不是LL(1)文法。

2、考虑如下的上下文无关文法G[L]:(1)针对表达式id + id ; id ( id ( ) )给出最左推导。

(2)给出表达式id + id ; id ( id ( ) )的语法树。

L → E ; L | E E → E + T | T T → id | id ( ) | id ( L ) 答: (1)L ⇒ E ; L⇒ E+ T ; L ⇒ T+ T ; L ⇒ id + T ; L ⇒ id + id ; L ⇒ id + id ; E ⇒ id + id ; T⇒ id + id ; id ( L ) ⇒ id + id ; id ( E ) ⇒ id + id ; id ( T ) ⇒ id + id ; id ( id ( ) )(2)L ;L E E T L T T +id E idid ()T E id ()。

相关文档
最新文档