计算机与人工智能导论 课件 第5章 软件构建基础:语言、编译与工程_第1页
计算机与人工智能导论 课件 第5章 软件构建基础:语言、编译与工程_第2页
计算机与人工智能导论 课件 第5章 软件构建基础:语言、编译与工程_第3页
计算机与人工智能导论 课件 第5章 软件构建基础:语言、编译与工程_第4页
计算机与人工智能导论 课件 第5章 软件构建基础:语言、编译与工程_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章

软件构建基础:语言、编译与工程AI第5章知识导图文件管理语言的演进之路机器语言汇编语言高级语言程序的结构化思维与范式编译原理概述软件工程基础结构化程序设计程序设计范式编译与解释的区别编译器的核心工作流程编译原理的应用价值词法分析初步语法分析初步软件工程的核心概念软件生命周期第1章计算机工具与计算机演进史第2章计算机系统组成第3章计算机中的数据表示第4章操作系统与网络基础第5章软件构建基础:语言、编译与工程第6章算法与数据结构第7章数据管理与大数据技术第8章人工智能概述第9章机器学习基础第10章深度学习基础第11章机器人学、智能体与具身智能第12章自然语言处理与大语言模型第13章AI伦理、法律、治理与未来第14章AI赋能行业典型应用第15章前沿技术与实践能力培养软件构建基础:语言、编译与工程语言演进的核心趋势结构化思维的培养中间代码生成代码优化常见软件工程过程模型软件工程的核心原则内容导航第5章

软件构建基础:语言、编译与工程5.1语言的演进之路5.2程序的结构化思维与范式5.3编译原理概述5.4软件工程基础AI5.1语言的演进之路程序设计语言从机器语言到汇编语言再到高级语言的演进,本质上是不断降低人机交互门槛的过程——从直接操控硬件的二进制指令,到使用助记符简化记忆,最终到采用自然语言语法让程序员专注于问题求解逻辑。早期计算机ENIAC机器语言二进制直接操控汇编语言助记符简化记忆高级语言自然语言专注逻辑5.1.1机器语言由0和1的二进制代码组成,硬件可直接识别执行,效率最高。与特定CPU架构紧密相关,不同架构的计算机无法兼容,编程繁琐且易出错。如计算3+5,需要编写如下机器指令:1011000000000011

;

3

存入寄存器1011001100000101

;

5

存入寄存器00000000

11000011

;

执行加法5.1.2汇编语言用ADD、MOV等助记符替代二进制指令,大幅降低记忆成本。仍与硬件架构强相关,属于面向机器的低级语言,但大幅降低了编程的记忆成本。至今在嵌入式与底层硬件控制领域仍有应用。如计算,用汇编语言编写如下:MOVAL,3;将3存入寄存器ALMOVBL,5;将5存入寄存器BLADDAL,BL;AL,BL寄存器中的数相加5.1.3高级语言采用自然语言语法,脱离硬件限制,具有跨平台性和高可读性。从Fortran、C到Java、Python,应用场景持续拓展。可移植性强、编程效率高,需编译器或解释器转换。如计算,用C语言编写如下:inta=3;//将3赋给变量a;intb=5;//将5赋给变量b;intc=a+b;//将a和b的值相加赋给变量c;inta,b,c;a=3;b=5;c=a+b;

或:5.1.4语言演进的核心趋势程序设计语言的演进始终围绕易用性提升、通用性增强和效率优化三个方向展开,AI时代的到来更推动语言向智能化方向。易用性提升—从二进制指令到自然语言语法,编程门槛不断降低,非专业人员也能快速入门程序设计自然语言语法通用性增强—高级语言突破硬件和应用场景限制,实现跨平台运行,同一份代码适配多种计算环境跨平台运行效率优化—在提升开发效率的同时兼顾程序执行效率,编译技术的进步让高级语言性能逼近底层语言编译技术进步智能化方向—AI驱动的代码补全、智能错误检测、低代码/无代码开发,正在重新定义程序设计的边界AI驱动AI辅助编程工具正在重新定义开发工作流内容导航第5章

软件构建基础:语言、编译与工程5.1语言的演进之路5.2程序的结构化思维与范式5.3编译原理概述5.4软件工程基础AI5.2.1结构化程序设计结构化程序设计通过自顶向下拆解问题、模块化组织代码、三种基本控制结构约束流程,让程序逻辑清晰可追溯,是驾驭复杂程序的基础方法论,至今仍是所有编程范式的底层思维框架。自顶向下与逐步求精将复杂问题逐层拆解为独立子任务,如学生成绩管理系统可拆分为录入、查询、统计、修改等模块,直到每个子任务可用简单代码实现逐步拆解模块化设计按功能划分独立模块,模块间通过统一接口交互,修改某一功能不影响其他模块,显著提升代码的可维护性和团队协作效率接口隔离三种基本控制结构顺序结构依次执行、选择结构按条件分支、循环结构重复执行,任何复杂逻辑均可由这三种结构组合实现,杜绝无规则GOTO跳转杜绝GOTO5.2.2程序设计范式面向过程、面向对象、函数式三种编程范式各有核心思想与适用场景——面向过程关注求解步骤适合线性问题,面向对象通过封装继承多态管理复杂系统,函数式强调纯函数计算适合并行处理,程序员可根据问题特点灵活选择或融合。面向过程范式以过程为核心,重点放在问题的求解步骤上,通过设计一系列过程实现数据处理和逻辑执行。核心思想是"数据+算法",适合解决简单线性问题,如小型工具程序和底层硬件控制。典型代表语言为C语言,至今在操作系统内核、嵌入式开发等领域不可替代。面向对象范式以对象为核心,将数据和操作封装在一起,对象之间通过消息传递实现交互。三大特性:封装隐藏内部细节提高安全性,继承实现代码复用,多态提高灵活性。适合开发大型复杂系统,代表语言为Java、C++、Python函数式范式以函数为核心,程序执行看作函数间的计算,强调函数的纯性即无副作用。相同输入必得相同输出,避免可变变量,天然适合并行计算和大数据处理。典型代表语言为Scala、Haskell,Python和JavaScript也支持函数式特性。5.2.3结构化思维的培养结构化思维是程序设计的核心素养,大一学生应从问题拆解、代码规范、模块化设计和持续重构四个维度入手,将方法论转化为日常编程习惯,为后续专业学习奠定坚实的思维基础。大学生编程学习课堂实景学会问题拆解:面对复杂编程题目不急于写代码,先梳理求解逻辑,将大问题拆分为多个可落地的小任务,逐步实现。问题拆解坚持代码规范:使用统一的命名规则、缩进格式和注释风格,让代码结构清晰可读,培养专业素养和团队协作意识。代码规范注重模块化设计:避免编写冗长的"面条代码",让每个代码块功能单一独立,提高代码的可维护性和可复用性。模块化设计持续调试与重构:写完初版代码后回头审视和优化结构,在反复迭代中提升代码质量,建立精益求精的工程习惯。持续重构内容导航第5章

软件构建基础:语言、编译与工程5.1语言的演进之路5.2程序的结构化思维与范式5.3编译原理概述5.4软件工程基础AI5.3.1编译与解释的区别编译与解释的本质区别:翻译时机不同编译方式:在执行前一次性翻译为目标程序,执行效率高但跨平台性差;解释方式:逐行翻译立即执行,跨平台性好但效率较低。图

5.1

编译方式与解释方式的区别5.3.1编译与解释的区别(1)编译方式由编译器一次性翻译整个源程序为机器语言目标程序,后续执行无需再次翻译,执行效率高但修改后需重新编译。编译后的目标程序与特定硬件架构相关,跨平台性差。典型的编译型语言有C、C++、Java(Java先编译为字节码,再由JVM解释执行,属于半编译半解释型)。5.3.1编译与解释的区别(2)解释方式由解释器逐行读取翻译并立即执行,不生成独立目标程序。无需提前编译,修改源程序后可立即执行,开发效率高,且具有良好的跨平台性。每次执行都需要逐行翻译,执行效率低于编译方式。典型的解释型语言有Python、JavaScript、PHP。5.3.1编译与解释的区别表

5.1

编译方式与解释方式六维对比对比维度编译方式解释方式翻译时机程序执行前,一次性完整翻译程序执行时,逐行翻译目标产物生成独立的机器语言目标程序不生成目标程序,仅逐行执行执行效率高,无需重复翻译低,每次执行都需翻译开发效率低,修改后需重新编译高,修改后可立即执行跨平台性差,与硬件架构强相关好,依赖解释器跨平台典型语言C、C++Python、JavaScript5.3.2编译器的核心工作流程编译器核心任务:将高级语言源程序转换为等价的机器语言目标程序。图5.2典型的编译程序结构框图5.3.2编译器的核心工作流程词法分析扫描源程序字符流,将其分解为具有独立语义的单词符号(Token)序列,过滤空格、注释等无用信息。中间代码生成产生介于高级语言和机器语言之间、与硬件无关的中间表示,作为前后端的桥梁。语法分析接收Token序列,根据语法规则验证单词组合是否构成合法语句,并构建反映程序结构的语法树代码优化对中间代码进行等价变换,消除冗余操作,减少计算量和存储量,提升目标程序运行效率。语义分析检查语法结构的逻辑含义是否正确,如变量类型匹配检查,确保程序在语义层面无矛盾。目标代码生成将优化后的中间代码转换为特定机器架构的机器指令代码,完成整个编译过程。5.3.3编译原理的应用的价值理解编译原理能帮助程序员更好地理解高级语言的执行机制,写出更高效的代码;在编译器、解释器、虚拟机开发中,编译原理是核心理论基础;在代码分析、静态检测、代码重构等开发工具中,词法和语法分析技术是关键;在人工智能、

自然语言处理等前沿领域,编译原理的分析方法也为自然语言的词法、句法分析提供了参考。对大一学生而言,学习编译原理的核心目的并非直接开发编译器,而是掌握其分层处理、逐步求精的思想,培养对程序语言的分析能力和逻辑思维能力。5.3.4词法分析初步词法分析的核心任务:扫描源程序的字符流,将其分解为一系列具有独立语义的最小语法单位——单词符号,简称“单词”,并过滤掉源程序中的空格、换行、注释等无用信息。词法分析由词法分析器(扫描器)完成,是编译过程的第一步。通过扫描源程序字符流识别出关键字、标识符、常量、运算符、定界符五类单词符号(Token),为后续语法分析提供基础输入,是程序正确性的第一道检验关卡。5.3.4词法分析初步关键字编程语言预定义的特殊含义单词如if、for、int等,不能被程序员作为标识符使用。标识符程序员定义的变量名、函数名、类名等,如sname、add_num等,需遵循语言命名规则。常量常量指固定值,如100、3.14、'hello'等。运算符用于实现各类运算操作的单词符号,如算术运算符+、-、*、/;关系运算符>、<、==;逻辑运算符&&、||等。定界符

用于分隔程序元素的符号,如圆括号()、方括号[]、大括号{}、分号;、逗号,等。5.3.4词法分析初步词法分析的基本过程:词法分析器先定义各类单词的模式(如关键字的固定字符串、标识符的字母开头+字母数字组合),然后从源程序的起始位置开始,逐个扫描字符,将字符流匹配为对应的单词符号,并为每个单词添加类型标记和属性值,最终输出单词符号流,供语法分析使用。例如,对

C语言语句

int

a

=

10;进行词法分析,将分解为以下单词符号:(关键字,int)

、(标识符,a)

、(运算符,=)

、(常量,

10)

、(定界符,

;)。词法错误的常见类型:标识符命名不符合规则、使用未定义的符号、注释未结束等。5.3.5语法分析初步语法分析的核心任务:接收词法分析输出的单词符号流,根据语言的语法规则,验证单词符号的组合是否构成合法的语句和程序结构,并构建反映程序语法结构的语法树(分析树)。语法分析由语法分析器完成,若源程序存在语法错误(如缺少分号、括号不匹配、关键字使用错误),语法分析器会及时发现并报告错误位置和类型。5.3.5语法分析初步上下文无关文法由开始符号、非终结符、终结符和产生式四部分组成,形式化描述语言的语法结构规则语法规则的表示自顶向下分析从开始符号出发逐步推导出匹配的语法结构,本质是推导过程,如递归下降分析法语法分析的基本方法自底向上分析从Token流出发逐步归约为非终结符直至开始符号,本质是归约过程,如LR分析法语法树的作用以树形结构直观表示程序语法关系,展示运算符优先级与结合性语法树的作用常见语法错误缺少分号、括号不匹配、关键字拼写错误、结构缺少必要成分等常见语法错误语法分析的基本方法5.3.6中间代码生成中间代码作为编译器前后端的桥梁,实现了语言无关与硬件无关的解耦设计(1)常见的中间代码形式逆波兰表示(后缀表示)将运算符写在操作数的后面,无需使用括号即可表示表达式的运算优先级,是一种简洁的中间代码形式,便于栈式虚拟机执行。如:表达式

a+b

*c

表示为

a

b

c

*+

三元式由运算符、第一个操作数、第二个操作数三部分组成,如(+,a,b)表示a+b,结构简单,易于实现。四元式由运算符、左操作数、右操作数、结果四部分组成,是编译器中应用最广泛的中间代码形式,便于进行代码优化。如(+,a,b,t1)表示将a+b的结果存入临时变量t1树形表示以树形结构表示程序的语法和语义,如表达式的语法树就是一种树形中间代码,直观易懂,适合进行语义分析和代码优化。5.3.6中间代码生成中间代码作为编译器前后端的桥梁,实现了语言无关与硬件无关的解耦设计(2)中间代码生成的核心要求中间代码生成的核心是等价性,即生成的中间代码必须与源程序的语义完全一致,不能改变程序的功能。同时,中间代码应具备简洁性和易优化性,让后续的代码优化和目标代码生成更易于实现。中间代码生成阶段以语法分析得到的语法树为基础,结合语义分析的结果,将语法树转换为线性的中间代码。5.3.7代码优化代码优化在保证语义等价的前提下消除冗余操作。分为局部优化和全局优化,分别针对程序的局部代码块和整个程序进行优化。与中间代码生成共同确保编译器既有高可移植性又能生成高效的目标代码。代码优化局部优化常量合并常量传播删除冗余代码表达式化简全局优化循环优化数据流分析公共子表达式消除5.3.7代码优化代码优化原则优化后的代码必须保证与原程序功能一致,不能引入新的错误(遵循实用性和平衡性)选择合适的优化策略,避免过度优化在时间效率和空间效率之间进行权衡,根据需求优先优化其中一项,或实现二者的平衡。内容导航第5章

软件构建基础:语言、编译与工程5.1语言的演进之路5.2程序的结构化思维与范式5.3编译原理概述5.4软件工程基础AI5.4软件工程基础软件工程为解决软件危机而生,其核心是将软件开发从个人化的艺术行为转变为团队化的工程行为,通过规范化流程、标准化工具和系统化管理,实现高质量、高效率、低成本的软件交付。5.4.1软件工程的核心概念高质量目标:开发的软件需满足功能与性能需求,具备可靠性、可维护性和可扩展性,经得起长期运行检验高效率目标:在规定时间和资源约束内完成开发,通过流程优化和工具支持持续提升团队效率低成本目标:控制开发和维护的全周期成本,实现投入产出最大化,避免后期修复成本倍增规范化保障:制定代码、文档、测试规范等标准体系,借助开发与项目管理工具落地执行5.4.2软件生命周期软件生命周期覆盖从需求分析到运行维护的完整过程,六个阶段各有明确的输入输出和交付物,依次推进形成有序的开发流程,其中运行维护阶段持续时间最长、成本最高,是软件价值持续释放的关键环节。5.4.2软件生命周期需求分析明确"用户需要什么",通过调研沟通收集功能、性能、安全需求,输出需求规格说明书需求规格说明书系统设计明确"如何实现需求",进行总体架构设计和模块详细设计,输出设计说明书架构+模块设计编码实现将设计转化为代码,选择合适编程语言编写源程序,遵循代码规范保证可读性源代码软件测试通过单元测试、集成测试、系统测试等方法发现缺陷,输出测试报告确保质量达标测试报告软件部署将测试通过的软件部署到生产环境,完成安装配置和用户培训,正式交付使用正式交付运行维护

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论