lufei's Studio.

lufei's Studio.

纸上得来终觉浅,绝知此事要躬行。

语法分析
前言学习了词法分析(Lexical Analysis),并且“装模作样”的实现了大概的词法分析工程,仅仅为了学习而已,接下来接下来就是语法分析(Syntactic Analysis, or Parsing)了。 开始 语法分析是在词法分析的基础上识别出程序的语法结构。这个结构是一个树状结构,是计算机容易理解和执行的. 以自然语言为例。自然语言有定义良好的语法结构,比如,“我喜欢又聪明又勇敢的你”这个句子包含了“主、谓、宾”三个部分。主语是“我”,谓语是“喜欢”,宾语部分是“又聪明又勇敢的你”。其中宾语部分又可以拆成两部分,“又聪明又勇敢”是定语部分,用来修饰“你”。定语部分又可以分成“...
手工打造词法分析器
前言准备努努力啃一啃编译原理,目标就是能啃多少,啃多少,加油! 开始词法分析的工作就是将一个个长长的字符串识别出一个个的单词,这些单词被称为Token, 并且词法分析的工作是一边读取,一边识别字符串的,不是把字符串都读到内存再识别,这跟我们在人类世界听别人说话很类似,一边听,一边提取信息。 问题来了,如何把一长串的字符,断成一个个的Token呢?如何分割呢? 解决问题首先拿一个简单的例子来实现,比如: age >= 45 这是一个简单的关系表达式,我们可以用自己熟悉的语言来解析这个表达式,我使用的是swift。大概这样: 1234567891011121314151617181...
坑爹的Swift REPL
前言昨天稍微探索了 LLDB 如何调试 C ,随后心血来潮想要再探索一下 swift 如何利用 LLDB 来调试,不过坑爹的事情发生了。 问题首先是 swift 和 swiftc (这里的 swift 和 swiftc 都是指的命令行工具),如果你愿意的话,在 Bash 中输入-h展示的说明都是 Swift compiler ,这我一瞬间有点糊涂了。 赶紧利用万能的搜索引擎,去搜索了一下, 了解了一下, 结果如下,感兴趣的可以看下: swift和swiftc的区别 喵神的说明 简单来说:swift 是一个 REPL 环境,使得使用「Swift」就像使用脚本语言一样,但实际上,还是...
LLDB调试C程序
前言Clang是一个C、C++、Objective-C和Objective-C++编程语言的编译器前端。它采用了LLVM作为其后端。 LLDB是一个支持C, Objective-C and C++的调试器,内置于xcode。 开始c测试代码, 文件名mylldb.c 123456789#include <stdio.h>int main() { int i = 0; printf("hello lldb\n");} clang生成输出文件使用-g和-o生成调试信息和输出文件,我们这里分别是mylld...
关于遮罩(mask)
遮罩(Mask),就是一幅只有单通道,肉眼看上去只有黑白,和黑白之间颜色的图片,通过可透过光和不可透过光,来遮挡下面的图片,达到不同的效果,可以理解为四通道图片中的alpha通道,所以也可以叫alpha图。 遮罩图中,直观肉眼看上去,0代表黑色,255代表白色。 遮罩图和被遮罩图融合一般情况都是作为前景图,在这种情况下: 遮罩图在和被遮罩图融合的时候,0代表透明度为0,也就是完全透明,1代表不透明,肉眼看上去,就是白色部分透明,黑色的部分不透明。融合的话,可以使用CGBitmapContextCreate拿到遮罩图和被遮罩图的像素数组,自己组合计算,也可以利用CGImageCreate...
hybrid框架:js异步回调实现
前言最近学习了一段时间hybrid,写一点收获,本文主要关注的是js调用原生的时候,异步回调,如何处理,这是实现一个JSBridge的关键。 下面,我们开始 js消息体代码类似这样: 123456var msgBody = {};msgBody.handler = 'common';msgBody.action = 'nativeLog';msgBody.params = params; //任意json对象,用于传参.msgBody.callbackId = ...
swift上的装饰器(Decorator)
作为一名swift萌新,已经深深爱上了这门语言,也认识到这门语言可没有看上去这么简单,于是总是想折腾一点不一样的东西,目的都是为了更好的理解swift这门语言 python上的装饰器(Decorator)python上的装饰器很酷,提供了@这个语法糖,当你想为你的函数提供一个新的功能,却不想对原来函数做改变的时候,这个时候装饰器的作用就来了,我们可以用下面的方式: 1234567891011121314from functools import wraps def log(func): @wraps(func) def with_logging(*args, **kwargs...
关于 URL 编码
一个 URL 的组成1scheme:[//[user:password@]host[:port]][/]path[?query][#fragment] 为什么要对 URL 编码一般来说,URL 只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号,具体规定可以看 RFC 1738。 因为有了规定,所以大家都必须遵守,比如,一旦 URL 中出现了中文,就必须编码才能使用。 iOS url 编码在 iOS 开发中,需要进行 URL 编码的时候,可以这么做 12345let characterSet = NSCharacterSet.ur...
内存管理
看了andriod和iOS上不同的内存管理机制,写篇文章记录并总结一下,嘻嘻嘻。 iOS的内存管理在日常iOS开发中,监控崩溃是一个很常见的事,但是总有一些崩溃是那么的无厘头,让人摸不着头绪,这种OOM有可能来自iOS的JetSam机制导致的一种“另类”崩溃,我们的日志系统是无法通过信号捕捉到的。 JetSam 机制,指的就是操作系统为了控制内存资源过度使用而采用的一种资源管控机制 不同的系统版本对App运行时占用内存的限制不同,有一种方法就是查看手机中以 JetsamEvent开头的系统日志(设置 -> 隐私 -> 分析)。 系统版本的升级也会增加占用的内存,App...
少年探案
(5年级到6年级的暑假写的,读来还有点害羞,嘻嘻QAQ) 这个故事的主人公叫皿雄,虽然家境贫寒,但是他并没有自暴自弃,他热爱读书,尤其是他有敏锐的观察力,总能发现一些别人发现不了的蛛丝马迹,因此,成为了光辉镇有名的小神探,皿雄自己也有一个梦想,就是他想成为一个侦探,而且是响誉世界的大侦探,于是他为了这个梦想,他以优异的成绩考上了世界上最有名的侦探学校—福尔摩斯侦探学校。 今天是皿雄上学的第一天,他很早就来到了学校门口,以非常激动的心情等待大门的开启,他闭上了眼睛,静静地等待着,等待着梦想成真的那一刻。 忽然,他听到了一阵轻脆的脚步声,他睁开了眼睛,仔细一瞧,是个长相清秀的少年,他背着一个...
avatar
路小飞
海内存知己,天涯若比邻!