从存储为Python字典的AST树中提取IF事例

2024-04-29 06:12:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个json(字典)形式的javascript AST树。 我只需要使用python在AST树中提取有关ifstatement(整个if条件块)的信息,这样我就可以标记提取的数据并用于一些深入学习任务

   {
 "type": "Program",
 "body": [
   {
     "type": "ExpressionStatement",
     "expression": {
       "type": "AssignmentExpression",
       "operator": "=",
       "left": {
         "type": "MemberExpression",
         "computed": false,
         "object": {
           "type": "MemberExpression",
           "computed": true,
           "object": {
             "type": "Identifier",
             "name": "Template"
           },
           "property": {
             "type": "CallExpression",
             "callee": {
               "type": "Identifier",
               "name": "getTemplate"
             },
             "arguments": [
               {
                 "type": "Literal",
                 "value": "layout",
                 "raw": "'layout'"
               }
             ]
           }
         },
         "property": {
           "type": "Identifier",
           "name": "rendered"
         }
       },
       "right": {
         "type": "FunctionExpression",
         "id": null,
         "params": [],
         "body": {
           "type": "BlockStatement",
           "body": [
             {
               "type": "IfStatement",
               "test": {
                 "type": "AssignmentExpression",
                 "operator": "=",
                 "left": {
                   "type": "Identifier",
                   "name": "currentScroll"
                 },
                 "right": {
                   "type": "CallExpression",
                   "callee": {
                     "type": "MemberExpression",
                     "computed": false,
                     "object": {
                       "type": "Identifier",
                       "name": "Session"
                     },
                     "property": {
                       "type": "Identifier",
                       "name": "get"
                     }
                   },
                   "arguments": [
                     {
                       "type": "Literal",
                       "value": "currentScroll",
                       "raw": "'currentScroll'"
                     }
                   ]
                 }
               },
               "consequent": {
                 "type": "BlockStatement",
                 "body": [
                   {
                     "type": "ExpressionStatement",
                     "expression": {
                       "type": "CallExpression",
                       "callee": {
                         "type": "MemberExpression",
                         "computed": false,
                         "object": {
                           "type": "CallExpression",
                           "callee": {
                             "type": "Identifier",
                             "name": "$"
                           },
                           "arguments": [
                             {
                               "type": "Literal",
                               "value": "body",
                               "raw": "'body'"
                             }
                           ]
                         },
                         "property": {
                           "type": "Identifier",
                           "name": "scrollTop"
                         }
                       },
                       "arguments": [
                         {
                           "type": "Identifier",
                           "name": "currentScroll"
                         }
                       ]
                     }
                   },
                   {
                     "type": "ExpressionStatement",
                     "expression": {
                       "type": "CallExpression",
                       "callee": {
                         "type": "MemberExpression",
                         "computed": false,
                         "object": {
                           "type": "Identifier",
                           "name": "Session"
                         },
                         "property": {
                           "type": "Identifier",
                           "name": "set"
                         }
                       },
                       "arguments": [
                         {
                           "type": "Literal",
                           "value": "currentScroll",
                           "raw": "'currentScroll'"
                         },
                         {
                           "type": "Literal",
                           "value": null,
                           "raw": "null"
                         }
                       ]
                     }
                   }
                 ]
               },
               "alternate": null
             },
             {
               "type": "VariableDeclaration",
               "declarations": [
                 {
                   "type": "VariableDeclarator",
                   "id": {
                     "type": "Identifier",
                     "name": "link"
                   },
                   "init": {
                     "type": "CallExpression",
                     "callee": {
                       "type": "MemberExpression",
                       "computed": false,
                       "object": {
                         "type": "Identifier",
                         "name": "document"
                       },
                       "property": {
                         "type": "Identifier",
                         "name": "createElement"
                       }
                     },
                     "arguments": [
                       {
                         "type": "Literal",
                         "value": "link",
                         "raw": "'link'"
                       }
                     ]
                   }
                 }
               ],
               "kind": "var"
             },
             {
               "type": "ExpressionStatement",
               "expression": {
                 "type": "AssignmentExpression",
                 "operator": "=",
                 "left": {
                   "type": "MemberExpression",
                   "computed": false,
                   "object": {
                     "type": "Identifier",
                     "name": "link"
                   },
                   "property": {
                     "type": "Identifier",
                     "name": "type"
                   }
                 },
                 "right": {
                   "type": "Literal",
                   "value": "image/x-icon",
                   "raw": "'image/x-icon'"
                 }
               }
             },
             {
               "type": "ExpressionStatement",
               "expression": {
                 "type": "AssignmentExpression",
                 "operator": "=",
                 "left": {
                   "type": "MemberExpression",
                   "computed": false,
                   "object": {
                     "type": "Identifier",
                     "name": "link"
                   },
                   "property": {
                     "type": "Identifier",
                     "name": "rel"
                   }
                 },
                 "right": {
                   "type": "Literal",
                   "value": "shortcut icon",
                   "raw": "'shortcut icon'"
                 }
               }
             },
             {
               "type": "ExpressionStatement",
               "expression": {
                 "type": "AssignmentExpression",
                 "operator": "=",
                 "left": {
                   "type": "MemberExpression",
                   "computed": false,
                   "object": {
                     "type": "Identifier",
                     "name": "link"
                   },
                   "property": {
                     "type": "Identifier",
                     "name": "href"
                   }
                 },
                 "right": {
                   "type": "CallExpression",
                   "callee": {
                     "type": "MemberExpression",
                     "computed": false,
                     "object": {
                       "type": "Identifier",
                       "name": "Settings"
                     },
                     "property": {
                       "type": "Identifier",
                       "name": "get"
                     }
                   },
                   "arguments": [
                     {
                       "type": "Literal",
                       "value": "faviconUrl",
                       "raw": "'faviconUrl'"
                     },
                     {
                       "type": "Literal",
                       "value": "/img/favicon.ico",
                       "raw": "'/img/favicon.ico'"
                     }
                   ]
                 }
               }
             },
             {
               "type": "ExpressionStatement",
               "expression": {
                 "type": "CallExpression",
                 "callee": {
                   "type": "MemberExpression",
                   "computed": false,
                   "object": {
                     "type": "MemberExpression",
                     "computed": true,
                     "object": {
                       "type": "CallExpression",
                       "callee": {
                         "type": "MemberExpression",
                         "computed": false,
                         "object": {
                           "type": "Identifier",
                           "name": "document"
                         },
                         "property": {
                           "type": "Identifier",
                           "name": "getElementsByTagName"
                         }
                       },
                       "arguments": [
                         {
                           "type": "Literal",
                           "value": "head",
                           "raw": "'head'"
                         }
                       ]
                     },
                     "property": {
                       "type": "Literal",
                       "value": 0,
                       "raw": "0"
                     }
                   },
                   "property": {
                     "type": "Identifier",
                     "name": "appendChild"
                   }
                 },
                 "arguments": [
                   {
                     "type": "Identifier",
                     "name": "link"
                   }
                 ]
               }
             },
             {
               "type": "ExpressionStatement",
               "expression": {
                 "type": "CallExpression",
                 "callee": {
                   "type": "MemberExpression",
                   "computed": false,
                   "object": {
                     "type": "CallExpression",
                     "callee": {
                       "type": "Identifier",
                       "name": "$"
                     },
                     "arguments": [
                       {
                         "type": "Literal",
                         "value": "a.category-silent-hangout",
                         "raw": "'a.category-silent-hangout'"
                       }
                     ]
                   },
                   "property": {
                     "type": "Identifier",
                     "name": "after"
                   }
                 },
                 "arguments": [
                   {
                     "type": "Literal",
                     "value": "<span class=\"silent-icons\"> <img src=\"http://codebuddies.org/images/icon-video-off.png\" alt=\"turn off video\" width=\"25\" height=\"25\"> <img src=\"http://codebuddies.org/images/icon-mute.png\" alt=\"turn off microphone\" width=\"25\" height=\"25\"></span>",
                     "raw": "'<span class=\"silent-icons\"> <img src=\"http://codebuddies.org/images/icon-video-off.png\" alt=\"turn off video\" width=\"25\" height=\"25\"> <img src=\"http://codebuddies.org/images/icon-mute.png\" alt=\"turn off microphone\" width=\"25\" height=\"25\"></span>'"
                   }
                 ]
               }
             }
           ]
         },
         "generator": false,
         "expression": false,
         "async": false
       }
     }
   },
   {
     "type": "ExpressionStatement",
     "expression": {
       "type": "CallExpression",
       "callee": {
         "type": "MemberExpression",
         "computed": false,
         "object": {
           "type": "MemberExpression",
           "computed": true,
           "object": {
             "type": "Identifier",
             "name": "Template"
           },
           "property": {
             "type": "CallExpression",
             "callee": {
               "type": "Identifier",
               "name": "getTemplate"
             },
             "arguments": [
               {
                 "type": "Literal",
                 "value": "layout",
                 "raw": "'layout'"
               }
             ]
           }
         },
         "property": {
           "type": "Identifier",
           "name": "events"
         }
       },
       "arguments": [
         {
           "type": "ObjectExpression",
           "properties": [
             {
               "type": "Property",
               "key": {
                 "type": "Literal",
                 "value": "click .inner-wrapper",
                 "raw": "'click .inner-wrapper'"
               },
               "computed": false,
               "value": {
                 "type": "FunctionExpression",
                 "id": null,
                 "params": [
                   {
                     "type": "Identifier",
                     "name": "e"
                   }
                 ],
                 "body": {
                   "type": "BlockStatement",
                   "body": [
                     {
                       "type": "IfStatement",
                       "test": {
                         "type": "CallExpression",
                         "callee": {
                           "type": "MemberExpression",
                           "computed": false,
                           "object": {
                             "type": "CallExpression",
                             "callee": {
                               "type": "Identifier",
                               "name": "$"
                             },
                             "arguments": [
                               {
                                 "type": "Literal",
                                 "value": "body",
                                 "raw": "'body'"
                               }
                             ]
                           },
                           "property": {
                             "type": "Identifier",
                             "name": "hasClass"
                           }
                         },
                         "arguments": [
                           {
                             "type": "Literal",
                             "value": "mobile-nav-open",
                             "raw": "'mobile-nav-open'"
                           }
                         ]
                       },
                       "consequent": {
                         "type": "BlockStatement",
                         "body": [
                           {
                             "type": "ExpressionStatement",
                             "expression": {
                               "type": "CallExpression",
                               "callee": {
                                 "type": "MemberExpression",
                                 "computed": false,
                                 "object": {
                                   "type": "Identifier",
                                   "name": "e"
                                 },
                                 "property": {
                                   "type": "Identifier",
                                   "name": "preventDefault"
                                 }
                               },
                               "arguments": []
                             }
                           },
                           {
                             "type": "ExpressionStatement",
                             "expression": {
                               "type": "CallExpression",
                               "callee": {
                                 "type": "MemberExpression",
                                 "computed": false,
                                 "object": {
                                   "type": "CallExpression",
                                   "callee": {
                                     "type": "Identifier",
                                     "name": "$"
                                   },
                                   "arguments": [
                                     {
                                       "type": "Literal",
                                       "value": "body",
                                       "raw": "'body'"
                                     }
                                   ]
                                 },
                                 "property": {
                                   "type": "Identifier",
                                   "name": "removeClass"
                                 }
                               },
                               "arguments": [
                                 {
                                   "type": "Literal",
                                   "value": "mobile-nav-open",
                                   "raw": "'mobile-nav-open'"
                                 }
                               ]
                             }
                           }
                         ]
                       },
                       "alternate": null
                     }
                   ]
                 },
                 "generator": false,
                 "expression": false,
                 "async": false
               },
               "kind": "init",
               "method": false,
               "shorthand": false
             }
           ]
         }
       ]
     }
   }
 ],
 "sourceType": "script"
}

我想要下面提到的IF案例的子树

if(currentScroll=Session.get('currentScroll'))
if ($('body').hasClass('mobile-nav-open'))

有没有一种简单的方法可以在Python中提取这些信息? 我正在寻找python中的一些方法或包来解决这个问题,而不是完全遍历整个字典


Tags: namefalserawobjectvaluetypebodyproperty
1条回答
网友
1楼 · 发布于 2024-04-29 06:12:17

为此,可以使用tree-sitter library

查看自述文件中的Usage部分以设置包

这是您需要在高级别上执行的操作:

from tree_sitter import Language, Parser

JS_LANGUAGE = Language('build/my-languages.so', 'javascript')

parser = Parser()
parser.set_language(JS_LANGUAGE)
parser.parse(bytes(<code string>, 'utf-8'))

相关问题 更多 >