最近幾天忙的要死性芬,每天回到家都是半夜躯舔,看會(huì)兒視頻吁讨,寫(xiě)會(huì)兒代碼就上床睡覺(jué)了。自己的parser還剩下一個(gè)小部分就是如何解析對(duì)象硅瞧。
describe('parse',function(){
it('解析{}',function(){
var fn = parse('{name:"wangji",age:"18"}');
expect(fn()).toEqual({ name: 'wangji', age: '18' })
})
})
事實(shí)上解析對(duì)象的思路也很簡(jiǎn)單,先是生成tokens恕汇。然后根據(jù)tokens生成AST節(jié)點(diǎn)腕唧,這時(shí)候新增了一個(gè)token類型identifier:
this.tokens.push({
text:currentChar,
identifier:true
})
這個(gè)token類型主要是為了解決在生成AST節(jié)點(diǎn)的時(shí)候,如何處理一個(gè)對(duì)象的key值瘾英。
同時(shí)在ASTBuilder階段新增加了一個(gè)節(jié)點(diǎn)類型:
ASTBuilder.prototype.identifier=function(){
return {type:ASTBuilder.Identifier,name:this.consume().text}
}
經(jīng)過(guò)ASTBuilder以后生成的AST是這樣的:
這樹(shù)生成出來(lái)以后枣接,只需要在compile的時(shí)候做簡(jiǎn)單的處理就可以,代碼如下:
其實(shí)在寫(xiě)這個(gè)部分的時(shí)候因?yàn)榛A(chǔ)建設(shè)做的已經(jīng)差不多了缺谴,所以感覺(jué)還是挺容易月腋。另外,自己在寫(xiě)的時(shí)候腦子不停的思索瓣赂,有時(shí)候睡覺(jué)的時(shí)候閉著眼睛腦子都在想著代碼榆骚,一層一層的調(diào)用函數(shù),竟然在腦子里也出現(xiàn)了一個(gè)函數(shù)棧煌集,哈哈妓肢。說(shuō)明自己邏輯思維能力增強(qiáng)了嗎?
其實(shí)自己平時(shí)寫(xiě)代碼還是寫(xiě)的太少了苫纤,應(yīng)該多寫(xiě)碉钠,多想。這句話雖然說(shuō)起來(lái)很容易卷拘,可是認(rèn)真去做的時(shí)候還是挺不容易的喊废。
有時(shí)候經(jīng)常覺(jué)得,有的代碼已經(jīng)寫(xiě)過(guò)一次了栗弟,沒(méi)必要再寫(xiě)污筷。可事實(shí)上是乍赫,一遍一遍的重復(fù)一個(gè)做過(guò)的事瓣蛀,才能把它內(nèi)化成為自己的思想。
我在想雷厂,我是不是應(yīng)該把前幾天的東西全都刪除惋增,再寫(xiě)一遍。這次索性錄成一個(gè)視頻改鲫,可以隨時(shí)邊寫(xiě)邊自言自語(yǔ)說(shuō)出自己正在思考的東西诈皿。這樣不知道怎么樣呢林束?