📝 compiler

64篇技术文档
  学习编译器设计教程

📅  最后修改于: 2020-12-06 06:22:10        🧑  作者: Mango

编译器设计教程《编译器设计指南》提供了编译器的基本概念和高级概念。我们的编译器教程是专为初学者和专业人士而设计的。编译器是一种将高级语言转换为机器语言的翻译器。我们的编译器教程包括编译器的所有主题,例如简介,语法,解析,语法定向翻译,符号表,代码优化,代码生成等。编译器设计索引先决条件在学习Compiler Tutorial之前,您必须具有Basic Compiler的基本知识。听众我们的编译器指...

  编译器简介

📅  最后修改于: 2020-12-06 06:23:01        🧑  作者: Mango

编译器简介编译器是将高级语言转换为机器语言的转换器。高级语言由开发人员编写,并且处理器可以理解机器语言。编译器用于向程序员显示错误。编译器的主要目的是更改用一种语言编写的代码,而不更改程序的含义。当您执行以HLL编程语言编写的程序时,它将执行为两部分。在第一部分中,源程序被编译并翻译成目标程序(低级语言)。在第二部分中,目标程序通过汇编器转换为目标程序。图:编译器中源程序的执行过程...

  编译器流程

📅  最后修改于: 2020-12-06 06:23:54        🧑  作者: Mango

编译阶段编译过程包含各个阶段的顺序。每个阶段以一种表示形式获取源程序,并以另一种表示形式产生输出。每个阶段都从其上一阶段获取输入。编译器分为多个阶段:图:编译阶段词法分析:词法分析器阶段是编译过程的第一阶段。它以源代码作为输入。它一次读取源程序一个字符,并将其转换为有意义的词素。词法分析器以记号的形式表示这些词素。语法分析语法分析是编译过程的第二阶段。它以令牌作为输入,并生成一个解析树作为输出。在...

  编译器遍历源程序

📅  最后修改于: 2020-12-06 06:24:48        🧑  作者: Mango

编译器通行证通过是源程序的完整遍历。编译器有两遍遍历源程序。多遍编译器多遍编译器用于多次处理程序的源代码。在第一遍中,编译器可以读取源程序,对其进行扫描,提取令牌并将结果存储在输出文件中。在第二遍中,编译器可以读取第一遍产生的输出文件,构建语法树并执行语法分析。该阶段的输出是一个包含语法树的文件。在第三遍中,编译器可以读取第二遍生成的输出文件,并检查树是否符合语言规则。语义分析阶段的输出是带注释的...

  引导程序

📅  最后修改于: 2020-12-06 06:31:37        🧑  作者: Mango

自举自举在编译开发中被广泛使用。引导程序用于生成自托管的编译器。自托管编译器是一种可以编译自己的源代码的编译器。Bootstrap编译器用于编译该编译器,然后您可以使用此编译的编译器来编译其他所有文件以及其自身的将来版本。编译器可以用三种语言来表征:源语言目标语言实现语言T图显示了在I中实现的源S,目标T的编译器SCIT。遵循一些步骤为机器A产生新的语言L:1.使用语言“ A”为所需语言L的子集S...

  有限状态机

📅  最后修改于: 2020-12-06 06:32:30        🧑  作者: Mango

有限状态机有限状态机用于识别模式。有限自动机将符号字符串作为输入并相应地更改其状态。在输入中,找到所需符号后,就会发生过渡。在过渡期间,自动机可以移至下一个状态或保持相同状态。FA具有两个状态:接受状态或拒绝状态。当成功处理输入字符串并且自动机达到其最终状态时,它将接受。有限自动机包括以下内容:问:有限状态集过渡函数可以定义为FA具有两种特征:DFA(有限自动机)NDFA(非确定性有限自动机)DF...

  正则表达式

📅  最后修改于: 2020-12-06 06:33:22        🧑  作者: Mango

正则表达式正则表达式是定义字符串的模式序列。它用于表示常规语言。它也用于匹配字符串中的字符组合。字符串搜索算法使用此模式来查找对字符串的操作。在正则表达式中,x *表示x出现零次或多次。它可以生成{e,x,xx,xxx,xxxx,…..}在正则表达式中,x +表示x的一个或多个出现。它可以生成{x,xx,xxx,xxxx,…..}常规语言操作常规语言的各种操作是:联合:如果L和M是两种常规语言,则...

  DFA的优化

📅  最后修改于: 2020-12-06 06:34:16        🧑  作者: Mango

DFA的优化要优化DFA,您必须遵循各个步骤。这些如下:第1步:通过任意一组DFA转换,从初始状态中删除所有无法访问的状态。步骤2:绘制所有状态对的转换表。步骤3:现在将转换表分为两个表T1和T2。 T1包含所有最终状态,T2包含非最终状态。步骤4:从T1查找相似的行,以便:这就是说,找到a和b值相同的两个状态,然后删除其中之一。步骤5:重复步骤3,直到过渡表T1中没有相似的行。步骤6:对表T2也...

  LEX

📅  最后修改于: 2020-12-06 06:35:08        🧑  作者: Mango

雷克斯Lex是一个生成词法分析器的程序。它与YACC解析器生成器一起使用。词法分析器是一个将输入流转换为标记序列的程序。它通过在C程序中实现词法分析器来读取输入流并生成源代码作为输出。Lex的函数如下:首先,词法分析器以Lex语言创建程序lex.1。然后Lex编译器运行lex.1程序并生成一个C程序lex.yy.c。最后,C编译器运行lex.yy.c程序并生成一个目标程序a.out。a.out是词...

  形式语法

📅  最后修改于: 2020-12-06 06:36:00        🧑  作者: Mango

形式语法形式语法是一组规则。它用于识别语言中正确或不正确的令牌字符串。形式语法用G表示。形式语法用于生成字母表上语法上正确的所有可能字符串。形式语法主要用于句法分析阶段(解析),尤其是在编译过程中。形式语法G编写如下:哪里:N描述了一组非终结符号。V描述了一组有限的端子符号。P描述了一组生产规则S是开始符号。例:生产规则:通过这种生产,我们可以生产一些字符串,例如:bab,baab,baaab等。...

  BNF表示法

📅  最后修改于: 2020-12-06 06:36:53        🧑  作者: Mango

BNF表示法BNF代表Backus-Naur Form。它用于编写上下文无关文法的形式表示。它还用于描述编程语言的语法。BNF表示法基本上只是上下文无关语法的一种变体。在BNF中,产品的形式为:其中莱夫特赛德∈(VÑ∪VT,)+和定义∈(VÑ∪VT,)*。在BNF中,左侧包含一个非末端。我们可以用相同的左侧定义多个产品。所有生产用竖线符号“ |”分隔。语法的产生方式如下:在BNF中,我们可以将上述...

  YACC

📅  最后修改于: 2020-12-06 06:37:45        🧑  作者: Mango

青年会YACC代表“另一个编译器”。YACC提供了一种为给定语法生成解析器的工具。YACC是旨在编译LALR(1)语法的程序。它用于产生由LALR(1)语法产生的语言的语法分析器的源代码。YACC的输入是规则或语法,而输出是C程序。以下是有关YACC的一些要点:输入:一个CFG- file.y输出:解析器y.tab.c(yacc)输出文件“ file.output”包含解析表。文件“ file.t...

  上下文无关文法

📅  最后修改于: 2020-12-06 06:38:38        🧑  作者: Mango

上下文无关文法上下文无关文法是一种形式文法,用于以给定的形式语言生成所有可能的字符串。上下文无关文法G可以由四个元组定义为:哪里,G描述语法T描述了一组有限的终端符号。V描述了一组有限的非终端符号P描述了一组生产规则S是开始符号。在CFG中,起始符号用于派生字符串。您可以通过在生产的右侧重复替换非终结符来导出字符串,直到所有非终结符都已被终结符替换为止。例:生产规则:现在检查abbcbba字符串可...

  CFG的功能

📅  最后修改于: 2020-12-06 06:39:29        🧑  作者: Mango

CFG的能力CFG具有各种功能:上下文无关的语法对于描述大多数编程语言很有用。如果正确设计了语法,则可以自动构建有效的解析器。利用关联信息和优先信息的特征,可以为表达式构建合适的语法。上下文无关文法能够描述嵌套结构,例如:平衡的括号,匹配的起始端,对应的if-then-else等等。...

  派生

📅  最后修改于: 2020-12-06 06:40:21        🧑  作者: Mango

推导推导是一系列生产规则。它用于通过这些生产规则获取输入字符串。在解析期间,我们必须做出两个决定。这些如下:我们必须确定要替换的非终端。我们必须确定将替换非终端设备的生产规则。我们有两个选择来决定用生产规则替换哪个非终端。最左边的导数在最左侧的派生中,将扫描输入,并用生产规则从左到右替换输入。因此,在大多数派生语言中,我们从左到右读取输入字符串。例:生产规则:输入:最左边的推导是:最右派生在最右边...