📝 编译器设计教程
153篇技术文档📅  最后修改于: 2021-06-28 07:27:37        🧑  作者: Mango
问题:编写一个Lex程序来搜索文件中的单词。解释:FLEX(快速词法分析器生成器)是一种工具/计算机程序,用于生成Vern Paxson于1987年左右在C中编写的词法分析器(扫描器或词法分析器)。Lex读取指定词法分析器的输入流,并输出在C语言中实现词法分析器的源代码编程语言。函数yylex()是运行规则部分的主要flex函数。例子:方法:为了搜索单词,我将单词存储在名为“ input.txt”...
📅  最后修改于: 2021-06-28 07:27:56        🧑  作者: Mango
给定数字n,任务是使用Lex程序检查给定的n是偶数还是奇数。例子:先决条件:FLEX(快速词法分析器生成器)偶数是可以被2“整除”的整数。这意味着,如果将整数除以2,则不会产生余数,也不会产生0的余数。类似地,奇数是不能被2整除的整数,剩下的1将被保留。下面是上述方法的实现:输出:...
📅  最后修改于: 2021-06-28 07:28:17        🧑  作者: Mango
Çontext˚FREEģrammars(CFG)可以以下两个属性的基础上进行分类:1)根据生成的字符串数。如果CFG生成有限数量的字符串,则CFG为非递归(或语法称为非递归语法)如果CFG可以生成无数个字符串,则该语法被称为递归语法在编译期间,解析器使用语言的语法从源代码中生成解析树(或派生树)。使用的语法必须明确。不得使用歧义语法进行解析。 2)基于派生树的数量。如果只有1个派生树,则CFG是...
📅  最后修改于: 2021-06-28 07:28:38        🧑  作者: Mango
先决条件:设计有限自动机问题:设计一个LEX代码以构造一个接受该语言的DFA:输入“ 0”和“ 1”上所有以“ 11”结尾的字符串。例子:方法:LEX默认为我们提供一个INITIAL状态。因此,为了制作DFA,请将其用作DFA的初始状态。现在我们再定义三个状态A,B和DEAD,如果遇到错误或无效的输入,将使用DEAD状态。当用户输入无效字符,进入DEAD状态并打印消息“ INVALID”,如果输入...
📅  最后修改于: 2021-06-28 07:29:02        🧑  作者: Mango
符号表是重要的数据结构,由编译器创建和维护,以跟踪有关各种实体(例如变量名,对象,函数名,接口等)的出现的信息。由编译器在内部收集的信息综合阶段使用分析阶段中的符号表来生成目标代码。符号表的不同实现之间的比较:1.数组(排序):插入时间–插入元素时,必须进行遍历才能将元素向右移动。因此,这需要O(n)时间。查找时间–在查找时,可以使用二进制搜索来查找元素。因此,这需要O(log n)时间。2.链表...
📅  最后修改于: 2021-06-28 07:29:33        🧑  作者: Mango
先决条件–中级代码生成三地址代码是一种易于生成且可以轻松转换为机器代码的中间代码类型,它最多使用三个地址和一个运算符来表示一个表达式,并将每条指令计算出的值存储在临时变量中由编译器生成。编译器决定由三个地址代码给定的操作顺序。一般代表–其中a,b或c代表名称,常量或编译器生成的临时值之类的操作数,而op代表运算符示例1:将表达式a * –(b + c)转换为三个地址代码。示例2:为以下代码编写三个...
📅  最后修改于: 2021-06-28 07:30:13        🧑  作者: Mango
语法表示自然语言对话的句法规则。但是在形式语言理论中,语法被定义为一组可以生成字符串的规则。可以从语法生成的所有字符串的集合称为语法语言。上下文无关语法:给我们一个上下文无关语法G =(V,X,R,S)和一个字符串w,其中:V是变量或非终结符号的有限集合,X是一组有限的终端符号,R是一组有限的规则,S是开始符号,是V的不同元素,并且假定V和X是不交集。成员资格问题定义为:语法G生成语言L(G)。给...
📅  最后修改于: 2021-06-28 07:30:32        🧑  作者: Mango
问题:编写一个Lex程序来检查有效的手机号码。解释:FLEX(快速词法分析器生成器)是一种工具/计算机程序,用于生成Vern Paxson于1987年左右在C中编写的词法分析器(扫描器或词法分析器)。Lex读取指定词法分析器的输入流,并输出在C语言中实现词法分析器的源代码编程语言。函数yylex()是运行规则部分的主要flex函数。例子:执行:输出:...
📅  最后修改于: 2021-06-28 07:30:51        🧑  作者: Mango
Lex是一个生成词法分析器的计算机程序,由Mike Lesk和Eric Schmidt编写。 Lex读取指定词法分析器的输入流,并输出以C编程语言实现词法分析器的源代码。说明:完美数,一个等于其适当除数之和的正整数,例如:6 = 1 + 2 + 3。例子:执行:输出:想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。...
📅  最后修改于: 2021-06-28 07:31:13        🧑  作者: Mango
在本文中,我们将介绍词法分析器的工作原理,还将介绍词法分析器的基本体系结构。让我们一一讨论。先决条件–词法分析器简介词法分析器:这是编译器的第一阶段,称为“扫描程序”(它正在扫描程序)。词法分析器会将程序划分为一些有意义的字符串,这些字符串称为标记。令牌类型如下:识别码关键词操作员常数特殊符号(@,$,#)上面是令牌的术语,它是在Lexical Analyzer中工作的关键组件。现在,在示例的帮助...
📅  最后修改于: 2021-06-28 07:31:50        🧑  作者: Mango
给定字符串S,任务是设计确定性有限自动机(DFA)以接受语言L = C(A + B)+。如果DFA接受了给定的字符串,则打印“是”。否则,打印“否”。例子:Input:S = “CABABABAB”Output:YesExplanation:The given string is of the form C(A + B)+ as the first character is C and it is...
📅  最后修改于: 2021-06-28 07:32:11        🧑  作者: Mango
在本文中,我们将介绍自下而上的解析器的工作,并了解如何获取输入并对其进行解析,并介绍自下而上的解析器的一些基础知识。前提条件–解析自下而上的解析器:它将从字符串开始,然后继续开始。在自下而上的解析器中,识别正确的句柄(子字符串)始终很困难。它将按照相反的顺序遵循最右边的推导。笔记 :在自下而上的解析器中,没有变量可以解释为什么没有最底端的任何派生,但是却具有相反的顺序,当您拥有最右边的派生时,它看...
📅  最后修改于: 2021-06-28 07:32:31        🧑  作者: Mango
1.编译器:它是一种翻译器,接受输入(即高级语言),并产生低级语言(即机器或汇编语言)的输出。编译器比汇编器更智能,它可以检查各种限制,范围,错误等。但是它的程序运行时间更多,并且占用了很大一部分内存。它的速度很慢,因为编译器会遍历整个程序,然后将整个程序转换为机器代码。图–编译器进程2.口译员:解释器是将程序设计语言翻译成可理解的语言的程序。 –一次仅翻译该程序的一条语句。口译员通常比编译器小。...
📅  最后修改于: 2021-06-28 07:33:13        🧑  作者: Mango
前提条件–解析|设置2(自下而上或Shift减少解析器)Shift Reduce解析器尝试以与自底向上解析相同的方式来构建解析,即,解析树是从叶子(底部)到根(上)构建的。移位减少解析器的一种更通用的形式是LR解析器。该解析器需要一些数据结构,即用于存储输入字符串的输入缓冲区。用于存储和访问生产规则的堆栈。基本操作–移位:这涉及将符号从输入缓冲区移到堆栈上。减少:如果手柄出现在堆栈顶部,则通过使用...
📅  最后修改于: 2021-06-28 07:33:31        🧑  作者: Mango
高级语言和低级语言都是编程语言的类型。高级语言和低级语言之间的主要区别在于,程序员可以通过机器比较轻松地理解或解释或编译高级语言。另一方面,与人类相比,机器可以轻松理解低级语言。高级语言的示例是C,C++, Java, Python等。让我们看看高级语言和低级语言之间的区别:S.NOHigh Level LanguageLow Level Language1.It is programmer fr...