更换评论系统
关于评论系统的更换。
前几天有位朋友给我留言,让我挺受感动的:
Eason²⁰²⁰:
Hi, 初次造访,你的知识储备让我感到震撼,我会向你学习 :smile:
本来想回复他,可是来必力的评论竟然无法在页面下显示,让我颇为郁闷,网上查阅了相关资料后依旧没有解决,所以最后决定更换成valine评论系统,目前感觉确实更好用一些,不过之前的评论是没法迁移过来了(尽管比较少),这里还是稍微有点可惜。
评论系统参考资料(leancloud)记得选国际版:
https://yuanmomo.net/2019/06/20/hexo-add-valine/
https://tding.top/archives/ed8b904f.html
http://www.zhaojun.im/hexo-valine-admin/
https://github.com/DesertsP/Valine-Admin
https://mrhuanhao.cn/2020/03/25/emailreply/
备注:
leancloud数据迁移参考资料:
https://felixxiong.github.io/2020/09 ...
国防科技大学 编译原理 第7讲 语法分析——自上而下分析1
课程主页:
https://www.icourse163.org/course/NUDT-1003101005?tid=1460976445
这次回顾第7讲:语法分析——自上而下分析1。
第7讲 语法分析——自上而下分析1语法分析基本概念回顾编译程序总框:
语法分析的前提
对语言的语法结构进行描述
采用正规式和有限自动机描述和识别语言的单词符号
用上下文无关文法来描述语法规则
上下文无关文法
上下文无关文法$G$是一个四元组
G=(V_T,V_N,S,P)
其中
$V_T$:终结符(Terminal)集合(非空)
$V_N$:非终结符(Noterminal)集合(非空),且$V_T \cap V_N=\varnothing$
$S$:文法的开始符号,$S\in V_N$
$P$:产生式集合(有限),每个产生式形式为
$P\to \alpha, P\in V_N, \alpha∈ (V_T \cup V_N)^{\star}$
开始符$S$至少必须在某个产生式的左部出现一次
定义:称$αAβ$直接推出$αγβ$,即
αAβ\Rightarrow αγβ仅当$A → ...
国防科技大学 编译原理 第6讲 词法分析3
课程主页:
https://www.icourse163.org/course/NUDT-1003101005?tid=1460976445
这次回顾第6讲:词法分析3。
第6讲 词法分析3有限自动机的等价性有限自动机的等价性——NFA转换成DFADFA与NFA的等价性
对于每个NFA M存在一个DFA $M’$,使得$L(M)=L(M’)$
等价性证明
NFA的确定化
思路: NFA 和DFA的差别
NFA
DFA
初始状态
不唯一
唯一
弧上的标记
字(单字符字、$ε$)
字符
转换关系
非确定
确定
DFA与NFA的等价性证明
假定NFA $M=\langle S, \Sigma, \delta, S_0, F \rangle$,我们对$M$的状态转换图进行以下改造:
引进新的初态结点$X$和终态结点$Y$,$X,Y∉S$,从$X$到$S_0$中任意状态结点连一条$ε$箭弧, 从$F$中任意状态结点连一条$ε$箭弧到$Y$。(解决初始状态唯一性)
对$M$的状态转换图进一步施行替换,其中$k$是新引入的状态。(简化弧上的标记) ...
国防科技大学 编译原理 第5讲 词法分析2
课程主页:
https://www.icourse163.org/course/NUDT-1003101005?tid=1460976445
这次回顾第5讲:词法分析2。
第5讲 词法分析2词法规则的形式化——正规集和正规式单词集合、正规集和正规式
程序设计语言的单词符号都是一些特殊的字符串
用正规集和正规表达式(简称正规式)来描述
正规集可以用正规式表示
正规式是表示正规集一种方法
一个字集合是正规集当且仅当它能用正规式表示
正规式和正规集的递归定义
对给定的字母表$Σ$
$\varepsilon$和$\varnothing$都是$Σ$上的正规式,它们所表示的正规集为$\{\varepsilon\}$和$\varnothing$;
任何$a∈Σ$,$a$是$Σ$上的正规式,它所表示的正规集为$\{a\}$;
假定$e_1$和$e_2$都是$Σ$上的正规式,它们所表示的正规集为$L(e_1)$和$L(e_2)$,则
$(e_1|e_2)$为正规式,它所表示的正规集为$L(e_1)∪L(e_2)$
$(e_1.e_2)$为正规式,它所表示的正规集为$L(e_1)L(e_2)$
$ ...
国防科技大学 编译原理 第4讲 词法分析1
课程主页:
https://www.icourse163.org/course/NUDT-1003101005?tid=1460976445
这次回顾第4讲:词法分析1。
第4讲 词法分析1词法分析概述词法分析的任务
词法分析的任务
从左至右逐个字符地对源程序进行扫描,产生一个个单词符号
词法分析器(Lexical Analyzer)
扫描器(Scanner)
执行词法分析的程序
词法分析器的功能
功能
输入源程序、输出单词符号
单词符号的种类
基本字:如begin,repeat,for,…
标识符:用来表示各种名字,如变量名、数组名和过程名
常数:各种类型的常数
运算符:+,-,*,/,…
界符:逗号、分号、括号和空白
词法分析器的输出
输出的单词符号的表示形式
(单词种别,单词自身的值)
单词种别通常用整数编码表示
若一个种别只有一个单词符号,则种别编码就代表该单词符号。假定基本字、运算符和界符都是一符一种。
若一个种别有多个单词符号,则对于每个单词符号,给出种别编码和自身的值。
标识符单列一种;标识符自身的值表示成按机器字节划分的内部码
常数按类型分种; ...
国防科技大学 编译原理 第3讲 高级程序设计语言的语法描述
课程主页:
https://www.icourse163.org/course/NUDT-1003101005?tid=1460976445
这次回顾第3讲:高级程序设计语言的语法描述。
第3讲 高级程序设计语言的语法描述文法
文法:描述语言的语法结构的形式规则
假设我们有如下文法:
```<句子> -> <主语><谓语><间接宾语><直接宾语><主语> -> <代词><谓语> -> <动词><间接宾语> -> <代词><直接宾语> -> <冠词> <名词><代词> -> He<代词> -> me<名词> -> book<冠词> -> a<动词> -> gave
- 考虑句子:He gave me a book.
- ```
<句子>
= ...
国防科技大学 编译原理 第2讲 高级程序设计语言概述
课程主页:
https://www.icourse163.org/course/NUDT-1003101005?tid=1460976445
这次回顾第2讲:高级程序设计语言概述。
第2讲 高级程序设计语言概述常用的高级程序设计语言
语言
特点
FORTRAN
数值计算
COBOL
事务处理
PASCAL
结构化程序设计
LISP
函数式程序设计
PROLOG
逻辑程序设计
C
系统程序设计
Smalltalk
面向对象程序设计
Java
Internet应用,可移植性
Python
解释型
高级程序设计语言的优点
相对机器语言或汇编语言,高级程序设计语言
更接近于数学语言和工程语言,更直观、自然和易于理解
更容易验证其正确性、改错
编写程序的效率更高
更容易移植
程序设计语言的定义程序设计语言的定义包括以下几个方面
语法
语义
语用
这里只讨论前两者。
语法
程序本质上是一组字符集上的字符串
语法:一组规则,用它可以形成和产生一个合式(well-formed)的程序
词法规则:单词符号的形成规则
单词符号是语言中 ...
国防科技大学 编译原理 第1讲 引论
课程主页:
https://www.icourse163.org/course/NUDT-1003101005?tid=1460976445
斯坦福的编译原理课程感觉有些地方比较难理解,所以选择了中国大学MOOC上的课程进行补充,挑选后感觉国防科技大学的编译原理内容最全,所以决定学习这门课程。
这次回顾第1讲:引论。
第1讲 引论什么是编译程序翻译程序(Translator)翻译程序是把某一种语言程序(称为源语言程序)等价地转换成另一种语言程序(称为目标语言程序)的程序。
编译程序(Compiler)编译程序是把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编语言或机器语言程序)的程序。
根据不同的用途和侧重,编译程序还可以进一步分为如下几类:
诊断编译程序(Diagnostic Compiler):帮助开发和调试。
优化编译程序(Optimizing Compiler):提高目标代码的效率。
交叉编译程序(Cross Compiler):运行编译程序的计算机叫宿主机,运行目标语言程序机器的机器叫目标机。如果编译程序产生出不同于宿主机的机器代码,那么就称其为交叉编译程序 ...
深入理解计算机系统 第2章 习题解析 Part2
这次更新几题,参考了如下资料:
https://github.com/mofaph/csapp/tree/master/exercise
Chapter 266参考了如下资料:
https://github.com/mofaph/csapp/blob/master/exercise/ex2-66.c
重点是如下操作:
x = x | (x >> 1)
这个操作可以逐步将x化成[0…011…1]的形式,代码如下:
/*
* Generate mask indicating' leftmost 1 in x. Assume w=32.
* For example OxFFOO -> 0x8000, and 0x6600 --> 0x4000.
* If x = 0, then return 0.
*/
#include <stdio.h>
int leftmost_one(unsigned x){
//第i次增加2^(i-1)个1,化成0...01...1
x |= (x >> 1);
x |= (x >> 2);
x |= (x ...
Stanford Compiler Week 4 Bottom-Up Parsing II
课程主页:
https://www.edx.org/course/compilers
课程视频:
https://www.bilibili.com/video/BV1NE411376V?p=20&t=6
这次回顾自顶向下解析II。
备注:
1.这部分比较难,感觉还需要多理解几遍。
2.由于hexo渲染的问题,下文中*符号经常会表示为$\star$
Handles引子自底向上解析使用两种行动:
Shift:
ABC|xyz \Rightarrow ABCx|yzReduce:
Cbxy|ijk \Rightarrow CbA|ijk
左字符串可以由栈实现
栈顶是$|$
Shift将终止符push入栈
Reduce
从栈中弹出0个或多个符号
生产Rhs
将非终止符push到栈上
生产lhs
现在的问题是我们如何决定何时shift或reduce?
语法示例:
\begin{array}{l}
\mathrm{E} \rightarrow \mathrm{T}+\mathrm{E} | \mathrm{T} \\
\mathrm{T} \right ...
Stanford Compiler Week 4 Bottom-Up Parsing I
课程主页:
https://www.edx.org/course/compilers
课程视频:
https://www.bilibili.com/video/BV1NE411376V?p=20&t=6
整理笔记的时候发现每周的内容过多,所以还是分两次整理,这次回顾自顶向下解析I。
预测性解析
预测性解析类似递归下降,但解析器可以预测使用哪个production
通过看接下来的几个符号
不回溯
预测性解析器接受$LL(k)$语法
(left-to-right) (left-most derivation) (k tokens look ahead)
在递归下降中,
在每一步中,有多种production选择
回溯用来撤销错误选择
在$LL(1)$中,
每一步只能选择一种production
回顾语法
\begin{array}{l}
\mathrm{E} \rightarrow \mathrm{T}+\mathrm{E} | \mathrm{T} \\
\mathrm{T} \rightarrow \operatorname{int}\l ...
Stanford Compiler Quiz 2
课程主页:
https://www.edx.org/course/compilers
课程视频:
https://www.bilibili.com/video/BV1NE411376V?p=20&t=6
这次回顾Quiz 2。
Question 1How many strings does the following grammar generate?
\begin{array}{l}
A \rightarrow B B \\
B \rightarrow C C \\
C \rightarrow 1 \mid 2
\end{array}
2
4
7
8
15
16
因为
A\to CCCC所以答案为
2^4=16Question 2How many strings does the following grammar generate?
\begin{array}{l}
A \rightarrow B B \\
B \rightarrow C C \\
C \rightarrow 1|2| \epsilon
\end{array}
11
12
15
16
31
32 ...