原页面
该文档包含了配置和使用 i3 的所有信息。如果没有您所需要的信息,请先检查https://www.reddit.com/r/i3wm/ 是否已包含您所需要的内容,然后再通过 IRC (推荐)或者电子邮件咨询。
1.默认键位
这是为那些“太长,不读”的用户准备的默认键位的一览
按下 $mod 键 ( Alt 键 )
按下 Shift + $mod 键
注意在启动 i3 时如果没有配置文件,i3-config-wizard 将会为你提供一份像上图一样的键位,不管你使用什么键盘布局,如果你想使用自己的配置文件,那么只需要取消掉 i3-config-wizard 的提示,然后配置 /etc/i3/config。
2. 使用 i3
整篇导航中的 $mod 都指的是配置文件中配置的修饰键。默认是 Alt 键 (Mod1),不过 Windows 键 (Mod4) 也是一个十分流行的$mod键
Posted at 2018-08-21
# 随笔 <hr/>
<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=298 height=52 src="//music.163.com/outchain/player?type=2&id=490182455&auto=1&height=32"></iframe>
首先,这是一个悲剧,这是一个有关挣扎,奋斗,生存的悲剧
在很久以前,这个世界上,似乎存在过叫做太阳的东西,那炽白色的火焰散发着明亮的悠久的光芒,将天空洗涤的蔚蓝透亮。
是的,在人类的历史中,就是这样流传的。
但,不知何时起,神与他们所创造的生物为了争夺所谓的『唯一』而展开了无休无止的大战。
太阳被摧毁,大地在燃烧,所有的种族互相仇视、争斗,将天空染成了血红色。
值得一提的是,在
中间代码生成
源程序的中间代码表现可以有多种形式,常见的是 三地址码 (Three-address Code) 和 语法结构树 (Syntax Trees),语法结构树简称语法树。在这里我们只介绍一下三地址码。
三地址码由类似于汇编语言的指令序列组成,每个指令最多有三个操作数 (operand),因此叫三地址码。
常用的三地址指令
序号
指令类型
指令形式
1
赋值指令
x = y op z<br/>x = op z
2
复制指令
x = y
3
条件跳转
if x relop y goto n
4
非条件跳转
goto n
5
参数传递
param x
6
过程调用
call p , n
7
过程返回
return x
8
数组引用
x = y[i]
9
数组赋值
x[i] = y
10
地址<br/>及<b
语义分析
语义分析的任务
语义分析是编译过程的第三个阶段,高级语言中的语句大多数分为两类,一类是声明语句,一类是可执行语句,在声明语句中会声明一些数据对象或过程,并且为他们分别起一个名字 标识符 (id),对于声明语句来说,语义分析的主要任务就是收集标识符的属性信息,一般有这些属性信息
对声明语句语义分析的任务
种属 (Kind) : 它说明了这个标识符对应的是简单变量,还是一个复合变量(数组、记录、...),还是过程、...
类型 (Type) : 这个我相信都不用说了把
储存位置、长度 : 比如说我们写了一个对象或过程,我们都要在内存中给他分配一段空间,这样存储位置和所占用的空间的大小(长度)就成为标识符重要的属性
值
作用域
关于 3 举个例子:
begin
real x[8]
integer i,j;
...
end
首先声明了一个实型数组x ,因此 x 的相对地址就是
语法分析 (Parsing)
语法分析是编译的第二个阶段,它的主要任务是从词法分析器输出的 Token序列中 识别出各类短语,并构造语法分析树 (parse tree),语法分析树描述了句子的语法结构。
Example 1
先来看一个赋值语句的分析
position = initial + rate * 60;
经过词法扫描后会得到这样的一个 Token 序列:
<id,position> <=> <id,initial> <+> <id,rate> <*> <num,60> <;>
它对应的分析树应该就是这样的:
<pre class="mermaid">
graph TD
赋值语句---A["标识符 (position)"]
赋值语句---B["="]
赋值语句---C["表
最近在学习编译原理,把笔记整理一下写在上面
什么是编译?
编译是将一种语言翻译为另外一种语言,将被翻译的语言叫做源程序,而翻译之后的语言叫做目标语言一般来说,编译是将高级语言翻译为低级语言,例如 GCC 等 C++ 编译器就是将 C++ 翻译为机器语言或中间语言。
高级语言(High Level Language)符合人的表达习惯且易于学习和记忆,常见的就是 C++ 、Java。
低级语言则相反,并且与运行的机器密切相关,比如汇编语言(Assembly Language)和机器语言(Machine Language)。
下面分别是 C++ 、汇编语言和机器语言的画风:
x = 1
MOV X,2
C706 0000 0002
通过上面几个例子,我们就知道了什么是编译以及为什么要编译。
编译器在语言处理中的位置
在变异中,除了编译器,我们还需要其他的一些东西。
首先,我们需要预处理器
词法分析 (Scanning)
词法分析是编译的第一个阶段。词法分析器的主要任务是从左向右逐行扫描 (Scanning) 源程序的字符,识别出各个单词,确定单词的类型。将识别出的单词转换成统一的机内表示——词法单元 (token) 形式。
token: <种别码,属性值>
token 是一个二元组,其中第一个分量种别码用来表示单词的种别,就比如人说的自然语言中都有词性,程序设计语言也有这些东西,他们大体可分为五类:
单词类型
种别
种别码
1
关键字
program、if、else、then、...
一词一码
2
标识符
变量名、数组名、记录名、过程名、...
多词一码
3
常量
整型、浮点型、字符型、布尔型、...
一型一码
4
运算符
算术 (+ - * / ++ --)</br>关系 ( > < == != >=