📝 编译器设计教程
153篇技术文档📅  最后修改于: 2021-06-28 07:34:00        🧑  作者: Mango
引导程序是一个过程,在该过程中,使用简单的语言来翻译更复杂的程序,而该程序又可以处理更复杂的程序。这个复杂的程序可以进一步处理甚至更复杂的程序,等等。用任何高级语言编写编译器都是一个复杂的过程。从头开始编写编译器需要花费大量时间。因此,在某些阶段,使用简单的语言来生成目标代码。为了清楚地了解自举技术,请考虑以下情形。假设我们要为新语言X编写交叉编译器。此编译器的实现语言为Y,生成的目标代码为语言Z...
📅  最后修改于: 2021-06-28 07:34:19        🧑  作者: Mango
先决条件:Flex(快速词法分析器生成器)给定包含元音和辅音的字符串,编写LEX程序以计算给定字符串的元音和辅音的数量。例子:方法-方法很简单。如果找到任何元音,请增加元音计数器;如果找到辅音,请增加辅音计数器。下面是实现:输出:...
📅  最后修改于: 2021-06-28 07:34:40        🧑  作者: Mango
莱克斯是生成词法分析器的计算机程序。 Lex读取指定词法分析器的输入流,并输出以C编程语言实现词法分析器的源代码。用于执行lex程序的命令为:问题:写lex程序找到,如果从字母表除了字符上的一个给定的字符串中出现。例子 :方法 :使用该标志检查是否还存在其他字符;如果遇到“ \ n”,我们将假定用户已经完全给出了字符串,现在他希望显示结果因此,根据标志的状态,我们将显示输出。否则,如果遇到除(az...
📅  最后修改于: 2021-06-28 07:35:01        🧑  作者: Mango
标记算法在代码生成阶段由编译器使用。基本上,此算法用于确定程序完成其执行将需要多少个寄存器。标记算法以自下而上的方式工作。我们将首先标记子节点,然后标记内部节点。标记算法的规则是:如果“ n”是叶节点–一种。如果“ n”是左孩子,则其值为1。b。如果“ n”是正确的子代,则其值为0。如果“ n”是一个内部节点–假设L1和L2分别是内部节点的左子节点和右子节点。一种。如果L1 == L2,则’n’的...
📅  最后修改于: 2021-06-28 07:35:37        🧑  作者: Mango
在本文中,我们将讨论自下而上解析器的组成部分SLR解析器,CLR解析器和LALR解析器。单反解析器SLR解析器类似于LR(0)解析器,只是条目减少了。减少的产量只写在减少其产量的变量的FOLLOW中。SLR解析表的构建–构造C = {I0,I1,…。 In},是G’的LR(0)个项目的集合。状态i是从Ii构造的。确定状态i的解析动作如下:如果[A->?.a?在Ii中,并且GOTO(Ii,a)= I...
📅  最后修改于: 2021-06-28 07:36:01        🧑  作者: Mango
控制流图中的数据流分析即确定程序中有关数据定义和使用的信息的分析。借助此分析,可以完成优化。通常,其过程是使用数据流分析来计算值。数据流属性表示可用于优化的信息。基本术语–定义点:程序中包含一些定义的点。参考点:程序中包含对数据项的引用的点。评估点:程序中包含表达评估的点。数据流属性–可用表达式–表达式在程序点x iff上沿到达x的路径可用。表达式在其评估点可用。如果操作数在使用前都没有被修改,则...
📅  最后修改于: 2021-06-28 07:36:25        🧑  作者: Mango
Lex是一个生成词法分析器的计算机程序。 Lex读取指定词法分析器的输入流,并输出以C编程语言实现词法分析器的源代码。用于执行lex程序的命令为:让我们看看LEX程序接受以元音开头的字符串。例子:下面是实现:输出:想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。...
📅  最后修改于: 2021-06-28 07:36:53        🧑  作者: Mango
前提条件— LL(1)解析表的构造。LL(1)解析是编译器设计的语法分析阶段中的自上而下的解析方法。 LL(1)解析所需的组件是输入字符串,堆栈,给定语法的解析表和解析器。在这里,我们讨论一个解析器,该解析器确定是否可以从给定的语法(或解析表)生成给定的字符串。让给定的语法是G =(V,T,S,P)其中V变量符号集,T端子符号集,S-起始符号,P-生产集。LL(1)解析器算法:输入-1. stac...
📅  最后修改于: 2021-06-28 07:38:10        🧑  作者: Mango
在继续进行之前,强烈建议您熟悉语法分析,LL(1)解析的基础知识以及计算语法的第一套和第二套的规则。语法分析导论为什么要先跟随?语法分析中的第一组语法分析中的跟随集假设读者熟悉上面讨论的基础知识,让我们开始讨论如何实现C程序来计算给定语法的第一和第二。例子 :函数Follow和Followfirst都涉及给定非终端的跟踪集的计算。后面的开始符号集将始终包含“ $”。现在,“关注”的计算可分为以下三...
📅  最后修改于: 2021-06-28 07:38:32        🧑  作者: Mango
先决条件–地址绑定方法地址绑定是程序指令和数据与实际物理内存位置的关联。操作系统中有多种类型的地址绑定。地址绑定有3种类型:编译时地址绑定加载时间地址绑定执行时间地址绑定在这里,我们比较编译时间和加载时间地址绑定,如下所示。编译时地址绑定:如果编译器负责执行地址绑定,则称为编译时地址绑定。这种类型的地址绑定将在将程序加载到内存之前完成。编译器需要与操作系统内存管理器进行交互,以执行编译时地址绑定。...
📅  最后修改于: 2021-06-28 07:39:13        🧑  作者: Mango
GATE CS考试中提出了以下问题。1.自上而下的解析器在解析输入字符串使用以下哪些派生?假定以从左到右的顺序扫描输入(GATE CS 2000)。(a)最左派生(b)反向追溯最左边的推导(c)最右派生(d)反向追溯最右边的推导答案(一)自上而下的解析(LL)在自上而下的解析中,我们仅从开始符号开始,然后将不同作品的右侧与第一个输入内容进行比较,以查看应使用哪个作品。自上而下的解析器称为LL解析器...
📅  最后修改于: 2021-06-28 07:39:32        🧑  作者: Mango
问题:编写Lex程序以检查年份是否为is年。解释:Lex是一个生成词法分析器的计算机程序,由Mike Lesk和Eric Schmidt编写。 Lex读取指定词法分析器的输入流,并输出以C编程语言实现词法分析器的源代码。注意:Le年是可以被400整除或可以被4整除而不能被100整除的年份。因此2016、2020等是are年,而2017和2019则不能。例子:执行:输出:...
📅  最后修改于: 2021-06-28 07:39:52        🧑  作者: Mango
在本文中,我们将介绍语法定向翻译的应用程序,在该应用程序中,我们还将看到真实的示例以及如何使用这些应用程序解决问题。让我们一一讨论。先决条件:语法定向翻译简介语法定向翻译:它用于语义分析,而SDT基本上用于构造具有语法和语义动作的解析树。在语法中,需要先确定谁具有最高的优先级,而在语义动作中,将决定由语法完成哪种类型的动作。例子 :语法定向翻译的应用:SDT用于执行算术表达式。从infix转换为p...
📅  最后修改于: 2021-06-28 07:40:20        🧑  作者: Mango
可行前缀是正确句型形式的前缀,该前缀不能继续超过该特定句型形式的最右边句柄的右端。显然,这意味着可行的前缀在其最右端具有句柄。并非所有正确句子形式的前缀都可以出现在shift reduce解析器的堆栈中。可以在以下示例的帮助下进行显示。例子 –自下而上的解析器给出反向最右派生,因此在上面的示例中,如果我们在反向最右派生过程中得到字符串(E)+ id,则将执行以下操作:Operation perfo...
📅  最后修改于: 2021-06-28 07:40:48        🧑  作者: Mango
编译器是将以高级语言(源语言)编写的程序转换为低级语言(对象/目标/机器语言)的软件。在计算机“ A”上运行并为另一台计算机“ B”生成代码的交叉编译器。它能够为运行编译器的平台以外的平台创建代码。源到源编译器或Transcompiler或Transpiler是将以一种编程语言编写的源代码转换为另一种编程语言的源代码的编译器。语言处理系统(使用编译器)–我们知道计算机是软件和硬件的逻辑组合。硬件知...