【软件设计师-从小白到大牛】上午题基础篇:第七章 程序设计语言与语言处理程序基础(1)

简介: 语法分析阶段可以发现程序中的所有语法错误;编译正确的程序必然不包含语法错误;“除数为0”为动态语义错误,动态语义错误只有运行时才能发现。

章节提要

image.png

重点掌握:正规式、表达式、传值与传址


一、编译过程

image.png


符号表

(注:下图来自前言中up主视频)

645cce7dfa1a79b31a3c1c7b249a19b9_81cee23bada04213a69076b9eaec06f6.png

编译方式与解释方式的过程

(注:下图来自前言中up主视频)

dd9f3ccbcdc1e656c64e462b4f40f351_4236da5e515b4cb1a3b4e574b6c0cf95.png

编译方式下,在机器上运行的目标程序完全独立于源程序。

语法分析过程

(注:下图来自前言中up主视频)

39474182b19b53c5bd3e921431864f87_112255f4c5974bdfb54e0baf958dbc16.png

语法分析阶段可以发现程序中的所有语法错误;编译正确的程序必然不包含语法错误;“除数为0”为动态语义错误,动态语义错误只有运行时才能发现。

语义分析过程

(注:下图来自前言中up主视频)

34175e705088d5e17cd830134907c4f2_d7a08d0dfe9a4775a8107d9b1dc69c81.png

中间代码

(注:下图来自前言中up主视频)

2579d4c6fa305ed3c4f26f2bbee3497f_cb627ae192554fcba5252a4160a74677.png

目标代码生成过程

(注:下图来自前言中up主视频)

fb5b110ff269128e13a37ae1d064ec34_35449396de5044ed95f161388acafa45.png

目标代码生成阶段的工作与目标机器的体系结构密切相关。

真题链接

编译过程中,对高级语言程序语句的翻译主要考虑声明语句和可执行语句。对声明语句,主要是将所需要的信息正确地填入合理组织的 符号表 中;对于可执行语句,则是 翻译成中间代码或目标代码。

对于高级语言源程序进行编译或解释处理的过程中,需要不断收集、记录和使用源程序中一些相关的类型和特征等信息,并将其存入 符号表 中。

解释方式不包含 目标代码生成阶段。

编译程序对C语言源程序进行语法分析时,可以确定 变量是否定义(或声明)。

编译程序分析源程序的阶段依次是 词法分析、语法分析、语义分析。

分配寄存器的工作在 目标代码生成 阶段进行。

判断程序语句的形式是否正确属于 语法分析 阶段的工作。

语法分析主要是分析 程序语句的结构是否合法。

词法分析 阶段的主要作用是分析构成程序的字符及由字符按照构造规则构成的符号是否符合程序语言的规定。

对高级语言源程序进行编译的过程中,有穷自动机(NFA或DFA)是进行 词法分析 的适当工具。

语法分析阶段的输入是 记号流。

若程序中的括号不配对,则会在 语法分析 阶段检查出错误。

类型检查在 语义分析 阶段处理。

若C程序表达式中引用了未赋初值的变量,则 可以编译并运行,但运行结果不一定是期望的结果。

某程序运行时陷入死循环,则可能的原因是程序中存在 动态的语义错误。

引入中间代码的好处:有利于进行与机器无关的优化处理。

常用的中间代码有 后缀式、三地址码、树 等。

解释器与编译器特点与区别

(注:下图来自前言中up主视频)

992c031d555db1ff66048ba66fb3e777_56970f4fd7d34ad5892ab3565552057b.png

编译程序生成源程序的目标程序,而解释程序不生成目标程序。

编译程序不参与用户程序的运行控制,而解释程序则参与。

真题链接

将高级语言源程序翻译成目标程序的是 编译程序。

与编译器相比,解释器 参与运行控制,程序执行的速度慢。

二、文法的定义以及语法推导树

image.png

image.png

image.png


真题链接

大多数程序设计语言的语法规则用 上下文无关文法。

程序设计语言的大多数语法现象可用 上下文无关文法 描述。

三、有限自动机与正规式

image.png


(注:下图来自前言中up主视频)

6c92eded8f677e8a96b4f85b64dcfd3b_bb9851ca9b9943b69155b9df1f654e9f.png

(注:下图来自《软件设计师教程》(第5版)(褚华、霍秋艳主编,清华大学出版社))

268338410c136de8d9bbf89e325d654d_bcec99dc52f54e019b9f8cc896caeb1b.jpeg

image.png

image.png

正确答案:D、C

image.png

1)对文法进行替换可分析出来答案为D。

2)可以使用代入法来判断。

image.png



正确答案:C

依次带入选项,判断是否能够从初态到达终点即可。

目录
相关文章
|
6月前
|
存储 算法 前端开发
【软件设计师-从小白到大牛】上午题基础篇:第五章 结构化开发方法
在结构化分析中,用数据流图描述 数据在系统中如何被传送或变换,以及如何对数据流进行变换的功能或子功能,用于对功能建模。 数据字典有以下4类条目:数据流、数据项、数据存储和基本加工。
55 0
|
6月前
|
数据库 数据库管理
【软件设计师-从小白到大牛】下午题基础篇:第二章 数据库设计
ER模型:是实体联系模型,跟DBMS无关,也就是跟具体的数据库管理系统没有关系。 概念结构设计:完成ER模型的建模工作。
63 1
|
6月前
|
敏捷开发 中间件 数据处理
【软件设计师-从小白到大牛】上午题基础篇:第六章 软件工程基础(重点中的重点)(1)
【软件设计师-从小白到大牛】上午题基础篇:第六章 软件工程基础(重点中的重点)(1)
56 0
【软件设计师-从小白到大牛】上午题基础篇:第六章 软件工程基础(重点中的重点)(1)
|
6月前
|
程序员 项目管理 监控
【软件设计师-从小白到大牛】上午题基础篇:第六章 软件工程基础(重点中的重点)(3)
【软件设计师-从小白到大牛】上午题基础篇:第六章 软件工程基础(重点中的重点)
36 0
【软件设计师-从小白到大牛】上午题基础篇:第六章 软件工程基础(重点中的重点)(3)
|
6月前
|
缓存 数据处理 芯片
【软件设计师-从小白到大牛】上午题基础篇:第一章 计算机组成与体系结构(3)
检错是指可以检查出错误;纠错是指可以在检查出错误的基础上纠正错误。
44 0
|
6月前
【软件设计师-从小白到大牛】上午题基础篇:第七章 程序设计语言与语言处理程序基础(2)
【软件设计师-从小白到大牛】上午题基础篇:第七章 程序设计语言与语言处理程序基础
28 0
【软件设计师-从小白到大牛】上午题基础篇:第七章 程序设计语言与语言处理程序基础(2)
|
6月前
|
测试技术 Java 数据库
【软件设计师-从小白到大牛】上午题基础篇:第六章 软件工程基础(重点中的重点)(2)
【软件设计师-从小白到大牛】上午题基础篇:第六章 软件工程基础(重点中的重点)
28 0
【软件设计师-从小白到大牛】上午题基础篇:第六章 软件工程基础(重点中的重点)(2)
|
5月前
【中级软件设计师】—(针对上午题)程序设计语言(二十五)
【中级软件设计师】—(针对上午题)程序设计语言(二十五)
|
6月前
|
存储 前端开发 数据库
【软件设计师-从小白到大牛】下午题基础篇:第一章 数据流图(DFD)
顶层图上的数据流:是系统和外部实体之间的联系。而内部数据流在0层图中能体现,因为系统被细分了。 对于数据流图任意一个加工:都应该有输入和输出,箭头有进也有出;黑洞:只有输入,没有输出;奇迹(白洞):只有输出,没有输入。这两种都不符合客观事实。
58 0
|
6月前
|
数据挖掘 大数据 数据库
【软件设计师-从小白到大牛】上午题基础篇:第三章 数据库系统(3)
软硬件故障通常造成数据库中的数据破坏。数据库恢复就是 在尽可能短的时间内,把数据库恢复到故障发生前的状态。 计算机系统的软硬件故障可能会造成数据库中数据被破坏。为了防止这一问题,通常需要 定期将数据库作备份:在进行事务处理时,需要将数据更新写入日志文件,以便发生故障时恢复数据库。 为了保证数据库中数据的安全可靠和正确有效,系统在进行事
49 7