一、概述
1、基本概念
(1)低级语言和高级语言
低级语言:机器语言、汇编语言
高级语言:Java、C、C++、Python、
(2)编译程序和解释程序
- 解释程序,是指可以直接解释执行源程序,或者将源程序翻译成某种中间代码后再加以执行。
- 编译程序,是指将源程序翻译成目标语言程序,然后在计算机上运行目标程序。
根本区别
在编译方式下,机器上运行的是与源程序等价的目标程序,源程序和编译程序都不再参与目标程序的执行过程;而在解释方式下,解释程序和源程序(或其某种等价表示) 要参与到程序的运行过程中,运行程序的控制权在解释程序。
简单来说,在解释方式下,翻译源程序时不生成独立的目标程序,而编译器则将源程序翻译成独立保存的目标程序。
(3)程序设计语言
一般地,程序设计语言的定义都涉及语法、语义和语用等方面。
【1】语法是指由程序设计语言的基本符号组成程序中的各个语法成分(包括程序)的一组规则。
其中,由基本字符构成的符号 (单词) 书写规则称为词法规则,由符号构成语法成分的规则称为语法规则。
程序设计语言的语法可用形式语言进行描述。
【2】语义是程序设计语言中按语法规则构成的各个语法成分的含义,可分为静态语义和动态语义。静态语义指编译时可以确定的语法成分的含义,而运行时刻才能确定的含义是动态语义。
一个程序的执行效果说明了该程序的语义,它取决于构成程序的各个组成部分的语义。
语用表示了构成语言的各个记号和使用者的关系,涉及符号的来源、使用和影响。
语言的实现则有个语境问题。语境是指理解和实现程序设计语言的环境,包括编译环境和运行环境。
二、基础
1、汇编程序
汇编语言源程序由若干条语句组成,其中可以有三类语句: 指令语句、伪指令语句和宏指令语句。
(1) 指令语句。指令语句又称为机器指令语句,将其汇编后能产生相应的机器代码,这些代码能被 CPU 直接识别并执行相应的操作。
(2)伪指令语句。伪指令语句指示汇编程序在汇编源程序时完成某些工作,伪指令语句与指令语句的区别是:伪指令语句经汇 编后不产生机器代码,而指令语句经汇编后要产生相应的机器代码。另外,伪指令语句所指示的操作是在源程序被汇编时完成的,而指令语句的操作必须在程序运行时完成。
(3) 宏指令语句。在汇编语言中,还允许用户将多次重复使用的程序段定义为宏。宏的定义必须按照相应的规定进行,每个宏都有相应的宏名。在程序的任意位置,若需要使用这段程序,只要在相应的位置使用宏名,即相当于使用了这段程序。因此,宏指令语句就是宏的引用。
2、编译程序
(1)词法分析
词法分析阶段是编译过程的第一个阶段,这个阶段的任务是对源程序从前到后 (从左到右) 逐个字符地扫描,从中识别出一个个“单词”符号。
词法分析过程依据的是语言的词法规则。
【1】有限自动机+不确定的有限自动机
【2】有限自动机正规式
(2)语法分析
语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式”“语句”和“程序”等。语法规则就是各类语法单位的构成规则。通过语法分析确定整个输入串是否构成一个语法上正确的程序。如果源程序中没有语法错误,语法分析后就能正确地构造出其语法树:否则指出语法错误,并给出相应的诊断信息。
【1】上下文无关法
【2】自顶向下语法分析方法
【3】自底向上语法分析方法
(3)语义分析
语义分析阶段分析各语法结构的含义,检查源程序是否包含静态语义错误,并收集类型信息供后面的代码生成阶段使用。只有语法和语义都正确的源程序才能翻译成正确的目标代码。 语义分析的一个主要工作是进行类型分析和检查。程序设计语言中的一个数据类型一般包含两个方面的内容:类型的载体及其上的运算。
(4)中间代码生成
常用的中间代码有后缀式、三元式、四元式和树等形式。
【1】后缀式(逆波兰式):把运算符卸载运算对象的后面。其优点:根据运算对象和运算符的出现次序进行计算,不需要使用括号,也便于用栈实现求值。
【2】树形表示
(5)代码优化
(6)目标代码生成
(7)符号表管理
(8)出错处理
3、解释程序
解释程序在词法、语法和语义分析方面与编译程序的工作原理基本相同,但是在运行用户程序时,它直接执行源程序或源程序的中间表示形式。因此,解释程序不产生源程序的目标程序,这是它和编译程序的主要区别。
4、Python基础
(1)基础语法
【1】默认情况下,Python3源码文件以UTF8编码,所有字符都是unicode字符串。
【2】Python中单行注释以#开头;多行注释用三个单引号 ''' 或者三个双引号 """ 将注释括起来。
【3】Python中用import导入相应模块。
(2)基本数据类型
【1】Python3 中有六个标准的数据类型:
Number(数字):支持 int、float、bool、complex
String(字符串):用单引号 ' 或双引号 " 括起来,同时使用反斜杠 \ 转义特殊字符。
List(列表):用 [] 定义,用逗号分隔开的元素列表
Tuple(元组):用 () 定义,元素之间用逗号隔开
Set(集合):使用大括号 { } 或者 set() 函数创建集合。创建一个空集合必须用 set() 而不是 { }
Dictionary(字典):用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合
其中:
- 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
- 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
【2】可以使用type()函数来查询变量所指的对象类型,还可以用isinstance()来判断。
【3】序列(字符串、列表、元组)的截取方法:变量[头下标:尾下标];索引值以 0 为开始值,-1 为从末尾的开始位置。
(3)序列的切片
【1】基本语法(含头不含尾)
seq[start:end:step]
其中,seq表示待切片序列;start表示起始索引(包含);end表示结束索引(不包含),step表示步长(默认为1)。
【2】索引方式:正向索引、负向索引。
【3】切片应用
lst=[1,2,3,4,5,6,7,8,9]
print(lst[0:3]) # [1,2,3]
print(lst[-3:-1]) # [7, 8]
print(lst[-3:]) # [7, 8, 9]
print(lst[:3:-1]) # [9, 8, 7, 6, 5] ---步长为负时的结果,输出剩余的
(4)常见函数
range(1,9):[1,9)之间的整数;含头不含尾。
三、总 结
笔记总结不易,如果喜欢,请关注、点赞、收藏。
完整笔记下载地址:(后续完成后更新)
基础精讲课件地址:(请关注、点赞、收藏后,私信我)
基础精讲视频地址:(请私信我)