当前位置: 首页 > news >正文

编译原理基础概念

一、什么是编译程序


编译程序是一种程序,能够将某一种高级语言编写的源程序改造成另一种低级语言编写的目标程序,他们在逻辑上等价、完成相同的工作

二、编译阶段


1、当目标程序是机器语言时,编译阶段:(1)编译阶段、(2)、执行阶段

  1. 当目标程序是汇编语言时,编译阶段:

(1)编译阶段 (2)汇编阶段 (3)执行阶段

三、编译的两种方式


1、编译方式:

此方式特点:书写源程序的高级语言独立于机器

2、解释方式:

四、编译过程的步骤


Example1

I wish you success

  1. 词法分析 :识别出句子中的每一个字符串

  1. 语法分析:主 谓 宾 间宾

  1. 语义分析:分析句子的含义

  1. 中间代码生成:用一种中间语言或内部形式表示的结果

  1. 代码优化:修饰工作

  1. 目标代码生成:将中间代码翻译成目标程序

  1. 词法分析


输入源程序,对组成源程序的字符串从左到右进行扫描,并根据语言的(编写程序的高级语言)的构词(词法)规则识别分解出一个个具有独立意义的字符串(单词),然后按顺序一一输出单词。

单词:关键字(保留字、基本字),标识符,字符,标点符号。

输入:源程序

输出:单词符号序列

Example2:

分析源程序:main(){}

词法分析后的输出:

  1. 保留字main

  1. {

  1. }

2、语法分析


在词法分析:在词法分析的基础上,根据语言(高级语言)的语法规则(文法规则)分析程序的语法结构,把单词符号串分解成各类语法单位,同时判断各种语法成分在语法结构上的正确性。

语法单位:短语、句子、程序端

输入:单词序列

输出:语法分析后的单词序列

Example3:

分析程序: for i :=1 to 100 do i:=i+1;

经词法分析后的输出:for,i,:=,1,to,100,do,i,:=,+,1;

经过语法分析后为:

3、语义分析


根据语法成分的结构分析其含义

(1)类型审查 如C语言中,*MOD☆

若*为int,则☆必为int,否则报错

(2)类型转化 如:sum:=first + count*10

若count为浮点型,则把10也转换为浮点型

词法规则:单词符号的形成规则(如变量名用大写字母)

语法规定:规定如何从单词符号形成语法单位

4、中间代码生成


用一种中间语言或内部形式表示的结果

5、代码优化


对中间代码进行优化处理,使生成的代码更高效

6、目标代码生成


将中间代码翻译成目标程序

五、编译阶段的组合


编译前端:与源语言有关与目标机无关的部分

编译后端:与目标机有关的部分

遍:对源程序或源程序的中间结果从头到尾扫描一次称为一遍

六、编译程序实现的途径


T型图:将源语言S通过用语言H写的编译器翻译成目标语言T

T型图的两种组合方式

七、自展技术


用“滚雪球”的方式生成编译程序

思想:先用目标机的语言书写源程序的一个子集的编译程序,再用这个子集作为语言,实现源语言的编译程序。

八、自动生成技术


  1. LEX自动生成词法分析工具

  1. YACC自动生成语法分析工具

  1. 编译的编译

http://www.lryc.cn/news/39248.html

相关文章:

  • 蔬菜视觉分拣机器人的设计与实现(RoboWork参赛方案)
  • 【LVGL移植】STM32F1基于STM32CubeMX配置硬件SPI驱动1.8寸TFT ST7735S跑LVGL图形demo
  • 写给20、21级学生的话
  • 功能测试用例多次录制后,我丢掉了selenium,选择龙测AI-TestOps云平台
  • 【C++知识点】C++20 常用新特性总结
  • 数据库体系结构概念--集中式数据库、分布式数据库
  • PyQt5数据库开发2 5.2 QSqlRelationalTableModel
  • 树莓派——智能家居第一步
  • 【Golang】Golang基础入门级教程 -- 0基础安装搭建Go语言开发环境
  • MATLAB | 如何解决实验数据散点图重叠问题(overlap)
  • Kubernetes 一键部署利器:kubeadm
  • [jS 事件循环理解] 主线程 宏任务 微任务 - 执行顺序优先级理解
  • 顺序表和链表的比较
  • Java为什么只能单继承???
  • 数据安全-分类分级 调研分析报告
  • 浏览器对象详解
  • 异步电路后端实现流程(cdc signOff 后端做什么)
  • Linux网络编程实战介绍
  • C++概述 课堂笔记
  • 一文读懂SpringBoot整合Elasticsearch(一)
  • (数论)(枚举)(前缀和)1230. K倍区间
  • 万字带你深入理解 Linux 虚拟内存管理(下)
  • 【iOS】—— JSONModel源码学习
  • 单片机怎么实现真正的多线程?
  • 【LeetCode】剑指 Offer(23)
  • [免费专栏] 汽车威胁狩猎之不应该相信的几个威胁狩猎误区
  • LinuxFTP文件传输服务和DNS域名解析服务
  • 二叉搜索树原理及底层实现
  • python自动化办公(一)
  • LeetCode - 198 打家劫舍