仅为学习记录~
程序设计语言概述
低级语言
机器语言:用二进制代码表示的计算机的指令等,所有都是二进制表示,计算机可以直接执行,而不需要再次进行编译
优点:执行效率较高,较灵活
缺点:导致程序编写、阅读、理解较难,不利于开发计算机程序
汇编语言:为了克服机器语言的缺点,用一定的缩写来代替某些指令
例:用add来代替二进制的加法,便于记忆
本质还是机器语言,用某些缩写代替了机器语言
汇编语言程序
汇编语言写成程序,翻译成与之等价的机器语言程序的程序语言
汇编程序:汇编语言写成的程序代码
高级语言
高级语言的特点及应用
Fortran语言—科学计算,执行效率高
Pascal语言—为教学而开发的,表达能力强,Delphi
C语言—指针操作能力强,高效
Lisp语言—函数值程序语言,符号处理,人工智能
C++语言—面向对象,高效
Java语言—面向对象,中间代码,跨平台
C#语言—面向对象,中间代码,.Net
Smalltalk—面向对象,程序设计语言、程序设计环境、应用开发环境
Prolog—逻辑推理。简洁性,表达能力,数据库和专家系统
Python—一种脚本语言
静态类型语言
在编译时,需要明确数据类型为静态语言
java、C++、C#都属于静态语言
动态类型语言
在编译时,可以没有明确,当程序运行到具体的赋值语句时才明确
PHP、python、JavaScript属于动态语言
解释程序
不生成目标程序,解释的程序在运行时需要源代码/等效的中间代码+解释器一起运行,控制层在解释器上
编译程序
编译程序会将源程序编译成目标计算机的目标程序
编译的目标程序,计算机直接拉编译程序运行,不需要运行源程序
反编译不能还原出源程序,只能还原到中间状态,可以帮助理解设计程序的一些思路
编译过程
语句:用来描述程序中运算步骤、控制结构、数据传输的
语法:程序的语言的基本符号组成的程序,要符合各个部分的语法规则
语义:不同结构语法的结构含义
语义分为静态语义和动态语义
静态语义:程序在编译过程中需要明确的语义
动态语义:需要去运行程序才能明确的语义
在编译过程中,只会分析静态语义,在运行过程中,才会分析动态语义
语用:程序与使用者之间的关系
编译过程
词法分析:编译的第一个阶段,对源程序从前往后、从左往右按照词法规则去分析
语法分析:在词法分析的基础上,按照语法规则的要求是不是构成一个正确的程序
语义分析:在语法分析的基础上,去检查程序的静态语义,主要数据的类型进行分析和检查
中间代码生成:根据语法分析输出对应的中间代码
代码优化:对中间代码进行适当的优化
目标代码生成:根据目标计算机的特点,生成对应的指令代码
中间代码生成和代码优化并不是每个编译器都必需的
符号表管理和出错处理贯穿整个编译过程
符号表管理:记录源程序中各种符号的必要信息,以辅助语义的正确性检查,以及在编译过程中能够快速去进行查找、修改、插入的相关操作
出错处理:在整个编译过程中的错误相关
中间代码有利于进行语机器无关的机器处理(特点)
文法
文法定义
G=(Vn,Vt,P,S)
文法推导
需练习相关题型
正规表达式和正规集
有限自动机
确定的有限自动机
如果输入值给定值是a,他的状态一定转移,那就是确定的有限自动机
非确定的有限自动机
如果输入的值给定值为a,他的后继状态不一定是唯一的,那就是非确定的有限自动机
程序基本的控制结构
顺序结构
依次执行,不会产生分支的情况
循环结构
到节点后有条件判定,如果符合要求执行循环内语句,如果不符合则跳转循环,执行下面的语句 ,例for循环、while循环
选择结构
又称分支结构,例if…else…
表达式
表达式
前缀表达式(+ab)
中缀表达式(a+b)
后缀表达式(ab-) 逆波兰式
采用逆波兰表示时,利用栈求值
数据类型
数据类型是一种程序语言的数据类型
数据名称:有用户通过标识符命名
数据类型:说明数据占用内存的大小和存放形式
存储类别:说明数据在内存中的位置和生存期
作用域:说明可以使用数据的代码范围
生存期:说明数据占用内存的时间范围
常量:固定不变的值,程序运行过程中,代表的值永远不变
变量:值可以变的量,变量能够作为某特定种类的值中任何一个的保留器
全局量:变量的作用范围为全局
局部量:变量的作用范围为指定代码
数据类型
基本类型:整型、字符型、实型、布尔类型
特殊类型:空类型(void)
用户定义类型:枚举类型
构造类型:数组、结构、联合
指针类型:type*
抽象类型:类类型
标识符
标识符的作用:为变量、函数、数据类型命名
传址与传值
形参:定义函数过程中,声明的参数
实参:在调用过程中,用实际参数替代形参
传值调用:把实际参数的值传给该函数
传址调用:把实际参数存放的地址传给该参数,传址能把运算后的值传给实参
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)