![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编译原理
文章平均质量分 97
连理o
负优化砖家
展开
-
编译课设 (词法分析+LR1语法分析+语法制导翻译(四元式生成))
目录Task词法分析器Task源语言定义PL/0 语言 或 自定义语言(如 C-子集)分析部分 (外加 错误处理 + 符号表)词法分析器语法分析器语义分析综合部分中间代码(如:四元式)生成器 (可自己定义中间代码)中间代码的解释程序 (选做)由中间代码生成目标代码或省略“中间代码生成”直接生成可运行的目标代码 (选做)设计界面词法分析器编制一个能够分析数字(整数)、标识符、主要运算符和主要关键字的词法分析程序有能力的同学 可适当扩充语言定义如:增原创 2021-01-15 18:38:38 · 4753 阅读 · 11 评论 -
编译原理:引论(一):语言处理器、编译器的结构
本文为《编译原理》(龙书) 的读书笔记 (1.1~1.3)目录语言处理器编译器、解释器语言处理系统一个编译器的结构词法分析语法分析语义分析中间代码生成代码优化代码生成符号表管理将多个步骤组合成趟编译器构造工具语言处理器编译器、解释器简单地说,一个编译器就是一个程序,它可以把源语言编写的程序翻译为一个等价的、用目标语言编写的程序。如果目标程序是一个可执行的机器语言程序,那么它就可以被用户调用,处理输入并产生输出编译器的重要任务之一是报告它在翻译过程中发现的源程序中的错误解释器(interpr原创 2020-09-14 20:56:04 · 527 阅读 · 0 评论 -
编译原理:引论(三):程序设计语言基础
本文为《编译原理》(龙书) 的读书笔记 (1.6)目录程序设计语言基础静态和动态的区别名字和标识符动态作用域别名程序设计语言基础静态和动态的区别在为一个语言设计一个编译器时,我们所面对的最重要的问题之一是编译器能够对一个程序做出哪些判定如果一个语言使用的策略支持编译器静态决定某个问题,那么我们说这个语言使用了一个静态(static)策略,或者说这个问题可以在编译时刻(compile time)决定一个只允许在运行程序的对候做出决定的策略被称为动态策略(dynamic policy) , 或者被原创 2020-09-17 19:39:12 · 172 阅读 · 0 评论 -
文法和语言
目录文法的引入文法的EBNF 表示字母表和符号串字母表符号串符号串及其集合的运算文法和语言的形式定义推导句型、句子的定义(文法生成的)语言的定义递归规则与递归文法文法和语言分类0型文法 (规则不受限制的文法)1型文法 (上下文有关文法, Context-Sensitive-Grammar, CSG)2型文法 (上下文无关文法, Context-Free-Grammars, CFG )3型文法(正则文法,Regular Grammar,RG)上下文无关文法及其语法树对实用文法的限制与扩充文法的引入用一组数原创 2020-10-02 15:26:14 · 2743 阅读 · 0 评论 -
词法分析
目录词法分析程序的设计词法分析程序 / 扫描器 的功能单词的词类和属性扫描器的接口设计扫描器主要操作正则表达式 RE正规表达式与正规集正规文法和正规式正则文法构造正则式正则式构造正则文法有穷状态自动机 FAFAFA (finite automata)有穷自动机的三种表示形式FAFAFA 与正则文法的转化编写词法分析程序有穷自动机及其与正则文法的等价性有穷自动机的形式化定义DFADFADFA 的仿真算法(伪代码描述)NFANFANFA 的确定化算法(不带 εεε 转换)ε—NFAε—NFAε—NFA(带有空转原创 2020-10-13 15:19:18 · 329 阅读 · 0 评论 -
语法分析器概述
本文参考《龙书》目录语法分析器语法错误的处理错误恢复策略恐慌模式的恢复短语层次的恢复错误产生式语法分析器在设计语言时,每种程序设计语言都有一组精确的规则来描述良构 (well-formed) 程序的语法结构比如,在C语言中,一个程序由多个函数组成, 一个函数由声明和语句组成, 一个语句由表达式组成…程序设计语言构造的语法可以使用 上下文无关文法(CFG) 或者 BNF 表示法来描述,属于上下文有关的语法特性在语义分析阶段检查任何一个歧义文法不存在与其对应的语法分析器,只有文法是非歧义的,原创 2020-12-19 19:20:58 · 3369 阅读 · 1 评论 -
自顶向下语法分析方法
目录语法分析器的作用语法分析要点2 两类语法分析技术自底向上分析自顶向下分析带回溯的自顶向下语法分析上下文无关文法的特性LL分析法(预测分析法)递归子程序语法分析器的作用根据词法分析器提供的单词流以及程序语言的语法规则,在词法分析输出的单词符号串中识别出各类语法成分,同时进行语法检查,为语法正确的输入构造分析树(或语法树)检查输入中的语法错误,并调用出错处理器进行适当处理语法分析是编译过程的核心部分执行语法分析任务的程序叫语法分析程序或语法分析器语法分析要点语法分析是以上下文无关原创 2020-10-30 08:34:03 · 3095 阅读 · 2 评论 -
自底向上优先分析法
本文参考《编译原理(第三版)》目录自底向上优先分析概述**简单优先分析法算符优先分析法算符优先分析法概述直观算符优先分析法算符优先文法的定义算符优先关系表的构造算符优先分析算法算符优先分析法的局限LR 分析LR 分析器概述自底向上优先分析概述自底向上分析从字符串归约到开始符号 (子孙节点收到根节点)自底向上分析的关键:如何精确定义可归约串并识别 (在规范规约中,可归约串由句柄进行刻画)。对可归约串的不同定义形成不同的自下而上分析方法:规范归约分析中,用句柄来刻画可归约串 (LR 分析,原创 2020-12-10 09:22:03 · 1409 阅读 · 2 评论 -
语法制导翻译和中间代码生成
本文参考《编译原理(第三版)》目录语义分析概述语义分析任务语法制导翻译属性文法综合属性继承属性语义分析概述编程语言的语法和语义之间并没有明确界限,语义可完成CFG无法描述的特性如: 标识符先声明后引用的语法规定,可用简单的抽象语言说明:L={WcW∣W∈(a∣b)∗}L=\{WcW|W∈(a|b)^*\}L={WcW∣W∈(a∣b)∗},这不是一个上下文无关语言,无法用前面章节介绍的语法分析方法来处理再如:L={anbmcndm∣n≥0,m≥0}L=\{a^nb^mc^nd^m|n≥0,m≥0原创 2020-12-17 15:19:06 · 1870 阅读 · 1 评论 -
符号表
目录符号表概述符号表的组织符号表的操作名字的作用范围栈式符号表符号表概述符号表的作用:保存各类标识符的属性检查语义的正确性:上下文敏感成分的分析实质上是语法分析的内容。但我们的语法分析是以上下文无关文法为基础的,没有考虑上下文敏感成分的处理,所以必须在语义分析时加以考虑;属于上下文敏感的语法规定包括:标识符通常先定义后使用,但在同一个块中,不应重复定义实参表中的实参个数与类型必须与相应形参表中的形参个数与类型一致表达式中运算对象的类型必须与运算符相容作为目标代码生成阶段地址分配的依据原创 2020-12-21 22:08:00 · 6869 阅读 · 8 评论 -
程序运行时的存储组织及管理
目录程序运行时的存储组织及管理概述静态存储分配临时变量的地址分配简单栈式动态存储程序运行时的存储组织及管理概述在生成目标代码之前,需要对变量或形参进行相对地址的分配(分配的结果存入符号表中),以便生成具有变址访问的目标代码例如:ADD AX, X[sp] 其中XXX代表偏移量,spspsp 代表数据区起始地址。该目标程序在运行时进行绝对地址的分配程序运行时的存储区程序运行时,操作系统将为程序分配一块存储区,用于被编译过的程序的运行从用途上看,这块空间可分为以下几个部分:目标程序区:原创 2020-12-22 14:38:37 · 1867 阅读 · 0 评论