程序语言基础知识
程序语言概述
低级语言
机器语言和汇编语言
高级语言
java
低级语言转换成高级语言的方式
汇编、解释、编译
编译程序和解释程序
解释程序:直接解释源程序或先翻译成某种中间代码后再加以执行。逐条翻译并执行
编译程序:①把源程序翻译成目标程序②执行程序
区别:在解释方式下,翻译源程序时不生成独立的目标程序,而编译器则将源程序翻译成独立保存的目标程序。
比较:编译比解释方式可能取得更高的效率、解释方式比编译方式更灵活、解释方式可移植性较好
程序语言的数据成分
常量和变量
全局变量和局部变量
数据类型
基本类型int short byte long char float double boolean
特殊类型
用户定义类型
构造类型
指针类型
抽象数据类型
程序语言的控制成分
顺序、选择、循环
编译过程
源程序
前端:词法分析、语法分析、语义分析、中间代码生成
后端:代码优化、目标代码生成
运行代码
符号表管理+出错处理
词法分析
任务:对构成源程序的字符串进行扫描的分解,识别出一个个单词。
`
Void jisuan()`
`{int y,c,d;`
• `float x,a,b`;
• `x=a+b*50`;
• `y=c+)d*(x+b;
}
单词:最小语法单位
-
基本字:void,int,float
-
标识符:a,b,c,d,x,y,jisuan
-
整常数:50
-
运算符:= + -
-
界限符:{}开始和结束;;,
转换成统一规格(类号、内码:说明是哪一个标识符)
正规式:单词是不是正规描述
有限自动机:如何比较
进行词法分析
语法分析
在词法分析的基础上,根据语言的语法规则,把单词符号组成各类的语法单位:短句子句过程程序
规则:文法,如何构成
语法规则表示:
-BNF: A::=B|C (::= 定义为)
根据文法的初始要求,推出正确语句。
推导的逆过程就是规约
语法树(分析过程)
中间代码生成
任务
对语法分析识别出的各类语法范畴(短语表达式子句过程),分析其含义(要干什么),进行和初步翻译,产生介于源代码和目标代码的一种代码。
两个阶段
-
对每种语法范畴进行静态语义检查
-
若语义正确,就进行中间代码的翻译
中间代码的形式
四元式、三元式、逆波兰式(和正常思维相反)
例x=a+b*50的中间代码表的四元式
中间代码优化
任务
对前面的中间代码进行加工变换,以期待在最后阶段能产生更高效的代码。
原则:等价变换
主要方面:公共子表达式的提取、合并已知量、删除无用语句、循环优化等。
目标代码生成
生成目标机代码 MIPS 汇编码
符号表管理
记录源程序中各种符号的必要信息,辅助语义检查和中间代码生成。
出错处理
不可不免的错误,分为静态和动态。
中缀、前缀与后缀表达式
中缀表达式:通常使用的表达式,如(a+b)×c-d
三种表达式的转换:
(a+b)×c-d中缀转前缀——
第一步:按照运算优先级顺序全部加上括号
第二步:每个括号的运算符移到前面
-(×(+(ab)c)d)
第三步:去掉括号
-×+abcd
(a+b)×c-d中缀转后缀——
第一步:按照运算优先级顺序全部加上括号
第二部:每个括号的运算符移到后面
(((ab)+c)×d)-
第三步:去掉括号
ab+c×d-
传值调用和引用调用
函数调用时的基本的参数传递方式有传值调用和引用调用
传值调用
信息传递是单向的,只能将实参的值传递给形参,而形参不能再将值传递给实参
引用调用
信息传递是双向的,被调函数中对形参的访问和修改实际上就是对实参的访问和修改。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!