备考软件设计师(程序设计语言)

中缀、后缀式表达转换

优先级从右往左

后缀转前缀通过求值

中缀式:左根右

后缀式(逆波兰式):左右根

上下文无关文法

上下文无关文法被广泛的用于表示各种程序设计语言的语法规则

ETFN的变化要记

产生式:可以推出来的结果(即使不是最终式)

有限自动机

一个状态既可以是初态,也可以是终态

最后要在终态且过程无误才合法

有限自动机是词法分析的一个工具,能正确识别正规集

确定的有限自动机(DFA):对每一个状态来说识别字符后转移的状态是唯一

不确定的有限自动机(NFA):对每一个状态来说识别字符后转移的状态是不确定的(可多选)

中间代码生成

常见的中间代码有:后缀式、三地址码、三元式、四元式和树(图)等形式

中间代码与具体的机器无关

可以将不同的高级程序语言翻译成同一种中间代码

中间代码可以跨平台

因为与具体的机器无关,使用中间代码有利于优化处理和提高编译程序的可移植性

目标代码生成

目标代码生成阶段的工作与具体的机器密切相关

寄存器的分配工作处于目标代码生成阶段

目标代码生成是编译器工作的最后一个阶段

PS:一般作为干扰选项

语义分析

输入:语法树(分析树)

作用:进行类型分析和检查(判断类型是否正确)

语义分析阶段可以发现静态语义错误

语义分析阶段不能发现所有的语义错误

动态语义错误要到程序运行才能检测出来

语法分析

作用:判断语法是否正确(程序语句的结构)

这个考的多

词法分析

输入:源程序

输出:记号流

词法分析的主要作用是分析构成程序的字符以及

由字符按照构造规则构成的符号是否符合程序语言的规定

程序分析过程依据的是语言的词法规则,例如源程序中的一条声明语句和赋值语句

符号表

符号表:

不断收集、记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入符号表中。

记录源程序中各个字符的必要信息,以辅助语义的正确性检查和代码生成

编译、解释程序翻译阶段

编译方式:词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成

解释方式:词法分析,语法分析,语义分析

编译器和解释器都不可省略词法分析,语法分析,语义分析且顺序不可交换

词法分析,语法分析,语义分析是必须的

编译器方式中中间代码生成,代码优化不是必要,可省略

即编译器方式可以在词法分析,语法分析,语义分析后直接生成目标代码

传值调用与传地址调用

传值调用:

将实参的值传递给形参,实参可以是变量、常量和表达式

不可以实现形参和实参间双向传递数据的效果

传引用(地址)调用:

将实参的地址传递给形参,形参必须有地址,形参不能是常量,表达式

可以实现形参和实参间双向传递数据的效果,即改变形参的值同时也改变了实参的值

程序设计语言的基本成分

程序设计语言的控制成分:顺序结构、选择结构、循环结构

许多程序设计语言规定,程序中的数据必须具有类型,其作用是:

1.便于为数据合理分配存储单元

2.便于对参与表达计算的数据对象进行调查

3.便于规定数据对象的取值范围及能够进行的运算

编译程序和解释程序

低级语言和高级语言

机器程序语言即由0、1组成的机器指令序列

符号表示的指令称为汇编指令,汇编指令的集合称为汇编语言

人们称机器语言和汇编语言为低级语言

在此基础上人们开发更高级的语言以支持程序设计

编译程序和解释程序

高级设计语言需要被翻译为机器程序语言(高级->低级)的程序称为语言处理程序

语言之间的翻译形式有多种,基本方式为汇编、解释和编译

高级语言/汇编语言编写的程序叫源程序,不能直接在计算机执行

如果源程序是用汇编语言编写,则需要一个汇编程序翻译成目标程序才能执行

如果源程序是某种高级语言编写,则需要对应的解释程序/编译程序对其进行翻译,然后在机器上运行

解释程序叫解释器,可直接解释执行源程序,也可将源程序翻译成某种中间代码后再加以执行,而编译程序是将程序翻译成目标语言程序,然后在计算机上运行目标程序

解释器:

翻译源程序时不生成独立的目标程序

解释程序和源程序要参与到程序的运行过程中(执行速度慢)

编译器:

翻译时将源程序翻译成独立保存的目标程序

机器上运行的是与源程序等价的目标程序,源程序和编译程序都不再参与目标程序的运行过程

该文章为笔记,教程为b站的zst_2001老师
zst_2001主页:https://space.bilibili.com/91286799?spm_id_from=333.999.0.0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值