[發明專利]基于Python代碼重建抽象語法樹的方法、電子設備有效
| 申請號: | 201811637116.0 | 申請日: | 2018-12-29 |
| 公開(公告)號: | CN109710307B | 公開(公告)日: | 2022-03-11 |
| 發明(設計)人: | 孫悅;李天馳;趙子亮 | 申請(專利權)人: | 深圳點貓科技有限公司 |
| 主分類號: | G06F8/75 | 分類號: | G06F8/75 |
| 代理公司: | 廣東良馬律師事務所 44395 | 代理人: | 李良 |
| 地址: | 518000 廣東省深圳市粵海*** | 國省代碼: | 廣東;44 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 基于 python 代碼 重建 抽象 語法 方法 電子設備 | ||
本發明公開基于Python代碼重建抽象語法樹的方法、電子設備,其中,方法包括:將Python代碼轉化為JavaScript的原始抽象語法樹;獲取原始抽象語法樹的主體結構,根據所述主體結構的類型創建樹對象;根據主體結構的層級對所述樹對象進行重組拼接,獲得簡潔抽象語法樹。這樣,便解決了現有技術中無法對抽象語法樹進行重建的難題,不僅如此,簡潔抽象語法樹不會存在語法錯誤的問題,以及重要數據均能直接顯示于抽象語法樹中,使得用戶能夠對簡潔抽象語法樹做進一步的處理。
技術領域
本發明涉及Python代碼領域,尤其涉及基于Python代碼重建抽象語法樹的方法、電子設備。
背景技術
在Web開發中,抽象語法樹的應用十分廣泛。例如,按照預設的規則對抽象語法樹進行解析,獲取動態類語言(如JS代碼)的函數信息,從而修改函數信息等等。以JavaScript(JS代碼)為例,由于是動態類型語言沒有編譯器或解釋器,因此無法直接改變其運行時的運行結果,在引入抽象語法樹后,便可以獲取即將運行代碼的結構,進而獲取其中一個函數或者多個函數的引用關系并對其進行修改,從而在當前代碼運行的過程中修改下一行代碼,進而修改下一行代碼的運行結果。
但是抽象語法樹生成的樹對象并沒有太多的源代碼信息并且數據層級比較深。一般來說,100行左右JS代碼生成的語法樹就相當復雜了,這也大量有用數據被埋藏的原因之一。
換句話說,現有技術得到的抽象語法樹并不能直接使用,必須對其進行精簡或者修改,才能進一步使用。
然而,現有技術并沒有較好的方法可以對抽象語法樹進行修改或者重新建立抽象語法樹。
因此,現有技術還有待于改進和發展。
發明內容
鑒于上述現有技術的不足,本發明的目的在于提供將Python代碼轉化為腳本語言的方法以及電子設備,旨在解決現有技術無法重建抽象語法樹的問題。
本發明的技術方案如下:
一種基于Python代碼重建抽象語法樹的方法,其包括步驟:
將Python代碼轉化為JavaScript的原始抽象語法樹;
獲取原始抽象語法樹的主體結構,根據所述主體結構的類型創建樹對象;
根據主體結構的層級對所述樹對象進行重組拼接,獲得簡潔抽象語法樹。
優選的,所述將Python代碼轉化為JavaScript的原始抽象語法樹的步驟具體包括:
按照語法作用域將Python代碼分割成若干段Python子代碼;
讀取每段Python子代碼的內容;
對Python子代碼進行解析,生成各段Python子代碼的抽象語法樹。
優選的,所述對Python子代碼進行解析,生成各段Python子代碼的抽象語法樹的步驟之后包括:
將生成的各段Python子代碼的抽象語法樹返回給遞歸的上層;
然后執行塊作用域的循環;
最后按照語法作用域的從屬關系拼接Python子代碼的抽象語法樹,得到原始抽象語法樹。
優選的,所述獲取原始抽象語法樹的主體結構,根據所述主體結構的類型創建樹對象的步驟具體包括:
獲取原始抽象語法樹的主體結構;
判斷所述主體結構是否為數組;
若為數組,則獲取所述主體結構的子主體結構,根據所述子主體結構的類型創建相應的樹對象;若不為數組則根據主體結構的類型創建相應的樹對象。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于深圳點貓科技有限公司,未經深圳點貓科技有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201811637116.0/2.html,轉載請聲明來源鉆瓜專利網。





