python中的lua解析器

luaparser的Python项目详细描述


py lua解析器

https://travis-ci.org/boolangery/py-lua-parser.svg?branch=masterhttps://img.shields.io/pypi/v/luaparser.svghttps://img.shields.io/pypi/pyversions/luaparser.svg

用python编写的lua解析器和ast构建器。

它既是一个开发库,也是一个命令行工具。

安装:

该软件包可以通过pip安装:

$ python3.6 -m pip install luaparser

它将安装shell命令'luaparser'。

选项

以下是命令行标志:

用法:luaparser[选项]文件名

CLI Options:
  --version                     Show program's version number and exit
  -h, --help                    Show this help message and exit
  -s, --source                  Source passed in a string
  -x, --xml                     Set output format to xml
  -o, --output                  Write output to file

快速启动

处理AST树

最小示例:

fromluaparserimportastsrc="""
    local function sayHello()
      print('hello world !')
    end
    sayHello()
    """tree=ast.parse(src)print(ast.toPrettyStr(tree))

将显示:

Chunk: {} 1 key
  body: {} 1 key
    Block: {} 1 key
      body: [] 2 items
        0: {} 1 key
          LocalFunction: {} 3 keys
            name: {} 1 key
              Name: {} 1 key
                id: "sayHello"
            args: [] 0 item
            body: [] 1 item
              0: {} 1 key
                Call: {} 2 keys
                  func: {} 1 key
                    Name: {} 1 key
                      id: "print"
                  args: [] 1 item
                    0: {} 1 key
                      String: {} 1 key
                        s: "hello world !"
        1: {} 1 key
          Call: {} 2 keys
            func: {} 1 key
              Name: {} 1 key
                id: "sayHello"
            args: [] 0 item

您可以使用ast.walk(tree):

fromluaparserimportastfromluaparserimportastnodestree=ast.parse("local foo = 'bar'")fornodeinast.walk(tree):ifisinstance(node,astnodes.Name):process(node)

或者,您可以使用节点访问者:

fromluaparserimportastfromluaparserimportastnodessrc="local a = 42"classNumberVisitor(ast.ASTVisitor):defvisit_Number(self,node):print('Number value = '+str(node.n))tree=ast.parse(src)NumberVisitor().visit(tree)

命令行

给定:

localfunctionlog(msg)print(msg)endlog("hello world !")
$ luaparser source.lua

将输出:

{"Chunk":{"body":{"Block":{"body":[{"LocalFunction":{"name":{"Name":{"id":"log"}},"args":[{"Name":{"id":"msg"}}],"body":{"Block":{"body":[{"Call":{"func":{"Name":{"id":"print"}},"args":[{"Name":{"id":"msg"}}]}}]}}}},{"Call":{"func":{"Name":{"id":"log"}},"args":[{"String":{"s":"hello world !"}}]}}]}}}}

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java通过Spring MVC web应用程序向客户端发送文本文件   java是否可以在运行时动态实例化DAO类?   调用VB。来自Java的net函数   java在Android中通过单击打开特定文件夹   java如何使用maven pom。xml标识非标准项目结构中的testng测试用例?   java为什么FOP在大文件上崩溃?   Architecture python+flask和spring boot+java   java Kafka工具根本没有启动Ubuntu 19.10   如何使用Eclipse运行Java USB API for Windows   java如何在Eclipse中查看J2EE预览服务器/容器的日志/控制台?   网页抓取是否可以使用Java crawler crawler4j暂停和恢复抓取?   java当我第二次按下按钮时,应用程序停止工作   带有偏移量和限制的java SQLite分页问题   java如何在OSX mavericks中将端口80转发到8080   java从泛型方法调用非泛型方法   java My代码未按预期工作。十进制输出不是它应该的样子   节点。java中的js加密(jasypt)和nodejs中的解密   java乘法表不工作数组索引超出范围   java将JDBC与Firebirdsql连接起来