- 博客(22)
- 收藏
- 关注
原创 编译原理与技术(三)——语法分析(四)自底向上-移进归约
归约涉及到一个问题。对于输入串,我们怎么知道哪一部分可以被归约?我们定义,可以被归约的子串称为句柄。显然,句柄可能不是唯一的。
2024-02-06 17:35:35
508
1
原创 编译原理与技术(三)——语法分析(三)自顶向下-LL(1)文法
递归下降分析法通过尝试匹配去确定,如果我们能提取获取字符串的信息,那么我们就可以提前知道更多的信息来进行语法分析,这就是预测分析法。预测分析法不会对若干产生式进行尝试,自然也没有回溯,它会通过向前看一些记号来预测需要用到的产生式。预测分析法接受LL(k)文法。实际应用中,最常用的是LL(1)。 举个例子。 举个例子。LL(1)文法有两个定义条件。对于条件一。 其原因是。对于条件二。其原因是。举个例子。由此导出LL(1)文法的性质。上图是非递归的预测分析法的整体结构。该方法依赖于分析表,可以说该分析法是由
2024-02-06 17:14:44
391
1
原创 编译原理与技术(三)——语法分析(二)自顶向下-递归下降
自顶向下(Top-down):针对输入串,从文法的开始符号出发,尝试根据产生式规则出该输入串。从根部开始构造语法树。自底向上(Bottom-up):针对输入串,尝试根据产生式规则到文法的开始符号。从叶子开始构造语法树。
2024-02-06 16:38:08
983
1
原创 编译原理与技术(三)——语法分析(一)上下文无关文法
词法规则定义了词素的结构,语法规则定义了句型的结构。词法规则远远简单于语法规则,与其使用上下文无关文法去描述,不如使用正则表达式去描述,因为从正则表达式构造出的词法分析器效率高。而正则表达式描述语言的能力弱于上下文无关文法,即正则表达式能描述的语言,上下文无关文法都能描述,但上下文无关文法能描述的语言,正则表达式却不一定能够描述。故语法分析采用上下文无关文法。所以从描述工具上看,词法分析与语法分析使用的基本工具不同。
2024-02-04 08:09:36
1453
1
原创 C++(CPP)的部分高级特性
用法功能定义一个名为v1,元素类型为T的空vector或用v2中的元素初始化v1v3中包含n个值为val的元素v3中包含了n个默认值初始化的元素使用 a, b, c... 初始化 v5二维数组初始化用法功能定义一个名为name的map,其键类型为k_type,值类型为value_type。
2024-02-03 19:01:21
774
1
原创 编译原理与技术(二)——词法分析(三)词法分析器的构造
正则表达式是匹配词法单元的工具。有限自动机是形式化描述匹配过程的工具。因此用正则表达式去匹配词法单元可以通过NFA或DFA。而DFA由NFA推出,NFA由正则表达式推出,即DFA与推出其的NFA等价,NFA与推出其的正则表达式等价,所以DFA与构造它的正则表达式等价。而DFA的形式有许多,区别两个DFA的方法是看这两个DFA对应的最简DFA是否一样,这也就引出了判定两个正则表达式是否等价的方法——看这两个正则表达式各自对应的最简DFA是否一样。
2024-02-02 12:42:17
1376
原创 编译原理与技术(二)——词法分析(二)有限自动机
我们已经找到了匹配词法单元的工具——正则表达式。接下来的问题就是怎么匹配?如何判定一个串匹配某个正则表达式?如何形式化地描述这个匹配过程?还是上节的例子。在上节中,我粗略地介绍了这个概念。有限自动机就是形式化判定是否匹配的工具。在介绍有限自动机前,先介绍。我们可以用状态转换图来匹配词法单元。例如下面三个例子。像上面这种状态转换图可以去匹配一个串,并且结合状态转化图的匹配过程,我们不难发现,我们可以用swicth语句和条件判断语句去实现。举个例子。现在抛出两个问题。
2024-02-01 22:27:08
698
1
原创 编译原理与技术(一)——编译器的整体结构
使用编辑器创建C语言源文件,并保存为以c为扩展名结尾的源文件。比如下面的C程序保存为。创建该文件后,该文件中的程序代码以字节序列的形式存储在文件中。每个字节都有一个对应于某个字符的值。比如,第一个字节的值为35,对应于字符“#”;第二个字节值为105,对应于字符“i”,以此类推。但这些字节仅仅表示一个个字符,机器不能读懂这些信息,所以我们需要一些程序来将这些信息翻译成机器能读懂的信息,而这些程序就组成了。在编译系统中,最主要的就是。我们只需要把作为输入,让其经过编译系统的处理,便可得到。
2024-02-01 18:55:46
1073
1
原创 xv6(RISC-V)操作系统源码分析导读
为了学习的有效性,我通过写博客的方式记录了我学习xv6源码的过程。在本次课设中,我负责硬件编程、操作系统的启动、陷阱(系统调用、外部设备中断、定时器中断)与管道。为了完成这个课设,我通过网络向许多素未相识但仍热情相助的大佬们进行请教,通过网络查阅了大量的资料,翻看了许多手册与说明书,并虚心学习了著名的xv6源码。在学习过程中,我深刻地体会到xv6源码以及操作系统的精妙,我从中学到了许多令我受益匪浅的知识,所以我认为这次的操作系统课设是非常值得的。
2024-01-27 23:36:50
707
原创 xv6(RISC-V)操作系统源码分析第七节——进程的调度与交互
任何操作系统运行的进程数量都可能超过计算机的CPU数量,因此必须制定一个方案,使各进程能够分时共享CPU。这就涉及到进程的切换,这种切换就是调度。调度的目的是实现多路复用。
2024-01-27 19:26:30
1571
原创 xv6(RISC-V)操作系统源码分析第六节——锁
本文通过介绍程序并发执行可能带来的问题引入了锁这一概念,接着介绍了锁的实现与相关注意事项。
2023-12-29 11:39:41
1268
2
原创 xv6(RISC-V)操作系统源码分析第五节——中断与设备驱动
本节重点讲述设备中断、设备驱动程序与定时器中断,至此,xv6的所有陷阱全部讲解完毕。
2023-12-28 22:14:09
1149
1
原创 xv6(RISC-V)操作系统源码分析第四节——陷阱
本节重点讲述xv6的陷阱机制的实现,尤其是对系统调用这一重要的陷阱进行较为详细地讲解。
2023-12-28 13:02:50
1177
3
原创 xv6(RISC-V)操作系统源码分析第三节——地址映射与内存分配
第三节重点讲解了xv6是如何利用分页硬件及相关分页机制来实现地址映射和内存分配这两个关键技术。
2023-12-24 23:49:12
2630
原创 Ubuntu虚拟机连接wifi操作步骤
(2)数据线连接PC与手机,手机打开个人热点的USB网络共享。3.执行命令成功后,关闭有线连接(拔掉网线或关闭热点)1.先通过有线连接,让计算机能够上网。
2023-12-20 17:10:35
2296
原创 数据结构 一、绪论
该博客主要记录我在数据结构学习过程中,遇到的重点和难点,该数据结构博客虽然基于严蔚敏的第三版《数据结构》,但在学习过程中,对于一些内容,我做了较为深入地学习与实践。
2023-07-17 21:46:51
127
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人