📝 编译器设计教程

153篇技术文档
  代码生成器设计中的问题

📅  最后修改于: 2021-06-28 06:44:28        🧑  作者: Mango

代码生成器将源代码的中间表示形式转换为易于由机器执行的形式。代码生成器应生成正确的代码。代码生成器的设计应以易于实现,测试和维护的方式进行。在代码生成阶段会出现以下问题:输入到代码生成器–代码生成器的输入是前端生成的中间代码,以及符号表中的信息,该信息确定中间表中名称表示的数据对象的运行时地址。中间代码可能主要以四元组,三元组,间接三元组,后缀表示法,语法树,DAG等表示。代码生成阶段仅在假设输入...

  口译员简介

📅  最后修改于: 2021-06-28 06:44:53        🧑  作者: Mango

先决条件–汇编器,编译器和解释器所有高级语言都需要转换为机器代码,以便计算机在接受所需的输入后即可理解程序。除了编译器和汇编器之外,用于将高级指令逐行转换为机器级语言的软件称为INTERPRETER。如果在任何行上发现错误,则执行将停止,直到更正为止。这种纠正错误的过程比较容易,因为它会逐行显示错误,但程序需要花费更多时间才能成功执行。口译员于1952年首次用于简化当时计算机范围内的编程。它将源代...

  Lex程序检查输入数字是奇数还是偶数

📅  最后修改于: 2021-06-28 06:45:14        🧑  作者: Mango

Lex是一个生成词法分析器的计算机程序。 Lex读取指定词法分析器的输入流,并输出以C编程语言实现词法分析器的源代码。用于执行lex程序的命令为:让我们看一下lex程序,检查输入数字是奇数还是偶数。例子:下面是实现:输出:想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。...

  Lex程序检查数字是否为素数

📅  最后修改于: 2021-06-28 06:45:34        🧑  作者: Mango

问题:编写一个Lex程序以检查数字是否为质数。解释:Lex是一个生成词法分析器的计算机程序,由Mike Lesk和Eric Schmidt编写。 Lex读取指定词法分析器的输入流,并输出以C编程语言实现词法分析器的源代码。定义:质数是大于1的整数,其唯一因子是1及其本身。一个因数是一个整数,可以将其平均分为另一个数。前几个素数是:2、3、5、7、11、13、17、19、23和29。例子:执行:输出...

  TOC中的运算符语法和优先级解析器

📅  最后修改于: 2021-06-28 06:46:02        🧑  作者: Mango

用于定义数学运算符符的语法称为运算符语法或运算符优先级语法。这样的语法有一个局限性,即没有任何产品的右侧有一个空的(空产品)或两个相邻的非末尾。例子 –这是一个运算符语法的示例:但是,下面给出的语法不是运算符语法,因为两个非终结点彼此相邻:不过,我们可以将其转换为运算符语法:运算符优先级解析器–运算符优先级解析器是一种自下而上的解析器,用于解释运算符语法。该解析器仅用于运算符语法。除运算符优先级解...

  Lex程序实现一个简单的计算器

📅  最后修改于: 2021-06-28 06:46:22        🧑  作者: Mango

Lex是一个生成词法分析器的计算机程序。 Lex读取指定词法分析器的输入流,并输出以C编程语言实现词法分析器的源代码。用于执行LEX程序的命令是:让我们看一下实现一个简单计算器的LEX程序。例子:下面是实现:输出:想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。...

  地址绑定及其类型

📅  最后修改于: 2021-06-28 06:46:41        🧑  作者: Mango

在本文中,我们将通过一个示例及其地址类型(如编译时间,加载时间和执行时间地址绑定)来介绍地址绑定。让我们一一讨论。地址绑定:程序指令和数据与实际物理存储器位置的关联称为地址绑定。让我们考虑下面给出的以下示例,以便更好地理解。考虑程序P1具有指令集,使得I1,I2,I3,I4和程序计数器值分别是10、20、30、40。地址绑定的类型:地址绑定分为以下三种类型。编译时地址绑定加载时间地址绑定执行时间地...

  用于十进制到二进制转换的Lex程序

📅  最后修改于: 2021-06-28 06:47:09        🧑  作者: Mango

问题:编写一个Lex程序以进行十进制到二进制的转换。解释:FLEX(快速词法分析器生成器)是一种工具/计算机程序,用于生成Vern Paxson于1987年左右在C中编写的词法分析器(扫描器或词法分析器)。Lex读取指定词法分析器的输入流,并输出在C语言中实现词法分析器的源代码编程语言。函数yylex()是运行规则部分的主要flex函数。例子:执行:输出:...

  词法分析导论

📅  最后修改于: 2021-06-28 06:47:33        🧑  作者: Mango

词法分析是编译器的第一阶段,也称为扫描器。它将高级输入程序转换为令牌序列。可以使用确定性有限自动机来实施词法分析。输出是令牌序列,该令牌序列发送到解析器以进行语法分析什么是代币?词汇标记是一系列字符,可以将它们视为编程语言语法中的一个单元。令牌示例:键入令牌(ID,数字,实数…)。标点符号(IF,void,return,…)字母标记(关键字)非令牌示例:注释,预处理器指令,宏,空格,制表符,换行符...

  Flex(快速词法分析器生成器)

📅  最后修改于: 2021-06-28 06:48:08        🧑  作者: Mango

FLEX(快速词法分析器生成器)是由Vern Paxson在1987年左右用C编写的用于生成词法分析器(扫描器或词法分析器)的工具/计算机程序。它与Berkeley Yacc解析器生成器或GNU Bison解析器生成器一起使用。 Flex和Bison都比Lex和Yacc更加灵活,并产生更快的代码。Bison从用户提供的输入文件中生成解析器。当函数yylex()提供有.l文件时,它会自动生成该函数,...

  Lex程序可将一个文件的内容复制到另一个文件

📅  最后修改于: 2021-06-28 06:48:30        🧑  作者: Mango

问题:给定一个文本文件作为输入,任务是将给定文件的内容复制到另一个文件。解释:Lex是一个生成词法分析器的计算机程序,由Mike Lesk和Eric Schmidt编写。 Lex读取指定词法分析器的输入流,并输出以C编程语言实现词法分析器的源代码。方法:众所周知,yytext保留了与当前标记匹配的文本。将yytext的值附加到临时字符串。如果一个字符(“\ n”)遇到,写入临时字符串到目标文件中的...

  使用LR解析器解析歧义文法

📅  最后修改于: 2021-06-28 06:48:55        🧑  作者: Mango

LR解析器可用于解析歧义语法。 LR解析器根据语法的某些规则(运算符的优先级和/或关联性)解决歧义语法的解析表中的冲突(移位/减少或减少/减少)。例子:让我们采用以下模棱两可的语法:假设语法的运算符(+和*)的优先级和关联性如下:“ +”和“ *”都保持关联,“ *”的优先级高于“ +”的优先级。如果我们使用LALR(1)解析器,则LR(1)项DFA将为:从LR(1)项DFA中,我们可以看到在状态...

  编译器构建工具

📅  最后修改于: 2021-06-28 06:49:15        🧑  作者: Mango

编译器编写者可以使用一些专用的工具来帮助实现编译器的各个阶段。这些工具有助于创建整个编译器或其各个部分。一些常用的编译器构造工具包括:解析器生成器–它从输入中生成语法分析器(解析器),该语法分析器基于编程语言的语法描述或上下文无关的语法。这是有用的,因为语法分析阶段非常复杂,并且会花费更多的手动和编译时间。示例:PIC,EQM扫描仪发生器–它根据基于语言标记的正则表达式描述从输入中生成词法分析器。...

  编译器中的符号表

📅  最后修改于: 2021-06-28 06:49:42        🧑  作者: Mango

先决条件–编译器的阶段符号表是由编译器创建和维护的重要数据结构,用于跟踪变量的语义,即它存储有关范围的信息和有关名称的绑定信息,有关各种实体实例的信息,例如变量和函数名称,类,对象, 等等。它建立在词法和语法分析阶段。该信息由编译器的分析阶段收集,并由编译器的综合阶段使用以生成代码。编译器使用它来实现编译时间效率。它由编译器的各个阶段使用,如下所示:词法分析:在表中创建新表条目,例如关于令牌的条目...

  Lex程序查找字符串的长度

📅  最后修改于: 2021-06-28 06:50:00        🧑  作者: Mango

问题:编写一个Lex程序来查找字符串的长度解释:FLEX(快速词法分析器生成器)是生成词法分析器的计算机程序,由Mike Lesk和Eric Schmidt编写。 Lex读取指定词法分析器的输入流,并输出以C编程语言实现词法分析器的源代码。例子:执行:输出:想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。...