解析函数

时间:2009-01-21 11:49:51

标签: python parsing

我正在python中创建一个脚本解析器,我有点卡住了。我不太确定如何为其所有函数解析一行(或者甚至一次只解析一个函数),然后搜索具有该名称的函数,如果存在,则执行该函数,如果是elif则写入大量列表否则阻止......

修改

这是我自己编写的脚本语言。它没有什么非常复杂,但我有一个8个函数的标准库,或者我需要能够运行,我如何解析一行并运行该行中命名的函数?

4 个答案:

答案 0 :(得分:3)

获得函数名称后,使用dispatch dict运行函数:

def mysum(...): ...
def myotherstuff(...): ...

# create dispatch dict:
myfunctions = {'sum': mysum, 'stuff': myotherstuff}

# run your parser:
function_name, parameters = parse_result(line)

# run the function:
myfunctions[function_name](parameters)

或者使用以下命令创建一个类:

class Commands(object):
    def do_sum(self, ...): ...
    def do_stuff(self, ...): ...
    def run(self, funcname, params):
        getattr(self, 'do_' + funcname)(params)

cmd = Commands()
function_name, parameters = parse_result(line)
cmd.run(function_name, parameters)

您还可以查看stdlib中的cmd module来完成您的课程。它可以为您提供语言的命令行界面,并自动执行tab命令。

答案 1 :(得分:2)

签出PyParsing,它允许直接在Python代码中定义语法:

假设函数调用只是somename()

>>> from pyparsing import *
>>> grammar = Word(alphas + "_",  alphanums + "_")("func_name") + "()" + StringEnd()
>>> grammar.parseString("ab()\n")["func_name"]
"ab"   

答案 2 :(得分:0)

看看PLY。它应该可以帮助您保持解析器规范的清洁。

答案 3 :(得分:0)

这完全取决于您要解析的代码。

如果要解析Python语法,请使用Python中的parser模块: http://docs.python.org/library/parser.html

可用于Python的完整解析器库列表,您可以在以下位置找到:http://nedbatchelder.com/text/python-parsers.html