最近几天忙的要死,每天回到家都是半夜,看会儿视频,写会儿代码就上床睡觉了。自己的parser还剩下一个小部分就是如何解析对象。
describe('parse',function(){
it('解析{}',function(){
var fn = parse('{name:"wangji",age:"18"}');
expect(fn()).toEqual({ name: 'wangji', age: '18' })
})
})
事实上解析对象的思路也很简单,先是生成tokens。然后根据tokens生成AST节点,这时候新增了一个token类型identifier:
this.tokens.push({
text:currentChar,
identifier:true
})
这个token类型主要是为了解决在生成AST节点的时候,如何处理一个对象的key值。
同时在ASTBuilder阶段新增加了一个节点类型:
ASTBuilder.prototype.identifier=function(){
return {type:ASTBuilder.Identifier,name:this.consume().text}
}
经过ASTBuilder以后生成的AST是这样的:
Program的body节点是一个ObjectExpression类型的节点 ObjectExpression里面的properties这树生成出来以后,只需要在compile的时候做简单的处理就可以,代码如下:
image.png其实在写这个部分的时候因为基础建设做的已经差不多了,所以感觉还是挺容易。另外,自己在写的时候脑子不停的思索,有时候睡觉的时候闭着眼睛脑子都在想着代码,一层一层的调用函数,竟然在脑子里也出现了一个函数栈,哈哈。说明自己逻辑思维能力增强了吗?
其实自己平时写代码还是写的太少了,应该多写,多想。这句话虽然说起来很容易,可是认真去做的时候还是挺不容易的。
有时候经常觉得,有的代码已经写过一次了,没必要再写。可事实上是,一遍一遍的重复一个做过的事,才能把它内化成为自己的思想。
我在想,我是不是应该把前几天的东西全都删除,再写一遍。这次索性录成一个视频,可以随时边写边自言自语说出自己正在思考的东西。这样不知道怎么样呢?
网友评论