[cp]今天修復(fù)了一個(gè)smalljava的bug.重新認(rèn)真思考了一下這個(gè)產(chǎn)品的定位。
smalljava提供java語(yǔ)言的解釋器,這個(gè)解釋器可以以三種方式來(lái)調(diào)用。
第一種,以表達(dá)式方式來(lái)調(diào)用,表達(dá)式作為字符串傳入,經(jīng)過(guò)解析以后,變成AST樹(shù),再進(jìn)行執(zhí)行計(jì)算。這個(gè)是最基礎(chǔ)的使用方式。
第二種,在表達(dá)式解釋的基礎(chǔ)上,加入流程控制,形成代碼塊解釋器,將java代碼塊以字符串形式傳入,再經(jīng)過(guò)解析,形成AST樹(shù),再按照AST樹(shù)的執(zhí)行邏輯,一步一步解釋執(zhí)行,直到結(jié)束。
第三種,上述兩種方式都不能提供面向?qū)ο蟮闹С郑谌N方式直接把java類源代碼作為字符串傳入,對(duì)Java源代碼進(jìn)行AST解析,并將解析結(jié)果保存到內(nèi)存中。這樣在第一種的表達(dá)式里面就可以直接使用這些動(dòng)態(tài)加載的java源代碼,實(shí)例化類對(duì)象以及調(diào)用類的方法,就如同調(diào)用標(biāo)準(zhǔn)JVM的類一樣。[/cp]