编译原理基础知识+笔记(1)

2023-11-11

一、编译原理概述

 1.翻译程序:

    把某一种语言程序(称为源语言程序)等价地转换成另一种语言程序(称为目标语言程序)的程序。

                

 2.编译程序:

   把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编语言或机器语言程序)的程序。又分为:诊断编译程序 ,优化编译程序,交叉编译程序 ,可变目标编译程序。

3.解释程序:

   把源语言写的源程序作为输入,但不产生目标程序,而是边解释边执行源程序本身。

二、编译过程:

词法分析、语法分析、中间代码生成、代码优化(可省略)、目标代码生成。

1.词法分析:

   分析过程:

     依据定义的构词规则(事先定义某个符号/字符串是什么)对输入程序的输入字符串进行扫描分解,并得出相应的符号含义(如特定字符、变量、运算符号等)。

    Eg:

    这里有一个“int a=1;” 的语句,词法分析就是要将这个字符串进行分析,比如他要识别出“int” 是什么,“a”是什么,“=”、“1”、“;”等这些我们输入的单词符号是什么,而他识别的依据就是我们人事先定义好的“单词对应表”(暂且如此称呼),如我将“int”定义为保留字,“=”为赋值运算符则程序运行之后输入int,=等符号程序就可以识别出来。

   词法分析所用描述工具:

      正规式、(确定DFA/不确定NFA)有限自动机。

2.语法分析:

    分析过程:

       在词法分析的基础上依据定义的语言的语法规则将输入的的单词符号串分解、组合成符合定义的语法规则的各类语句单位。(加入了让自己的理解,有点拗口,好好理解理解)。

       Eg:

       比如这里有一个“a=a+1;”的语句,在输入之后词法分析已经分析出了“=”,“a”等单词符号对应的“单词对应表”,这时语法分析过程就去根据定义的语法规则将单词串分解、组合。如将“a=”这个语句分析为一个赋值语句,“a+1”分析为一个算术表达式。

    词法分析所用描述工具:

       上下文无关文法。

3.中间代码生成

        生成过程任务:

         依据语义规则对各类不同语法范畴按语言的语义进行初步翻译,使语言产生与“定义语法表”和“表达式”的对应关系。(生成的结构与定义的"语法表"中的法则一一对应,如优先级、符号含义、常量等的运算规则。)

        中间代码的形式:

        三元式,四元式,逆波兰式,树形结构等。

          eg:

4.代码优化

     优化过程:

         利用程序的等价变换规则,通过对前阶段中间代码的语句进行修改与加工变换,以期在最后阶段产生更高效的目标代码。

5.目标代码生成

     目标任务:

         依赖于硬件系统结构和机器指令的含义,把中间代码变换成特定机器上的目标代码。

     目标代码三种形式:

绝对指令代码: 可直接运行。
可重新定位指令代码: 需要连接装配。
汇编指令代码: 需要进行汇编。

    

三、编译程序结构

    1.编译程序总框

      2.表格与表格管理

           表格的概念:

              表格在程序定义中以名-值对的形式存在,格式为:名字-信息。

   常见的表格:

     符号名表,常数表,标号表,入口名表,过程引用表。

3.出错处理

     任务:

      发现源程序中的错误,把有关错误信息报告给用户。

     常见错误:

语法错误、语义错误。

      4.遍(pass) 

              含义:

                 所谓"遍", 就是对源程序或源程序的中间表示从头到尾扫描,并做相关的处理,生成新的中间形式或目标代码。 阶段与遍是不同的概念。一遍可以由若干阶段组成(扫描一部分就暂停一段时间),一个阶段也可以分若干遍来完成(某一部分重复扫描几次)。

      5.端

          前端:

           主要与源语言有关,包括词法分析、语法分析、语义分析和中间代码生成、符号表的建立,以及相应的错误处理和符号表操作,与机器无关的优化等。

         后端:

           主要与目标机器有关,包括代码优化、目标代码生成,以及相应的错误处理和符号表操作。

 

         把编译程序分为前段和后端的优缺点:  

               优点:减少对内存容量的要求,程序逻辑结构清晰; 优化更充分,有利于移植。

               缺点: 编译程序运行的效率低

四、编译程序与程序设计环境

              (编译器与环境部分不做过多介绍)

1.程序设计环境

编辑程序
编译程序
连接程序
调试工具

2.集成化的程序设计环境

                 Visual Studio 等。

五、编译程序生成 

1.以汇编语言和机器语言为工具优缺点

优点 可以针对具体的机器,充分发挥计算机的系统功能。生成的程序效率高。
缺点 程序难读、难写、易出错、难维护、生产的效率低。

      2. 高级语言为工具书写优缺点

优点 程序易读、易理解、容易维护、生产的效率高。
缺点 难以充分发挥计算机的系统功能,生成的程序效率低。

3. 实现编译程序的主要方法有哪些

主要有转换法、移植法、自展法、自动生成法

     4.编译程序自动产生

              编译程序-编译程序,编译程序书写系统

           EG:

  

小结:

     第一部分的总论与一些概念介绍写完了,接下来就要具体介绍编译过程了,第一次写这种知识型文章,并且自身也在学习中,可能有些错误,望大家多多指教。

    由于要解释某些含义,文中有地方引用了其他作者的定义的概念,如不喜可联系我删除。最后,谢谢大家观看。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编译原理基础知识+笔记(1) 的相关文章

随机推荐

  • docker安装mysql

    1 下载镜像文件 docker pull mysql 5 7 2 创建实例并启动 创建实例并启动 docker run p 3306 3306 name mysql v mydata mysql log var log mysql v my
  • 电脑进入pe时蓝屏_进PE蓝屏的几个原因

    上期小编讲解了windows找不到文件 详细教您windows找不到文件怎么解决 本次正特手机网小编给大家讲解一下进PE蓝屏的几个原因 一进PE就蓝屏 这种情况是不是经常遇到呢 这个究竟是什么原因造成的 经在几十台电脑中测试中 总结了以下几
  • go实现本地文件搜索引擎

    filelist go package main import flag fmt os path filepath strings var ostype windows 获取系统类型 var listfile string 获取文件列表 f
  • Java web 实现页面显示数据库表格

    运行错误显示 ERROR IllegalAccessException for stop method in class org apache tomcat maven plugin tomcat7 run ExtendedTomcat 目
  • 什么是死锁?如何避免和预防死锁。

    死锁指的是两个进程在执行过程中因争夺资源而造成的僵局 当进程处于死锁状态时 他们就不能继续执行 直到外部程序的干预或者自行放弃 预防和避免的措施 1 避免资源独占 尽量避免一个进程获取了某些资源后再次请求其他资源 而应该将所有资源一次性申请
  • linux debug技巧和工具

    linux debug技巧和工具 print 优点 简单 直接 灵活运用二分法思想 缺点 需要重新编译 运行 比较费时 gdb starting the program stop at specified locations stop on
  • Vue部署提高页面访问速度,nginx代理

    文章目录 1 概述 2 步骤 3 预估加载速度对比 vue ui 1 概述 在没有压缩本地js css的文件下 部署线上环境时 访问页面加载极慢 网上搜了一下 果然有相应的解决办法 特此记录一下 还可以用cdn的方式 后面再看 2 步骤 在
  • 【毕业设计】前后端分离——实现登录注册功能

    据说 看我文章时 关注 点赞 收藏 的 帅哥美女们 心情都会不自觉的好起来 前言 作者简介 大家好我是 user from future 意思是 来自未来的用户 寓意着未来的自己一定很棒 个人主页 点我直达 在这里肯定能找到你想要的 专栏介
  • hql连表查询(多表查询)

    hql连表查询的问题 总结了一下 与大家分享 package android com bzjm test import java util List import org hibernate HibernateException impor
  • geforce experience不能登录_火炬之光2居然也要登录NS了?

    完美世界旗下已经倒闭了的Runic Games表示 火炬之光2 和 迷城之光 会登录NS 那么既然Runic Games已经倒闭了 这条消息自然是完美世界自己发出来的 而负责移植 火炬之光2 的是著名的Switch游戏移植大户Panic B
  • File分隔符挺有意思的

    package Test5 import java io File author xlj public class RemoteFile public static void main String args throws Exceptio
  • jmu-python-随机生成密码(一行代码生成题目要求的字符列表)

    jmu python 随机生成密码 题目 答案 初始版 优化版 一行代码生成题目要求的字符列表 总结 题目 答案 初始版 import random x eval input n eval input m eval input str ab
  • python PyQt5 Qt Designer 学习笔记

    转化代码 pyuic5 o untitled py untitled ui cd 目录 main 文件 from PyQt5 QtWidgets import QApplication QMainWindow import sys from
  • 【问题解决】Failed to load module script: Expected a JavaScript module script but the server respond

    全部错误内容 xxx 86eb4fa7 js 1 Failed to load module script Expected a JavaScript module script but the server responded with
  • 分类与回归树(CART)- 机器学习ML

    参考 1 统计学习方法 李航 2 https www cnblogs com en heng p 5035945 html 3 http blog csdn net baimafujinji article details 53269040
  • MindMap: Knowledge Graph Prompting Sparks Graph of Thoughts in Large Language Models

    本文是LLM系列文章 针对 MindMap Knowledge Graph Prompting Sparks Graph of Thoughts in Large Language Models 的翻译 思维导图 大型语言模型中的知识图谱提
  • 深度学习实战15(进阶版)-让机器进行阅读理解+你可以变成出题者提问

    大家好 我是微学AI 今天给大家带来一个机器阅读理解的项目 利用ERNIE的预训练模型进行微调训练 添加自己的数据集进行训练 训练好就可以利用功能进行阅读式信息抽取啦 也可以问机器一些简单的问题进行抽取 今天采用的paddle深度学习框架
  • Mybatis-plus

    1 简介 Mybatis plus是mybatis的增强工具 在mybatis的基础上只做增强不做改变 是为了简化开发和提高效率而生 mybatis plus只作用于单表的增删改查 联表操作还需要mybatis 2 Mybatis plus
  • elasticserach(一)

    文章目录 1 elasticsearch简介 1 1 正向索引和倒排索引 1 2 文档 1 3 索引和映射 1 4 elasticsearch与mysql概念对比 2 部署单点es和kibana 2 1 创建网络 2 2 拉取镜像 2 3
  • 编译原理基础知识+笔记(1)

    一 编译原理概述 1 翻译程序 把某一种语言程序 称为源语言程序 等价地转换成另一种语言程序 称为目标语言程序 的程序 2 编译程序 把某一种高级语言程序等价地转换成另一种低级语言程序 如汇编语言或机器语言程序 的程序 又分为 诊断编译程序