自制前端框架 Day.9 parser的最初形态完成

最近几天忙的要死,每天回到家都是半夜,看会儿视频,写会儿代码就上床睡觉了。自己的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

其实在写这个部分的时候因为基础建设做的已经差不多了,所以感觉还是挺容易。另外,自己在写的时候脑子不停的思索,有时候睡觉的时候闭着眼睛脑子都在想着代码,一层一层的调用函数,竟然在脑子里也出现了一个函数栈,哈哈。说明自己逻辑思维能力增强了吗?
其实自己平时写代码还是写的太少了,应该多写,多想。这句话虽然说起来很容易,可是认真去做的时候还是挺不容易的。
有时候经常觉得,有的代码已经写过一次了,没必要再写。可事实上是,一遍一遍的重复一个做过的事,才能把它内化成为自己的思想。
我在想,我是不是应该把前几天的东西全都删除,再写一遍。这次索性录成一个视频,可以随时边写边自言自语说出自己正在思考的东西。这样不知道怎么样呢?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容