- 博客(21)
- 收藏
- 关注
原创 对于龙书中的到达定值的传递方程公式的推导
写作理由因为当时看龙书的时候,感觉前一部分看的头痛欲裂,结果在不想看的时候,又来了一堆公式,当时就没看下去了,但是事后还是觉得弄懂了比较好,就算是对以前的数学知识的复习吧。公式推导龙书的第387页到达定值的转移函数为: fd(x)=gend∪(x−killd)fd(x)=gend∪(x−killd)f_d(x) = gen_d \cup (x - kill_d) 当存在两个...
2018-03-03 10:37:25
482
原创 LeetCode.260 Single Number 3
写作来源今天在LeetCode上面连续做了Single Number 2和Single Number 3,非常羞耻地说,两题都是看了别人的思路理解以后再写出来的,Single Number 2的解法有人已经在简书上面写了,我这里就解释一些LeetCode上面的Discuss部分的其他人的解法。思路首先贴上别人写的代码。class Solution{public: ...
2018-03-02 21:47:03
203
原创 编程之中由整形提升带来的错误
问题来源今天在写leetcode的题目的时候,在debug模式中突然发现了一个不符合常理的现象,第一反应就是肯定不是编译器的错误,肯定是我自己哪儿有问题,经过一番简单的排查,发现这个问题是由整形提升引起的。分析如下错误代码如下,题目为LeetCode的279.Perfect Squaresclass Solution {public: int numSquares(i
2018-01-17 19:16:49
205
原创 用Scheme解释器项目来了解Java(五)
本章介绍本章主要介绍Java中的函数式编程在本项目中的应用,非常简略。各位只需要稍加实践就可以发现函数式编程的妙用。如果想详细入门Java函数式编程的话,下面这个链接很不错。 Java 8 中的 Streams API 详解举例说明我想判断一个List中是不是所有的元素都符合某个条件,比如本项目中有一个逻辑是,判断某一个List中是不是所有的元素都是SchemeNumber类,这样才可以进行+的
2017-11-01 21:16:58
389
原创 用Scheme解释器项目来了解Java(四)
本章简介本章主要介绍编译器中最主要的设计模式,观察者模式,这里我无法讲述观察者模式的理论或者是用UML画类图等等,只想就这个项目,说说该如何运用观察者模式。观察者模式观察者模式举例以本项目为基础,结合个人理解,观察者模式具有下面的定义 观察的对象只有一个,而观察者有多个,每个观察者在对观察对象进行观察以后,可以执行不同的操作。这里就可以简单的举两个观察者的例子,最基本的例子就是如何对程序进行树
2017-10-31 21:50:20
417
原创 用Scheme解释器项目来了解Java(三)
本章简介本章承接上一章,上一章我们介绍了如何处理复杂类型,这一张我们详细的介绍一个如何从token流中分析出一个语法结构。代码概述分析简单结构SchemeAtom:第一个字母是英文字母,一直扫描到空格为止,里面只存在英文和数字以及一些合法字符。SchemeNumber:以数字开头,后面的内容只允许是数字,这里我们不分析浮点数,所以不包含小数点SchemeBoolean:只有两种情况可以分析成B
2017-10-31 11:30:34
332
原创 用Scheme解释器项目来了解Java(二)
本章简介本章主要介绍SchemeToken类的子类SchemeList,这个类是所有复杂类的父类,所有的SchemeList的子类包括自身都具有用()包含的结构,比如(+ 1 2 3)(map + '(1 2 3) '(2 3 4))类的设计类图看起来很复杂,下面我会一一介绍每个类的作用子类介绍这里为了展现子类中的每个元素所对应的成员变量,我就用数学公式表示,不用代码表示了,还未实现的先不进行列举
2017-10-30 15:59:10
453
原创 用Scheme解释器项目来了解Java(一)
本章简介本章主要介绍简答的scheme语言的语法,还有简单scheme的token所对应的类。简单介绍scheme语言有两篇ibm的文章我觉得介绍的很详细,这里我贴出来 scheme语言概要(上) scheme语言概要(下) 希望大家能在看本篇博客的时候把这两篇介绍scheme语言的语法看一下,因为我自认为写不出这么好的入门博客了。类的设计类图 从上面这张图片我们可以看出,所有的scheme
2017-10-30 11:19:17
1911
原创 用Scheme解释器项目来了解Java
首语原本打算定的题目是,基于Java8的Scheme解释器 ,但是在对项目进行编写的时候,发现有很多scheme的语言细节、理论我了解的少之又少,而本人自认为Java基础还是比很多人要好的,所以想改成现在这个题目,用Scheme解释器来学习Java。写这个项目的缘由是最近的一场面试,这里我就安利一家公司,源伞科技 ,位于深圳的一家公司,主要是做静态分析,编译器构建的。当时我把简历发过去的时候,hr问
2017-10-28 22:54:22
677
原创 如何lower基本块开头的PHI函数
问题背景最近面试一家静态分析的公司,感觉面试官问的问题非常具有代表性,问的都是《编译原理》里面的知识,并且进行扩展,其中就有一个问题,当时我就很懵逼,即如何对phi函数进行lower。what is “Lower”?简单来说,lower是一个对操作和类型进行合法化的过程,即如果芯片中的寄存器的位数是8位,而你要进行16位的运算,那么就要对两个加法操作数进行拆分,变成两个8位的相加,并分别保存到结果的
2017-10-13 11:53:16
873
1
原创 LeetCode Rotate Image
题目描述You are given an n x n 2D matrix representing an image.Rotate the image by 90 degrees (clockwise).Note: You have to rotate the image in-place, which means you have to modify the input 2D matrix di
2017-10-04 15:15:21
126
原创 对于上一篇文章中的Rewrite Rules的详细分析
问题背景没有背景,这篇文章是对上一篇文章从LLVM的CodeGen角度思考PIC16中的常量数组生成过程中的Rewrite Rules的分析。详细分析过程分析表达式c = arr[1] * a * e + d + f / g整个表达式对应的语法树如下 我们可以使用逆拓扑序对这个DAG图进行遍历,如果遇到了算数运算操作,就进行M阶树的构造,即不断地向上进行节点的汇集操作。如下,分别展示出第一步
2017-10-03 16:50:31
469
原创 科普LLVM中MSP430如何lower移位指令
问题背景最近在做LLVM项目的时候,碰到了一个看起来不是问题的问题,就是如何对移位指令进行lower,在LLVMIR中,移位指令使用一个节点进行表示的,表示如下(shl a, b)其中,假设a就是源操作数,b是移位次数,shl为逻辑左移,可是MSP430芯片里面只有一次移动一位的移位指令,如下(MSP430shl a)表示将源操作数a向左移动一位,那么下一步,顺理成章地就会想到,如果每次只移动一位,
2017-10-02 19:13:37
996
2
原创 编译学习笔记(一)
这段时间学习LLVM最痛苦的就是一直要看英文文档,因为现在没有中文的,亚马逊上面仅有的两本关于LLVM的书就只有两本,一本是《Get started with LLVM core Library》和《LLVM cookbook》,还全是英文的,所以学习的路上碰到了不少的阻碍,下面我就简单说说我碰到的问题,希望能有一定的帮助。LLVM到底是一个什么玩意:首先听从了老师的要求,下载了LLVM的源码,放
2016-06-08 11:47:15
281
原创 位运算学习(一)
问题来源我是由一个算法题目想到位运算的。题目是《算法问题实战策略》中的204页的题目,题目如下: 在没有电话的时代,摩尔斯电码是无线电传输领域中的一个常用代码。电码以短信号和长信号的不同组合表示各种文字,其中短信号是o,长信号是-。例如,o—表示英文字母J,而–表示英文字母M。 假设有一本以n个长点和m个短点组成的。包含所有信号的字典。例如,n=m=2,就会包含如下信号。 –oo -o-o
2016-06-05 18:40:49
586
原创 手机蓝牙传输图片很邪恶的一个点
本文很简短,,,真的很简短,,, 用手机写蓝牙程序,并且在手机之间用蓝牙传输图片,有时候图片传输到另外一个手机上面以后图片会失真,那么到底是哪里出了问题呢。 首先,绝大部分的代码都是一样的,无非就是普通的蓝牙操作,开启蓝牙,发现蓝牙,然后就变成了Java的Socket操作了,再后来就是获取输入输出流,进行数据的传输操作了,就在这里!!!出现了问题。 Look,这里是一段Java开发者熟悉的不能
2016-05-31 22:16:34
4234
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人