MOOC编译原理说明(1): 编译原理概述和编程语言的定义

电脑杂谈  发布时间:2020-05-20 03:29:41  来源:网络整理

c语言编译环境_c语言 条件编译_程序设计语言:编译原理

编译器是指将高级语言程序等效地转换为另一种低级语言程序(例如汇编语言或机器代码)的程序.

高级语言程序翻译->机器语言程序运行->结果.

编译器可以分为:

诊断编译器(Diagnostic Compiler)-专门用于帮助程序员进行开发和调试,而不关心目标代码的效率.

Optimizing Compiler(优化编译器)-致力于提高目标代码的执行效率,从而可以生成高效的目标代码.

跨编译器-运行编译器的计算机称为主机,运行目标代码的计算机称为目标计算机. 一般来说,主机和目标计算机是同一台计算机. 如果生成的编译器程序目标代码不属于主机程序设计语言:编译原理,则我们将其称为交叉编译器.

可重定目标的编译器-无需重写与机器无关的部分,只要更改了与目标机器相关的部分,就可以为不同的平台生成不同的代码.

使用以源语言编写的源程序作为输入,但未生成目标程序,但在解释时执行了源程序.

与编译器不同,解释器不会生成完整的目标程序文件. (例如python语言)

高级语言程序解释->结果

模拟自然语言翻译:

将英语翻译成中文:

1. 识别红色句子中的单词.

2. 分析句子的语法结构.

3. 根据句子的含义进行初步翻译.

4. 修改翻译.

5. 写最后的翻译.

对应于编译器工作的五个阶段:

1. 词法分析.

2. 语法分析.

c语言编译环境_c语言 条件编译_程序设计语言:编译原理

3. 中间代码生成.

4. 优化.

5. 目标代孕妈妈.

任务: 输入源程序,扫描并分解构成源程序的字符,并识别单词符号.

遵循的原则: 构词规则.

描述工具: 有限的自动机.

任务: 在词法分析的基础上,根据语法规则,将单词符号字符串分解为各种语法单位(语法类别)

要遵循的原则: 语法规则.

描述工具: 无上下文语法.

任务: 根据语言的语义对各种语法单位进行初步翻译.

遵循的原则: 语义规则

描述工具: 属性语法

中间代码: 三元,四元,树程序设计语言:编译原理,...

任务: 转换前一阶段生成的中间代码,以在最后一阶段生成更有效的目标代码.

遵循的原则: 程序的等效转换原理

任务: 在特定计算机上将中间代码转换为目标代码

取决于硬件系统结构和机器指令的含义

三种形式的目标代码:

1. 组装说明代码: 需要组装.

2. 绝对指令代码: 可以直接运行.

程序设计语言:编译原理_c语言 条件编译_c语言编译环境

3. 可重定位的指令代码: 需要链接.

-源程序-》词法分析器-单词符号-》语法分析器-语法单位-“语义分析和中间代码-中间代码(Quad)-”优化段-中间代码(四元)-“目标代码-目标代码-”.

此外,还有符号表管理和错误处理模块.

识别源程序中的错误,并向用户报告相关的错误信息. 这些错误分为语法错误和语义错误.

所谓的“通过”是从头到尾扫描源程序或源程序的中间表示.

阶段和阶段是不同的概念-阶段可以由几个部分组成(词法分析,语法分析,中间代码程序可以被合成和处理一次),阶段可以分为多个阶段来完成(例如: 可以进行多次优化.

与目标机器无关的词法分析,语法分析,语义分析,中间代码生成和优化这些部分称为编译器的前端.

与目标计算机的优化相关的部分和目标代码的生成称为编译器的后端.

这种划分的好处是: 清晰的程序逻辑结构,更加优化,并有利于移植.

优点: 对于特定机器,它可以充分发挥计算机的系统功能;生成的抽象非常高效.

缺点: 程序困难,难以编写,容易出错,难以维护,生产效率低.

优点: 该程序易于阅读,易于维护且生产效率高.

关于如何使用现有的编译器生成自己的编译器

TIM截图20191014201410.png

图:

TIM截图20191014201530.png

关于如何移植:

TIM截图20191014201755.png

TIM截图20191014202048.png

例如LEX: 词法分析程序的.

程序设计语言:编译原理_c语言 条件编译_c语言编译环境

YACC: 语法分析程序.

FORTRAN数值计算

COBOL交易处理

PASCAL结构化编程

LISP功能编程

PROLOG逻辑编程

C系统编程

Smalltalk面向对象编程

Java Internet参考,可移植性

Python解释的动态编程

第一位图灵奖获得者艾伦·J·佩利斯(Alan J. Perlis)曾经说过: 如果一种语言无法改变您对编程的看法,那么您就不应该了解它.

它更接近于数学语言和工程语言,更加直观,自然和易于理解.

更容易验证其正确性.

编写程序的效率更高.

更容易移植.

程序本质上是某个字符集上的字符串.

语法: 一组规则,可用于形成和产生合规(形式正确)的程序,分为词汇规则和语法规则.

单词符号是最基本的结构,具有独立的语言含义

通常包括: 常量,标识符,基本词,运算符,定界符等.

语法单元通常包括: 表达式,语句,子程序,过程,函数,程序等.

程序设计语言:编译原理_c语言 条件编译_c语言编译环境

描述工具: 无上下文语法.

一组可用于定义程序含义的规则.

描述方法:

1. 自然语言描述: 歧义,隐藏的错误和不完整.

2. 表单说明:

操作语义.

引用语义.

代数语义.

程序本质上描述了某些数据的处理.

编程语言的基本功能: 描述数据并对数据进行操作.

程序层次结构:

程序—》子程序或子程序,过程,函数—》语句—》表达式—》数据引用,运算符,函数调用

编程语言组件的逻辑和实现意义

抽象逻辑的含义: 数学含义.

计算机实施的意义: 具体实施.

计算思维和数学思维是不同的!

强制性语言/程序性语言

应用语言

基于规则的语言

面向对象的语言


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-216080-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...