《编译原理》阅读笔记:p25-p32

《编译原理》学习第 5 天,p25-p32总结,总计 8 页。

一、技术总结

1.lexical

lexical这个单词后续会经常用到,所以首先要搞懂它的英文意思,不然看到中文的“词法,语法,文法”这三个词的时候就会懵了——lexical对应这三个里面的哪一个?

(1)lexical: lexicon + al,加al后缀,表明lexical是一个形容词(adjective)。

(2)lexicon: 词根是lexis(a word)。all the words used in a particular language。意思是“全部词汇”,“词典”。

(3)lexical: adj. relating to words,词汇(word)相关的。

所以lexical 对应着“词(word)法”, lexical analyzer称为词法分析器。

2.production

(1)定义

p26,以C语言中的if-else 语句为例:

if (expression) statement else statement

如果使用expr表expression,使用stmt表示statement,那么上述语句就可以表示成:

stmt -> if (expr) stmt else stmt

->表示“can have the form”。形如“stmt -> if (expr) stmt else stmt”这样的rule称为production。

(2)作用

书中没有给出明确的定义,按照书中的定义,长“stmt -> if (expr) stmt else stmt”这样的就叫做production, 再简化一下还可写成: x -> y,“ x -> y”这个production的含义是什么呢?它的含义是x可以转为y。

(3)left side & right side

以 “stmt -> if (expr) stmt else stmt” 这个production为例,-> 左边的部分称为production的left side,-> 左边的部分称为production的right side。

3.token/terminal

在production中,lexical element(如:if, else)和 parenthsis称为token,也称为terminal、terminal symbol。

p27, “we assume that digits, signs such as <=, and boldface strings such as while are terminals”。根据这句话,terminal包含:(1)digit:如1,2,3。(2)signs: 如 <=。(3)boldface string: 如while。这里用boldface string很不好,boldface是从印刷的角度来说的,那非boldface的string是不是terminal呢?

4.nonterminal

stmt -> if (expr) stmt else stmt" 这个production

p26, variables like expr and stmt represent sequences of tokens and are called nonterminals。在这里,作者没有给出nonterminal的明确定义,暂且根据这句话的意思把像expr和stmt这样的variable称为nonterminal,然后继续往下阅读。

5.context-free grammar

(1)定义

首先,得对context-free grammar下定义,什么是context-free grammar?p26, In this section, we introduce a notation, called a context-free grammar(grammar, for short), for specifying the synaxt of a language。用于指定语言的语法的符号称为上下文无关文法,简写为grammar。

context-free grammar由四部分构成:

(1)a set of terminals。

(2)a set of nonterminals。

(3)a set of production。

(4)a start symbol。

“a designation of one of the nonterminals as the start symbol”——根据书中的定义,start symbol是从nonterminals中指定的。

6.|符号(or)

p27, For notational convenience, productions with the same nonterminals on the left can have their right sides grouped, with the algernative right sides separated by the symbol |, which we read as “or.”——为了方便表示,可以把多个具有相同left side的production,写成一个production,production的right side用符号| 隔开,|读者“or”。

示例:

以7,3-1,9-5+2, 为例,我们把数字称为digit(即1是一个digit, 2是一个digit, 3是一个digtit…), 把用+号或-号隔开的expression称为list( "3-1"即是一个list,"9-5+2"是一个list,1等数字是特殊的list),那么上面这三个expression使用production来表示可以写成:

(1)digit -> 0 | 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9

(2)list -> digit

(3)list -> list - digit

(4)list -> list + digit

因为(2)、(3)、(4)这3个production的left side是一样的,都是list, 那么可以写成一个production:

list -> digit | list - digit | list + digit

7.production for nonterminal

p27, We say a production is for a nonterminal if the nonterminal appears on the left side of the production。

如果一个nonterminal出现在production的left side, 那么我们就说这个production是这个nonterminal的production(这里有点拗口,书上用的是for表示,意思就是这个production是归属于这个nonterminal的)。

当看到“production for nonterminal”我们就要想到nonterminal是在production的left side。

8.parse tree

(1)tree

关于tree相关的定义,参考维基百科即可。书中提到的interior node,实际就是我们常说的internal node。

(2)定义

grammar可以用tree来表示,这样的tree称为parse tree。parse tree描绘了从start symbol生成string(如:9-5+2)的过程。

二、其它

alphabet, string, language这三个概念书中没有严格的定义,但却又是核心概念,可以参考《Introduction to Automata Theory Languages and Computation》这本书。

今天的读书笔记写了很多,也是因为书上很多概念没有明确的定义,需要把相关的内容全部记下然,然后做交叉验证。

四、参考资料

1. 编程

(1)Alfred V. Aho,Monica S. Lam,Ravi Sethi,Jeffrey D. Ullman,《编译原理(英文版·第1版)》:https://book.douban.com/subject/5416783/

2. 英语

(1)Etymology Dictionary:https://www.etymonline.com

(2) Cambridge Dictionary:https://dictionary.cambridge.org
在这里插入图片描述

欢迎搜索及关注:编程人(a_codists)

内容概要:本文围绕基于风光储能和需求响应的微电网日前经济调度问题,提出了一套完整的Python代码实现方案。研究综合考虑风能、光伏等可再生能源的出力不确定性、储能系统的动态充放电特性以及需求侧响应机制,构建了以最小化系统综合运行成本为目标的优化调度模型。该模型充分体现了对可再生能源的高效消纳、系统经济性提升与供需平衡调控的能力,通过Python编程结合优化求解器实现了模型的求解与仿真验证,为微电网能量管理系统的设计与科研分析提供了可复现的技术路径与实践参考。; 适合人群:具备一定Python编程基础和电力系统优化调度知识的科研人员、工程技术人员及高校电气工程、能源系统等相关专业的研究生。; 使用场景及目标:①应用于微电网、智能配电网及综合能源系统的科研建模与仿真分析;②帮助读者深入理解含高比例可再生能源的电力系统日前调度建模方法、目标函数构造与约束条件处理技巧;③为实际工程中实现低碳、经济、可靠的微电网运行提供算法支持与决策依据。; 阅读建议:建议读者结合文档中的代码实例,系统学习优化模型的数学表达与编程实现过程,重点关注变量定义、目标函数构建、系统约束(如功率平衡、储能动态、机组出力等)的编码实现,并尝试调整负荷、新能源出力等输入数据进行多场景仿真,以深入掌握微电网调度策略的灵敏度分析与优化效果评估方法。
### Spring源码面试终结者:31道核心题,源码级拆解IOC与AOP 这份资源不是“面试八股文”,而是对Spring、Spring Boot核心原理的**源码级深度拆解**。网上面试题答案大多浮于表面,无法应对面试官的连环追问。我结合源码阅读和实战踩坑,整理了这份**近10万字的硬核指南**,系统梳理了大厂面试中最棘手的31道Spring核心题。 **【资源核心内容】** - **IOC与DI王者解析**:深入BeanFactory与ApplicationContext层级设计,对比三种依赖注入方式,并用图文拆解三级缓存解决循环依赖的源码流程。 - **AOP与事务底层原理**:彻底讲透动态代理选择策略,深度分析@Transactional失效的10大经典场景及源码级解决方案。 - **Spring MVC与自动装配**:从DispatcherServlet的9大组件到SpringBoot的SPI机制,理清自动配置的完整加载链路。 - **高频追问与满分话术**:每道题配有“低分vs高分回答”对比,帮你精准拿捏面试官想要的“源码级理解”。 **【特色】** 拒绝罗列概念,每道题都从“核心考点”出发,深入到AbstractApplicationContext、TransactionInterceptor等Spring源码,帮助你在理解设计思想的同时,具备手写简易IOC容器的能力。 **【适合谁看】** 备战阿里、字节、美团等大厂面试的Java开发;对Spring原理一知半解,想系统提升源码阅读能力的开发者;希望从“会用”进阶到“懂原理”的技术人。 希望这份整理能帮你构建完整的Spring知识体系,轻松应对面试官的灵魂追问!
代码下载链接: https://pan.quark.cn/s/a4b39357ea24 二进制补码、小数的补码及运算规则 一、补码的概念和原理 补码是一种普遍的概念,在计算机系统中,所有数值均采用补码形式进行表示(存储)。补码的核心特性在于:借助补码,能够将符号位与其它位进行统一处理;同时,减法运算亦可转化为加法运算来执行。补码的构成方式是在原码的基础上进行适当调整,原码表示法在数值前增加了一位符号位(即最高位用作符号位):正数该位为 0,负数该位为 1(0存在两种形式:+0 和-0),其余位用于表示数值的大小。 二、补码的表示和转换 补码的表示形式可区分为两种:整数的补码和小数的补码。 整数的补码表示方式: 1. 正数的补码与其原码相同(即自身) 2. 负数的补码通过原码取反,然后在最低位加 1,符号位保持不变 小数的补码表示方式: 1. 正小数的补码与其原码一致 2. 负小数的补码通过原码取反,然后在最低位加 1,符号位维持不变 三、补码的运算规则 补码的运算规则可归纳为三种:加法、减法和乘法。 1. 加法运算规则: [X+Y]补 = [X]补 + [Y]补 2. 减法运算规则: [X-Y]补 = [X]补 - [Y]补 = [X]补 + [-Y]补 3. 乘法运算规则: [X*Y]补= [X]补×[Y]补,即乘数(被乘数)相乘的补码等于补码的相乘。 需要强调的是,进行乘法运算时必须执行符号扩展:Nbit 乘数 和 Nbit 被乘数 都需符号扩展到 2Nbit,之后再进行直接相乘。 四、小数 Fraction 的补码表示和运算规则 小数 Fraction 的补码表示方式: 最高位为符号位,小数点位于符号位之后,其后的第一位代表 1/2,再后一位代表1/4,再...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值