当前位置:   article > 正文

软设-程序设计语言

软设-程序设计语言

学习整理自B站视频:zst_2001

低级语言和高级语言

机器语言和汇编语言称为低级语言
Java、C、C++、PHP、Python、Delphi、PASCAL等为高级语言

编译程序和解释程序

解释程序(解释器)

解释源程序时不生成独立的目标程序
解释程序和源程序要参与到程序的运行过程中

编译程序(编译器)

翻译时将源程序翻译成独立保存的目标程序
机器上运行的是与源程序等价的目标程序,源程序和编译程序都不再参与目标程序的运行过程

程序设计语言基本成分

数据成分

数据类型的作用:
便于为数据合理分配存储单元
便于对参与表达式计算的数据对象进行检查
便于规定数据对象的取值范围及能够进行的运算

控制成分

1)顺序结构
2)选择结构
3)循环结构

函数

1)函数定义
函数的定义包括两部分:函数首部和函数体。函数的定义描述了函数做什么和怎么做。
函数定义的一般形式为:

返回值的类型 函数名(形式参数表)  // 函数首部
{
    函数体;
}
  • 1
  • 2
  • 3
  • 4

函数调用的一般形式为:

函数名(实参表)
  • 1

2)函数调用
(1)传值调用。
将实参的值传递给形参,实参可以是变量、常量和表达式。
不可以实现形参和实参间双向传递数据的效果。
(2)传引用(地址)调用。
将实参的地址传递给形参,形参必须有地址,实参不能是常量(值)、表达式。
可以实现形参和实参间双向传递数据的效果,即改变形参的值同时也改变了实参的值。
例如:

void swap(int &x,int &y){	/*交换x和y*/ 
    int temp;
    temp=x; x=y; y=temp;
}
  • 1
  • 2
  • 3
  • 4

编译程序基本原理

编译、解释程序翻译阶段

image.png
编译方式:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成
解释方式:词法分析、语法分析、语义分析

编译器和解释器都不可省略词法分析、语法分析、语义分析且顺序不可交换
即词法分析、语法分析、语义分析是必须的

编译器方式中中间代码生成和代码优化不是必要,可省略
即编译器方式可以在词法分析、语法分析、语义分析阶段后直接生成目标代码

符号表

不断收集、记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入符号表中。
记录源程序中各个字符的必要信息,以辅助语义的正确性检查和代码生成。

词法分析

输入:源程序
输出:记号流
词法分析阶段的主要作用是分析构成程序的字符及由字符按照构造规则构成的符号是否符合程序语言的规定

语法分析

输入:记号流
输出:语法树(分析树)
语法分析阶段的主要作用是对各条语句的结构进行合法性分析,分析程序中的句子结构是否正确

语义分析

输入:语法树(分析树)
语义分析阶段的主要作用是进行类型分析和检查

语法分析阶段可以发现程序中的所有语法错误
语义分析阶段不能发现程序中所有的语义错误
语义分析阶段可以发现静态语义错误
不能发现动态语义错误,动态语义错误运行时才能发现

中间代码生成

常见的中间代码有:后缀式、三地址码、三元式、四元式和树(图)等形式。
中间代码与具体的机器无关(不依赖具体的机器),
可以将不同的高级语言程序翻译成同一种中间代码。
中间代码可以跨平台。
因为与具体的机器无关,使用中间代码有利于进行与机器无关的优化处理和提高编译程序的可移植性。

目标代码生成

目标代码生成阶段的工作与具体的机器密切相关
寄存器的分配工作处于目标代码生成阶段

动态的语义错误

语义分析只能检侧出程序的静态语义错误
不能检测出动态的语义错误
要到程序运行时才能检测出来

例如int a=1 / 0; 运行时才会报异常除数不能为0

词法分析

正规式

image.png

有限自动机

有限自动机是词法分析的一个工具,它能正确地识别正规集
确定的有限自动机(DFA):对每一个状态来说识别字符后转移的状态是唯一的
不确定的有限自动机(NFA):对每一个状态来说识别字符后转移的状态是不确定的
image.png
图中M1是NFA、M2是DFA。

语法分析

上下文无关文法

大多数程序设计语言的语法规则采用上下文无关文法进行描述

中缀、后缀表达式转换

逆波兰式即后缀表达式,利用栈求值
image.png

补充

  • 汇编程序不会把伪指令翻译成机器代码
  • 编译过程中为变量分配存储单元所用的地址是逻辑地址,程序运行时再映射为物理地址
  • 语法分析中自顶向下分析法有递归下降分析法和预测分析法、自底向上分析法(移进-规约分析法)有算符优先分析法和LR分析法
  • Lisp是函数式编程语言
  • Prolog是逻辑式程序语言
  • 栈是局部变量以及每次函数调用时所需保存的信息的存储区域
  • 堆是一块动态存储区域,由程序员在程序中进行分配和释放
  • 一个文法的语言是该文法能产生的句子的集合。一个文法产生的句子是从文法开始符号出发推导出的所有终结符号串。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/515334
推荐阅读
相关标签
  

闽ICP备14008679号