《crafting interpreters》阅读第 29 天,4.6.2 总结。
一、内容
章:04.Scanning,节:4.6.2 Number literals
内容:词法分析之处理数字。
二、开发总结
1.处理数字
(1)数字的形式
1.123,1.23 等。
2.不支持点开头或者结尾的写法,如:.123, 123.。
3.支持数字调用方法:144.sqrt()。
(2)处理逻辑
遇到数字,则往下遍历:如果是数字,继续;如果是点.则判断点后面的是否是数字,如果是数字则继续,如果不是则结束遍历。
(3)测试用例
// 整数
123;
// 浮点数
1.23;
// 数字的方法调用
144.sqrt();
2.源代码点评
private boolean isDigit(char c) {
return c >= '0' && c <= '9';
}
虽然 Java 自带 Chracter.isDigit() 方法,但是作者却不用,个人猜测是因为 Chracter.isDigit() 判断的范围更广,例如上标数字(如:1²3里面的 ²)也被认为数字,自定义的函数更准确。
3.Java vs Python
(1)判断字符是否是数字
Java:
Character.isDigit('123');
Python:
str.isdigit()
4.Python 代码实现
https://github.com/codists/pylox
三、Python 技术总结
1.内置数据类型:str
str.isdigit()
str.isnumeric()
str.isdecimal()
因为读取数据的时候获得的是字符串,然后再转为数字,在实际开发中还是用得比较多的。通过此小节可以提示对内置库 str 的掌握程度。
四、其它
4.6.2 Number literals 小节的学习与功能开发花了 3 天,还是太慢了。这个过程中犯了一些错误:因为自己为了不受书中代码影响,习惯先自己写代码,然后再阅读,再将自己的代码和书上的代码对比优化,但是因为自己考虑不全面(即我们实际开发中所说的梳理需求不够完善),往往需要推翻重写。后续改为先梳理需求,然后阅读,完善需求,再开发,在对比代码,最后完善。
五、参考资料
1. 编程
(1) 豆瓣,Robert Nystrom,《Crafting Interpreters》:https://book.douban.com/subject/35548379/
(2)Github,craftinginterpreters: https://github.com/munificent/craftinginterpreters
(3)Github,Python 实现:https://github.com/codists/pylox
2. 英语
(1) Etymology Dictionary:https://www.etymonline.com
(2) Cambridge Dictionary:https://dictionary.cambridge.org
欢迎搜索及关注:编程人(a_codists)