HNU-编译原理-讨论课1
讨论课安排:2次4学时,分别完成四大主题讨论
分组:每个班分为8组,每组4~5人,自选组长1人
要求和说明:
- 以小组为单位上台报告;每次每组汇报2个小主题,每组按要求在2个小主题中各选1题(共2题)作为报告内容;小组为每个小主题各选1~2名代表作为报告人展示PPT,PPT中需说清楚小组成员分工;主讲人不可重复。
- 一个组10分钟:每个小主题5分钟,先统一汇报完主题一后再进行主题二的汇报。
- 制作PPT时要说清相关算法或者解决问题的思路,并结合具体实例进行讲解,如:习题中有相关例题,应选择相关例题;实验中有相关示例,可结合相关示例。
- 每次上课,学生自带电脑和讨论课PPT及相关素材,组长负责清点到课人数,汇报给班长,汇总后报助教和任课老师。
- 每个小组每堂讨论课后,要写出总结报告(电子稿),提交老师,于小班课当周内发给助教和教师;小组长将本组报告PPT(每组两份,一个主题1份)于小班课当周内发给助教和教师。
- 提交的总结报告需包含本组报告主题内容的详细介绍,以及其他小组分享内容的简要总结。
- 千万不要从网上下载,然后照本宣科,抄录照搬记0分。
第一次讨论课
小主题一(每组任选其一):
- 编译发展历史,包括编译原理/理论的发展史、编译工程/技术的发展史以及编译史上的名人;
- 编译原理中用到的数学知识及相关数学概念的简要介绍;
- 编译原理学科的研究现状及主流研究方向简介,需调研编译领域的最新顶会论文;
- 编译原理在其他学科中的应用,包括在其他学科工程实践中的应用以及最新科研中的应用;
- 主流编译器介绍,包括各自历史、特点、区别与联系。
小主题二(每组任选其一):
- 词法分析器;
- 正则表达式;
- NFA转DFA;
- DFA最小化;
- DFA代码化;
- TINY;
- LEX。
小班讨论PPT如下:
编译原理第一次小班总结
小主题一:编译原理在其他学科中的应用包括在其他学科工程实践中的应用以及最新科研中的应用
编译原理在应用领域的示例
编程语言设计和实现:
编译原理直接应用于编程语言的设计和实现。编译器用于将高级编程语言翻译成机器代码,同时语言设计者使用编译原理的概念来创建新的编程语言。
自然语言处理(NLP):
编译原理中的词法分析和语法分析技术在自然语言处理中用于解析和理解文本,从而帮助机器理解和生成自然语言。
数据库管理系统(DBMS):
查询编译器用于解析SQL查询并将其转化为可执行的查询计划,以便数据库管理系统可以高效地检索和操作数据。
硬件描述语言:
硬件描述语言(如VHDL和Verilog)使用编译原理的技术来将硬件电路描述翻译成可在FPGA或ASIC上实现的逻辑。
虚拟机和解释器:
编译原理的原则也用于创建虚拟机和解释器(Java与JVM),它们用于执行脚本语言和字节码。
优化编译器:
编译原理中的优化技术用于改进代码的性能,例如,提高程序的执行速度和减少内存使用。
上学期CS课程讨论课7的challenge减少程序存储占用与OS课程Lab系列中有遇到
并行计算:
在并行计算领域,编译原理的原理用于生成并行代码,
以充分利用多核处理器和分布式系统的性能。
机器学习:
在深度学习和机器学习领域,编译原理的技术用于优化计算图的执行,以加速训练和推断过程。
安全性和隐私:
编译原理有助于开发安全编码实践,以减少漏洞和攻击面。它还可以用于静态分析和漏洞检测。
编译原理与自然语言处理
详细讲解:自然语言中的词法分析与语法分析技术
词法分析(Lexical Analysis):
应用:词法分析是将文本分解成离散单元(标记)的过程,如单词或标点符号。它有助于理解文本的结构,识别单词,并为后续的语法分析和语义分析提供输入。
示例:在自然语言处理中,词法分析通常涉及将文本分解成单词和标点符号。
例如,将句子 "I love coding." 分解成 ["I", "love", "coding", "."] 这些词法单元,以便后续的处理。
三个中间步骤:
扫描(Scanning):文本被扫描并分解成连续的字符,然后分析器识别出每个标记的起始和结束位置。
识别标记(Tokenization):标记(Tokens)是文本的基本构建块,通常是单词或标点符号。标记包括单词(如名词、动词、形容词)、标点符号(如句号、逗号)等。
构建符号表(Symbol Table):标记与其在文本中的位置一起存储在符号表中,以便后续的处理阶段可以访问它们。
语法分析(Syntax Analysis):
应用:语法分析确定文本的结构,即句子中单词之间的语法关系。这有助于理解句子的语法,构建语法树,以及识别语法错误。
示例:在自然语言处理中,语法分析可用于确定句子的结构,例如主语、谓语和宾语。例如,对于句子 "The cat chases the mouse.",语法分析可以生成如下的语法树:
这个语法树显示了句子的结构,其中NP表示名词短语,
DT表示冠词,NN表示名词,VP表示动词短语,VB表示动词。
两个中间步骤:
分析语法规则(Parsing Grammar Rules):语法分析器使用一组语法规则,这些规则定义了语言的结构和允许的句法。这些规则通常以上下文无关文法(CFG)的形式表示。
句法树生成(Syntax Tree Generation):语法分析器根据语法规则将文本的标记组合成语法树,其中树的节点表示文本的不同部分,如名词短语(NP)和动词短语(VP)。
应用实例:
自动纠错:
应用:编译原理技术可以用于自然语言处理中的拼写检查和语法纠错。语法分析帮助识别句子中的语法错误,并建议修复。
示例:当用户输入 "She are a student.",语法分析可以检测到 "are" 在这个上下文中不正确,应该是 "is",然后提供纠正建议,使句子变为 "She is a student."。
信息抽取:
应用:语法分析有助于识别句子中的实体、关系和事件,从而进行信息抽取,例如从新闻文章中提取关键信息。
示例:在一篇新闻文章中,语法分析可以帮助识别主题、主语、动词和宾语,从而构建信息抽取规则,以提取有关事件、地点和时间的信息。
机器翻译:
应用:语法分析用于将源语言句子分解成语法结构,并生成目标语言句子的语法结构,从而进行机器翻译。
示例:在机器翻译中,语法分析帮助理解源语言和目标语言之间的句法对应关系,从而更准确地进行翻译。例如,将英语句子 "I have a red car." 翻译成法语时需要考虑语法结构和词序,如 "J'ai une voiture rouge."
编译原理的其他运用
量子计算:编译原理用于优化和管理量子程序,以实现更高效的量子计算。
自动驾驶和机器人:编译原理的技术被用于编写和优化自动驾驶车辆和机器人的控制软件。
区块链和智能合约:编译原理技术被用于编写智能合约并对其进行验证,以确保其安全性和正确性。
智能合约(其在代码编写阶段需要使用到编译原理基础知识)
以信息化方式传播、验证或执行合同的计算机协议(允许在不存在第三方的情况下进行可信交易)
量子编程:随着量子计算的发展,新的编程语言和编译器涌现,以支持量子计算机的编程。
总结来说,编译原理是一个跨学科的领域,其原理和技术对于许多领域的科研和工程实践都具有重要意义,尤其是在处理复杂的计算和数据处理任务时。
小主题二:NFA转DFA
状态机引入
NFA——不确定的有穷自动机
DFA——确定的有穷自动机
DFA与NFA的区别
1、对于字母表中的每个符号,DFA中的每个状态都有且只有 至多有一条关于这个符号的出边(exiting transition)。NFA则未必,在同一个状态上可能有零条、一条甚至多条关于某一个符号的出边。
2、DFA的转换箭头上的标签必须是字母表中的,但NFA可以有标识为ϵ 的边,NFA的状态可能有零条、一条甚至多条ϵ 边。
DFA与NFA的等价性证明
假设: 我们有一个NFA,它包括状态集合Q、输入字母表Σ、状态转移函数δ、初始状态q0、和接受状态集合F。
目标: 我们的目标是构造一个等价的DFA,该DFA包括状态集合Q'、输入字母表Σ、状态转移函数δ'、初始状态q0'、和接受状态集合F'。
证明过程:
构建DFA状态集合Q': 创建一个DFA状态集合Q',其中每个DFA状态对应于NFA状态集合的某个子集。开始时,DFA只包含NFA的初始状态的ε闭包。
处理状态转移: 对于DFA中的每个状态q',以及每个输入符号a ∈ Σ,计算从q'经过输入符号a可以到达的NFA状态集合,并计算这些状态的ε闭包。这将成为DFA中的下一个状态q'。确保在DFA状态q'中,对于每个输入符号a,只有一个确定的下一个状态。
标记接受状态: 如果DFA状态q'包含NFA的任何接受状态,则DFA状态q'也是接受状态。
继续构建DFA: 重复步骤2和步骤3,直到不再出现新的DFA状态。这可以通过使用队列或其他数据结构来实现,以确保所有状态都已处理。
构建DFA状态转移函数δ': 根据得到的DFA状态集合和转移信息,构建DFA状态转移函数δ',将输入符号映射到下一个状态。
构建DFA的接受状态集合F': 通过步骤3的标记接受状态,确定DFA的接受状态集合F'。
证明等价性: 通过构建等效的DFA,已经成功证明了NFA和DFA是等价的,即它们都接受相同的语言。这是因为你以一种确定性的方式模拟了NFA,消除了非确定性。
NFA转DFA
ε_closure(s)表示由状态 s 经由条件 ε 可以到达的所有状态的集合
将集合记为状态A,B,C,D
其中我们定义ε_closure(0)为状态A,状态A{0,1,2,4,7}经过符号a可以到达{3,8},ε_closure(3)={1,2,3,4,6,7}
ε_closure(8)={8}
D状态中包含终态9,需要注意
得到状态转换表
a | b | |
A | B | C |
B | B | D |
C | B | C |
D | B | C |
由状态转换表得到状态转换图
其他组的简要总结
其他小组很多都选择了NFA转DFA,大都使用了子集构造法,但方法并不完全一样
部分小组在子集构造时,每出现一个子集都赋为一个新状态,而不考虑集合元素相同的情况,这样会导致最后写状态转换图时,还要进行化简。
另一方面
部分小组采用了上图的方式,与我组不同,以初态集合开始,直接寻找输入a,b的下一状态,相当于把我们组的一、两步合并来做
相关文章:

HNU-编译原理-讨论课1
讨论课安排:2次4学时,分别完成四大主题讨论 分组:每个班分为8组,每组4~5人,自选组长1人 要求和说明: 以小组为单位上台报告;每次每组汇报2个小主题,每组按要求在2个小主题中各选1…...

【Linux】关于Nginx的详细使用,部署项目
前言: 今天小编给大家带来的是关于Nginx的详细使用,部署项目,希望可以给正在学习,工作的你带来有效的帮助! 一,Nginx简介 Nginx是一个高性能的开源Web服务器和反向代理服务器。它最初由Igor Sysoev在2004年…...
编写 navigation2 控制器插件
简介 本教程展示了如何创建自己的控制器插件。在本教程中,我们将基于这篇论文实现纯追踪路径跟踪算法。建议您阅读该论文。 注意:本教程基于 Nav2 堆栈中以前存在的简化版本的 Regulated Pure Pursuit 控制器。您可以在此处找到与本教程相匹配的源代…...

计算机网络 第六章应用层
文章目录 1 应用层功能概述2 网络应用模型:客户服务器(CS)3 网络应用模型:PeerToPeer(P2P)4 域名和域名系统5 常见域名解析服务器6 两种域名解析过程7 什么是FTP8 FTP的工作原理9 EMail的组成 1 应用层功能概述 2 网络应用模型:客户服务器(CS…...
人工智能领域CCF推荐国际学术刊物最新目录(全)
2021年1月,CCF决定启动新一轮中国计算机学会推荐国际学术会议和期刊目录调整工作并委托CCF学术工作委员会组织实施。 2023年3月8日, 中国计算机学会正式发布了2022版《中国计算机学会推荐国际学术会议和期刊目录》(以下简称《目录》) 。 相较于上一版目录࿰…...

实现基于 Azure DevOps 的数据库 CI/CD 最佳实践
数据库变更一直是整个应用发布过程中效率最低、流程最复杂、风险最高的环节,也是 DevOps 流程中最难以攻克的阵地。那我们是否能在具体的 CI/CD 流程中,像处理代码那样处理数据库变更呢? DORA 调研报告 DORA(DevOps Research &am…...
上海实习小记
8月3日入职10月27日离职,原本还想做满3个月再走,可惜公司提早要迁到成都,就只好 离职了回学校了。在博客随便写写记录一下这几个月的生活吧,想到哪里写到哪里 实习的公司是一个小公司,开发一款类似于咸鱼之王的游戏&am…...

uniapp实现路线规划
UniApp是一个基于Vue.js框架开发的跨平台应用开发框架,可以同时构建iOS、Android、H5等多个平台的应用。它使用了基于前端技术栈的Web开发方式,通过编写一套代码,即可在不同平台上运行和发布应用。 UniApp具有以下特点: 跨平台开…...

飞利浦双串口51单片机485网关
主要功能将PC端的数据接收下来,分发到不同的设备,也是轮询设备数据读取回来,打包回传到PC端,数据包包头包尾识别,数据校验,接收超时处理,将协议结构化处理,协议的改动不需要改动程序…...

生态扩展:Flink Doris Connector
生态扩展:Flink Doris Connector 官网地址: https://doris.apache.org/zh-CN/docs/dev/ecosystem/flink-doris-connector flink的安装: tar -zxvf flink-1.16.0-bin-scala_2.12.tgz mv flink-1.16.0-bin-scala_2.12.tgz /opt/flinkflink环境…...

HarmonyOS(二)—— 初识ArkTS开发语言(上)之TypeScript入门
前言 Mozilla创造了JS,Microsoft创建了TS,而Huawei进一步推出了ArkTS。因此在学习使用ArkTS前,需要掌握基本的TS开发技能。 ArkTS介绍 ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript(简称TS)的基础上&am…...

从零开始实现神经网络(一)_NN神经网络
参考文章:神经网络介绍 一、神经元 这一神经网络的基本单元,神经元接受输入,对它们进行一些数学运算,并产生一个输出。 这里有三步。 首先,将每个输入(X1)乘以一个权重: 接下来&…...

C语言 每日一题 Day10
1.使用函数判断完全平方数 本题要求实现一个判断整数是否为完全平方数的简单函数。 函数接口定义: int IsSquare(int n); 其中n是用户传入的参数,在长整型范围内。如果n是完全平方数,则函数IsSquare必须返回1,否则返回0。 代码实…...

C++继承——矩形和长方体
Rectangle矩形类 /*矩形类*/ class Rectangle { private:double L 0;double W 0; public:Rectangle() default;Rectangle(double a, double b);double GetArea(); /*矩形面积*/double GetGirth(); /*矩形周长*/ }; /*构造函数*/ Rectangle::Rectangle(double a, double b) …...

代码随想录打卡第五十八天|● 583. 两个字符串的删除操作 ● 72. 编辑距离
583. 两个字符串的删除操作 题目: 给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 题目链接: 583. 两个字符串的删除操作 解题思路: dp数组的含义&am…...
面试流程之——程序员如何写项目经验
在简历中介绍IT项目经验,你可以遵循以下步骤: 明确项目目标:首先,清晰地阐述项目的目标。这可以是提升某个软件的性能,改进某个系统的用户界面,或者增加某款产品的功能。让读者了解你的工作与项目的整体目…...

框架安全-CVE 漏洞复现DjangoFlaskNode.jsJQuery框架漏洞复现
目录 服务攻防-框架安全&CVE复现&Django&Flask&Node.JS&JQuery漏洞复现中间件列表介绍常见语言开发框架Python开发框架安全-Django&Flask漏洞复现Django开发框架漏洞复现CVE-2019-14234(Django JSONField/HStoreField SQL注入漏洞ÿ…...

基于SSM的理发店管理系统
基于SSM的理发店管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringSpringMVCMyBatis工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 公告信息 管理员界面 用户界面 摘要 基于SSM(Spring、Spring MVC、…...

2.Spark的工作与架构原理
概述 目标: spark的工作原理spark数据处理通用流程rdd 什么是rddrdd 的特点 spark架构 spark架构相关进程spark架构原理 spark的工作原理 spark 的工作原理,如下图 图中中间部分是spark集群,也可以是基于 yarn 的,图上可以…...

qt-C++笔记之带有倒计数显示的按钮,计时期间按钮锁定
qt-C笔记之带有倒计数显示的按钮,计时期间按钮锁定 code review! 文章目录 qt-C笔记之带有倒计数显示的按钮,计时期间按钮锁定1.运行2.main.cc3.main.pro 1.运行 2.main.cc 代码 #include <QApplication> #include <QPushButton> #includ…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...