Я делаю парсер скриптов на Python и немного застрял. Я не совсем уверен, как анализировать строку для всех ее функций (или даже только для одной функции за раз), а затем искать функцию с этим именем, и, если она существует, выполнить эту функцию, не создавая массивного списка, если elif иначе блок ....
РЕДАКТИРОВАТЬ
Это для моего собственного языка сценариев, который я делаю. В нем нет ничего сложного, но у меня есть стандартная библиотека из 8 функций или около того, что мне нужно, чтобы ее можно было запустить, как я могу проанализировать строку и запустить функцию, указанную в строке?
Укажите синтаксис языка, который вы анализируете. Поскольку ваш язык может нравиться НИЧЕГО, невозможно говорить о вашем конкретном вопросе.






Взгляните на PLY. Это должно помочь вам сохранить в чистоте спецификацию парсера.
Посмотрите PyParsing, он позволяет определять грамматику прямо в коде Python:
Предполагая, что вызов функции - это просто somename():
>>> from pyparsing import *
>>> grammar = Word(alphas + "_", alphanums + "_")("func_name") + "()" + StringEnd()
>>> grammar.parseString("ab()\n")["func_name"]
"ab"
это полезно, но как мне тогда запустить функцию?
Ср. ответ носкло за то.
Все зависит от того, какой код вы разбираете.
Если вы разбираете синтаксис Python, используйте модуль parser из Python:
http://docs.python.org/library/parser.html
Достаточно полный список библиотек парсеров, доступных для Python, вы можете найти по адресу: http://nedbatchelder.com/text/python-parsers.html
Как только вы получите имя функции, используйте команду отправки для запуска функции:
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)
Вы также можете посмотреть cmd модуль в stdlib, чтобы сделать свой класс. Он может предоставить вам интерфейс командной строки для вашего языка с автоматическим завершением команды табуляции.
Какие? Какой язык разбираешь? Укажите язык, который вы разбираете, пожалуйста. Какой у вас код? Или это вопрос дизайна? Если это вопрос дизайна, представьте алгоритмы-кандидаты в той форме, в которой мы сможем увидеть, как они могут выглядеть в коде.