今天就要开始正式写表达式解析器了,第一章的核心代码一共二十行都不到,包简单包学会,但是里面涉及的原理知识可能要花点时间讲一讲。
首先为了能快速简单的开始写我们的解析器,先要对表达式的规则做一定简化:
- 暂时只考虑最简单的同优先级的运算,也就是加减法
- 每个字符代表一个元素,也就是暂时只支持个位数的运算(当然计算结果可以超出个位数)
然后我们会采用递归加循环的方式来解析表达式,还玩不转递归的同学必须要先过递归这道坎。
今天就要开始正式写表达式解析器了,第一章的核心代码一共二十行都不到,包简单包学会,但是里面涉及的原理知识可能要花点时间讲一讲。
首先为了能快速简单的开始写我们的解析器,先要对表达式的规则做一定简化:
然后我们会采用递归加循环的方式来解析表达式,还玩不转递归的同学必须要先过递归这道坎。
首先要聊聊我为什么想要写一篇编译原理的入门课。熟悉我的人可能会知道,我喜欢把复杂难懂的东西拆解成简单易理解的东西,无论是在代码的设计上,还是在知识的分享上。另外我也是个实用主义者,写出来的代码光好看没有什么卵用,必须要有实际的用途,它才是有价值的代码。所以写这样一个系列的博客,主要有两个目的:
相信研究过怎么在 ObjC 中进行版本字符串比对的朋友,大多都看过这一篇 StackOverflow 的问答:
Compare version numbers in Objective-C
里面提到的 [versionStrA compare:versionStrB options:NSNumericSearch]
的方案应该是最优雅的方案了。
但是不理解这个 NSNumericSearch 的具体工作原理就去盲目使用是危险的,今天我就来研究下它的具体工作原理。
美团开源了船新的响应式框架 EasyReact,GayHub地址:https://github.com/meituan/EasyReact
作为热爱响应式的程序猿,一定是要试用评测一下这传说中又快又好用的新框架的,事不宜迟我们开始。(虽然这框架已经开源一个月了🙄)
YAML 全名 YAML Ain’t Markup Language,主要设计目标是对人类可读性高。YAML 1.2 是 JSON 的超集,也就是说合法的 JSON 扔给 YAML 1.2 解析器是可以被完美解析的。YAML 集 JSON 和 XML 等各种标记语言之长,进行了扩展强化,功能全面也很易读,很多的系统采用它作为配置文件的格式。
嗯,昨天给自己挖了个坑,还是早填坑早完事儿,所以今天有了这篇:
朋友,ObjC 的 BOOL 类型了解一下?
可能有人告诉你 BOOL 是 signed char
类型的。放在以前,这个答案是对的,但是放在现在就不完全对了。接下来我来给大家一点点解释其中的细节。
参考 Apple Developer 官方文档:Type Encodings,Objective-C Runtime
我们在 JSON <-> Dictionary <-> Model 中面临的一个很大的问题就是判断数据需要转换成什么样的类型。好在 ObjC 作为一款动态语言,利用 runtime 可以轻松解决这个问题。再配合转换器和 KVC,就可以轻松把我们解析好的值放进对应 Model 里。今天要给大家介绍的就是这个类型编码(Type Encodings)的具体细节。
最近准备给 VirtualView-iOS 的文本元素新增一个 lineHeight 属性,以便和 VirtualView-Android 配合时能更精确的保证双平台的一致性。面向 Google 以及 Stack Overflow 编程了一会后发现,能查到的资料大部分是介绍如何实现 lineSpacing 属性,而不是 lineHeight。但是我就是因为 iOS 和 Android 的默认 lineSpacing 不一致所以才想实现个 lineHeight 啊!还是需要自己动手丰衣足食,顺带整理成文章造福后人。
本文主旨是浅显易懂的讲解下冷热信号的区别和常见的使用误区,所以篇幅所限不会介绍些内部细节。
如果想要了解的更深入,可以参照William Zang的博文:细说ReactiveCocoa的冷信号与热信号。
文中部分内容参考RAC 4.x的文档:设计指南、框架概览,但是文章本身是介绍ObjC的RAC 2.5。
另外和前一篇博文一样,我称呼一组信号叫做信号流,单次发送的信号值为信号。