📝 编译器设计教程
153篇技术文档📅  最后修改于: 2021-06-28 07:03:25        🧑  作者: Mango
在本文中,我们将研究各种类型的解析。从GATE的角度来看,它是Compiler中最重要的主题之一。将从GATE问题解决的角度解释各种解析器的工作。先决条件–语法,语法分析树,模棱两可的基本知识。解析器的作用:在语法分析阶段,编译器将根据语言的语法规则验证是否由词法分析器生成的标记被分组。这是由解析器完成的。解析器从词法分析器获取一个令牌字符串,并验证该字符串是否可以作为源语言的语法。它检测并报告任...
📅  最后修改于: 2021-06-28 07:03:45        🧑  作者: Mango
解析中存在两种类型的解析技术,第一种是自上而下的解析,第二种是自下而上的解析。自上而下的解析是一种分析技术,它首先查看语法分析树的最高级别,然后使用语法规则对语法分析树进行处理,而自下而上的语法分析是一种首先查看语法分析的最低级别的语法分析技术树,并通过使用语法规则来构成分析树。存在一些区别以区分这两种解析技术,如下所示:S.NoTop Down ParsingBottom Up Parsing1...
📅  最后修改于: 2021-06-28 07:04:08        🧑  作者: Mango
先决条件–上下文无关文法,歧义和解析器的分类左递归:形式的语法,它称为左递归,其中S是任何非终结点,而a是b,是任何终结点集。左递归问题:如果任何语法中都存在左递归,则在编译的语法分析部分中进行语法分析时,语法有可能会创建无限循环。这是因为在语法的每次生成时,S都会在不检查任何条件的情况下生成另一个S。删除左递归的算法示例:假设我们有一个包含左递归的语法:检查给定的语法是否包含左递归(如果存在),...
📅  最后修改于: 2021-06-28 07:04:28        🧑  作者: Mango
1.编译器:顾名思义,编译器是用于将代码转换为机器指令的过程。它只是将源代码从高级编程语言转换为低级机器语言。它基本上是一个复杂的软件,可以同时执行代码优化和代码生成。它还使最终代码更有效,并且针对执行时间和存储空间进行了优化。2.调试器:顾名思义,调试器是一个用于从代码中删除错误的过程。它仅允许测试和调试其他程序。有时,它还提供两种操作模式,即完全和部分仿真。它用于防止软件或系统的错误操作。它还...
📅  最后修改于: 2021-06-28 07:04:48        🧑  作者: Mango
问题:编写Lex程序以检查日期是否有效。解释:Flex(快速词法分析器生成器)是由Vern Paxson在1987年左右用C编写的用于生成词法分析器(扫描器或词法分析器)的工具/计算机程序。Lex读取指定词法分析器的输入流,并输出在C语言中实现词法分析器的源代码编程语言。函数yylex()是运行规则部分的主要flex函数。注意:日期格式为DD / MM / YYYY。例子:执行:输出:...
📅  最后修改于: 2021-06-28 07:05:14        🧑  作者: Mango
我们已经知道编译器设计的所有阶段,现在知道编译器合格。编译器遍历是指遍历整个程序的编译器遍历。编译器遍历有两种类型:单遍编译器和两遍编译器或多遍编译器。这些解释如下。1.单遍编译器:如果我们结合或组所有已知的单通编译器在单一模块中的编译器设计的阶段。在上图中,所有6个阶段都分组在一个模块中,单遍编译器的一些要点如下:单遍/单遍编译器是一种编译器,它可以准确地通过每个编译单元的一部分。单遍编译器比多...
📅  最后修改于: 2021-06-28 07:05:37        🧑  作者: Mango
先决条件–编译器设计简介链接器是系统中的一个程序,有助于将程序的目标模块链接到单个目标文件中。它执行链接过程。链接器也称为链接编辑器。链接是将一段代码和数据收集并维护到一个文件中的过程。链接器还将特定模块链接到系统库中。它以来自汇编器的对象模块作为输入,并形成一个可执行文件作为加载器的输出。当源代码翻译成机器代码时,在编译时都执行链接;在加载程序将程序加载到内存时,则在加载时执行链接。链接是在编译...
📅  最后修改于: 2021-06-28 07:05:58        🧑  作者: Mango
Lex是一个生成词法分析器的计算机程序。 Lex读取指定词法分析器的输入流,并输出以C编程语言实现词法分析器的源代码。用于执行lex程序的命令为:让我们看一下lex程序来检查有效的电子邮件。例子:下面是实现:输出:想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。...
📅  最后修改于: 2021-06-28 07:06:17        🧑  作者: Mango
Lex是一个生成词法分析器的计算机程序。 Lex读取指定词法分析器的输入流,并输出以C编程语言实现词法分析器的源代码。用于执行lex程序的命令为:让我们看看lex程序接受以元音开头的字符串。例子:下面是实现:输出:想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。...
📅  最后修改于: 2021-06-28 07:06:40        🧑  作者: Mango
过渡图是一种特殊的语言分析流程图。在过渡图中,流程图的框被绘制为圆圈,并称为状态。状态通过称为边缘的箭头连接。边缘上的标签或粗细表示该状态之后可能出现的输入字符。标识符的转换图如下:标识符读取第一个字母,然后在该字母或数字之后直到下一个输入字符成为标识符定界符的转换图,表示既不是字母也不是数字的字符。为了将过渡图变成一个程序,我们为过渡图的每个状态构造了程序段代码。每个状态的程序段代码如下:状态0...
📅  最后修改于: 2021-06-28 07:07:07        🧑  作者: Mango
在编译的此阶段,将检测用户所犯的所有可能的错误,并以错误消息的形式将其报告给用户。定位错误并将其报告给用户的过程称为“错误处理过程”。错误处理程序的功能侦查正在汇报恢复错误分类编译时错误分为三种类型:-词汇相位错误这些错误是在词法分析阶段检测到的。典型的词汇错误是超出标识符或数字常量的长度。出现非法字符字符串不匹配错误恢复:紧急模式恢复在这种方法中,一次从输入中除去连续的字符,直到找到一组指定的同...
📅  最后修改于: 2021-06-28 07:07:31        🧑  作者: Mango
1.以下代码的输出是什么?(a)垃圾价值(b)20.600000(c)语法错误(d)20.60解释 :联合提供了一种使用相同内存位置的有效方法。 Union的所有成员都使用具有最大空间的相同内存位置。在这里,使用float f。因此,选项(b)是正确的。2.正确的编译顺序是什么?(a)汇编器→编译器→预处理器→链接(b)编译器→Assenbler→预处理器→链接(c)预处理器→编译器→汇编器→链接...
📅  最后修改于: 2021-06-28 07:07:52        🧑  作者: Mango
先决条件–LL(1)解析表的构建,自上而下的解析器的分类解析是确定开始符号是否可以派生程序的过程。如果解析成功,则该程序为有效程序,否则该程序无效。通常有两种类型的解析器:自上而下的解析器:在这种解析技术中,我们将开始符号扩展到整个程序。递归下降和LL解析器是自上而下的解析器。自下而上的解析器:在这种解析技术中,我们减少了整个程序的开始符号。自下而上的解析器是运算符优先级解析器,LR(0)解析器,...
📅  最后修改于: 2021-06-28 07:08:11        🧑  作者: Mango
LL解析器包括递归下降解析器和非递归下降解析器。它的一种使用回溯,而另一种使用解析表。这些是自上而下的解析器。示例:给定的语法是其中S是开始符号,A是非终结符,a,b,c是终结符。输入字符串:abc解析由LL解析器生成的树:LR解析器是自底向上的解析器之一,它使用语法分析表(动态编程)来获取给定字符串的语法树形式的语法树形式。示例:在上面的示例中,解析由LR解析器生成的树:LL和LR解析器之间的区...
📅  最后修改于: 2021-06-28 07:08:37        🧑  作者: Mango
在本文中,我们将讨论LR解析器,并对其进行概述,然后将讨论该算法。另外,我们将讨论解析表和LR解析器的工作图。让我们一一讨论。左心室解析器:LR解析器是一种无上下文语法的自底向上解析器,通常由计算机编程语言编译器和其他相关工具使用。 LR解析器从左到右读取他们的输入,并产生最右边的派生。之所以称为自下而上的解析器,是因为它尝试通过从叶子开始构建来减少顶级语法产生。在实际中,LR解析器是所有确定性解...