编译器词法分析
① 典型的编译器可以划分成几个逻辑阶段
这是我们今天的作业,
典型的编译器可以划分成七个主要的逻辑阶段,分别是词法分析器、语法分析器、语义分析器、中间代码生成器、独立于机器的代码优化器、代码生成器、依赖于机器的代码优化器。各阶段的主要功能:
(1)词法分析器:词法分析阅读构成源程序的字符流,按编程语言的词法规则把它们组成词法记号流。
(2)语法分析器:按编程语言的语法规则检查词法分析输出的记号流是否符合这些规则,并依据这些规则所体现出的该语言的各种语言构造的层次性,用各记号的第一元建成一种树形的中间表示,这个中间表示用抽象语法的方式描绘了该记号流的语法情况。
(3)语义分析器:使用语法树和符号表中的信息,依据语言定义来检查源程序的语义一致性,以保证程序各部分能有意义地结合在一起。它还收集类型信息,把它们保存在符号表或语法树中。
(4)中间代码生成器:为源程序产生更低级的显示中间表示,可以认为这种中间表示是一种抽象机的程序。
(5)独立于机器的代码优化器:试图改进中间代码,以便产生较好的目标代码。通常,较好是指执行较快,但也可能是其他目标,如目标代码较短或目标代码执行时能耗较低。
(6)代码生成器:取源程序的一种中间表示作为输入并把它映射到一种目标语言。如果目标语言是机器代码,则需要为源程序所用的变量选择寄存器或内存单元,然后把中间指令序列翻译为完成同样任务的机器指令序列。
(7)依赖于机器的代码优化器:试图改进目标机器代码,以便产生较好的目标机器代码。
② 不同平台上的编译器在词法分析上有什么不同要详细答案答对加分~~~
编译器分前端和后端 界限就是中腔袜孙间代码
在所有的软硬件平台 前端实现都一样 都生成同一样的中间代码
但在不同的软硬件平台 后端实现不一样 不伍链同软件平台 如操作系统的可执行格式就不一样
不同硬件平台 后端也不一样 根据不同的CPU框架和指令系统 支持的寻址方式 会生成不的机器代码
同一平台不同的厂商的编译器 所好搏生成的中间代码和机器代码 都不同
至于不同的厂商编译器的词法分析 语法分析 语义翻译的算法大致相同 具体实现有差异
③ 词法分析器是编译器中扫描什么的部分
词法分析器是编译器中扫描字符和单词的部分。
通常,可采用二元式来表示一个单词符号的内部编码,其中:class为一整数码,用于表示该单词的类别;value则是该单词之值(如变量名在符号表中序号,常数的二进制表示,以及运算符和分隔符的编码等等)。
在分析时
一是把词法分析器当成语法分析的一部分,另一种是把词法分析器当成编译程序的独立部分。在前一种情况下,词法分析器不断地被语法分析器调用,每调用一次词法分析器将从源程序的字符序列拼出一个单词,并将其Token值返回给语法分析器。后一种情况则不同,词法分析器不是被语法分析器不断地调用,而是一次扫描全部单词完成编译器的独立一遍任务。
④ 编译器笔记6-词法分析-有穷自动机
有穷自动机(Finite Automata,FA)由两位神经物理学MeCuloch和Pitts于1948年首先提出,是对 一类处理系统建立的数学模型。这类系统具有一系列离散的输入输出信息和有穷数目的内部状态(状态:概括了对过去输入信息处理的状况)。
系统只需要根据当前所处的状态 和 当前面临的输入信息就可以决定系统的后继行为。每当系统处理了当前的输入后,系统的内部 状态也将发生改变。
电梯控制装置
输入:顾客的乘梯需求(所要到达的层号)
状态:电梯所处的层数+
电梯控制装置并不需要记住先前全部的服务要
求,只需要知道电梯当前所处的状态以及还没
有满足的所有服务请求。
输入带 (input tape) :用来存放输入符号串。
读头 (head) :从左向右逐个读取输入符号,不能修改(只读)、不能往返移动。
有穷控制器 ( finite control ) :具有有穷个状态数,根据当前的
状态和当前输入符号控制转入 下一状态。
确定的FA (Deterministic finite automata, DFA)
非确定的FA (Nondeterministic finite automata, NFA)
M = (S,Σ,δ,s0,F)
例:一个DFA
M = (S,Σ ,δ,s0,F)
M = (S,Σ,δ,s0,F)
例:一个NFA
M = (S,Σ,δ,s0,F)
对任何非确定的有穷自动机N,存在定义同一语言的确定的有穷自动机D。对任何确定的有穷自动机D,存在定义同一语言的非确定的有穷自动机N。
DFA和NFA可以识别相同的语言
M = (S,Σ,δ,s0,F)
从正则表达式到NFA相对直接到DFA比较简单,再从NFA转到DFA。
例 r=(a|b)* abb 对应的NFA
与NFA等价的DFA的每个状态都是NFA状态的一个子集
move(T,a)获得的是一个状态集合U,ε-closure(move(T,a))即为ε-closure(U)对应上表的第二个操作。所以理解上述函数关键是理解closure(T),该操作其实就是求得一个状态集合只通过ε转换得到的另外一个集合。
⑤ 编译器的组成及各部分的功能及作用
1. 词法分析 词法分析器根据词法规则识别出源程序中的各个记号(token),每个记号代表一类单词(lexeme)。源程序中常见的记号可以归为几大类:关键字、标识符、字面量和特殊符号。词法分析器的输入是源程序,输出是识别的记号流。词法分析器的任务是把源文件的字符流转换成记号流。本质上它查看连续的字符然后把它们识别为“单词”。 2. 语法分析 语法分析器根据语法规则识别出记号流中的结构(短语、句子),并构造一棵能够正确反映该结构的语法树。 3. 语义分析 语义分析器根据语义规则对语法树中的语法单元进行静态语义检查,如果类型检查和转换等,其目的在于保证语法正确的结构在语义上也是合法的。 4. 中间代码生成 中间代码生成器根据语义分析器的输出生成中间代码。中间代码可以有若干种形式,它们的共同特征是与具体机器无关。最常用的一种中间代码是三地址码,它的一种实现方式是四元式。三地址码的优点是便于阅读、便于优化。 5. 中间代码优化 优化是编译器的一个重要组成部分,由于编译器将源程序翻译成中间代码的工作是机械的、按固定模式进行的,因此,生成的中间代码往往在时间和空间上有很大浪费。当需要生成高效目标代码时,就必须进行优化。 6. 目标代码生成 目标代码生成是编译器的最后一个阶段。在生成目标代码时要考虑以下几个问题:计算机的系统结构、指令系统、寄存器的分配以及内存的组织等。编译器生成的目标程序代码可以有多种形式:汇编语言、可重定位二进制代码、内存形式。 7 符号表管理 符号表的作用是记录源程序中符号的必要信息,并加以合理组织,从而在编译器的各个阶段能对它们进行快速、准确的查找和操作。符号表中的某些内容甚至要保留到程序的运行阶段。 8 出错处理用户编写的源程序中往往会有一些错误,可分为静态错误和动态错误两类。所谓动态错误,是指源程序中的逻辑错误,它们发生在程序运行的时候,也被称作动态语义错误,如变量取值为零时作为除数,数组元素引用时下标出界等。静态错误又可分为语法错误和静态语义错误。语法错误是指有关语言结构上的错误,如单词拼写错、表达式中缺少操作数、begin和end不匹配等。静态语义错误是指分析源程序时可以发现的语言意义上的错误,如加法的两个操作数中一个是整型变量名,而另一个是数组名等。
⑥ 编译原理中的词法分析器的输入与输出是什么
编译原理中的词法分析器的输入是源程序,输出是识别的记号流。
词法分析器编制一个读单词的程序,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符和分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误部分继续显示)。
(6)编译器词法分析扩展阅读
词法分析器的作用:
1、与符号表进行交互,存储和读取符号表中的标识符的信息。
2、读入源程序的输入字符,将他们组成词素,生成并输出一个词法单元序列,每个词法单元序列对应一个于一个词素。
3、过滤掉程序中的注释和空白。
4、将编译器生成的错误消息与源程序的位置联系起。
⑦ 词法分析器是编译器中扫描什么的部分
词法分析器是编译器中扫描什字符和单词的部分,词法分析是计算机科学中将字符序列转换为单词序列的过程。进行词法分析的程序或者函数叫作词法分析器,也叫扫描器。一般以函数的形式存在,供语法分析器调用。
在计算机科学和语言学中,语法分析是根据某种给定的形式文橡胡法对由单词序列构成的输入文本进行分析并确定其语法结构的一种过程旅念。通常是作为编译器或解释器的组件出现的,它的作用是进行语法检查、并构建由输入的单词组成的数据结构。语法分析器通常使用一个独立的拆如困词法分析器从输入字符流中分离出一个个的“单词”,并将单词流作为其输入。
⑧ 一般设计编译器要将词法分析和语法分析分开的原因是什么
简单性——词法分析技术不如语法分析技术技术复杂,分开之后词法分析过程更简单。(这里还有一些意思差不多的话)
效率——词法分析占用的时间是整个编译时间的一大部分,所以将它们分开有利于优化词法分析,而提高编译效率
可移植性——词法分析通常平台相关,语法分析器可以是平台无关的。分开了对移植有利。
(引自《程序设计语言概念》(第9版) Sebesta着)
⑨ 什么是词法分析
词法分析是计算机科学中将字符序列转换为单词(Token)序列的过程。
词法分析(英语:lexical analysis)是计算机科学中将字符序列转换为单词(Token)序列的过程。进行词法分析的程序或者函数叫作词法分析器(Lexical analyzer,简称Lexer),也叫扫描器(Scanner)。
词法分析器一般以函数的形式存在,供语法分析器调用。完成词法分析任务的程序称为词法分析程序或词法分析器或扫描器绝陪亩。完成词法分析任务并森的程序称为词法分析程序或词法分析器或扫描器。
词法分析程序:
1、只要不修改接口,则词法分析器所作的修改不会影响整个编译器,且词法分析器易于维护。
2、整个编译器结构简捷、清晰。
3、可以采用有效的方法和工具进行处理。
⑩ 把编译的过程划分为词法分析和语法分析的原因
将编译器的工作过程划分为词法分析,语义分析,中间代码生成,代码优化和目标代码生成时,语法分析阶段的输入是( 记号流 )若程序中的括号不配对,则会在( 语法分析 )阶段检查出错误。