Я использую OMeta и Python Parsley (http://parsley.readthedocs.org/) для разбора. Есть ли способ доступа к строке, соответствующей конкретному правилу?Как я могу получить доступ ко всей согласованной строке в Python Parsley?
Например, рассмотрим следующий код:
In [1]: import parsley
In [2]: g = parsley.makeGrammar('addr = <digit+>:num ws <anything+>:street -> {"num": num, "street": street}', {})
In [3]: g('15032 La Cuarta St.').addr()
Out[3]: {'num': '15032', 'street': 'La Cuarta St.'}
Я ищу способ сослаться на весь матч, чтобы вернуть что-то вроде:
{'match': '15032 La Cuarta St.', 'num': '15032', 'street': 'La Cuarta St.'}
Следующий код работает для этой цели:
g = parsley.makeGrammar('addr = <<digit+>:num ws <anything+>:street>:match -> {"num": num, "street": street, "match": match}', {})
Однако у меня есть сотни правил, и я бы хотел избежать обертывания каждого из них.
Не критика, но больше для моего понимания вашего вопроса, но почему вы используете Python Петрушку вместо регулярных выражений? –
Regexps гораздо сложнее построить и поддерживать сложные структуры. (Мой фактический пример использования - синтаксический анализ текстовых представлений геномных вариантов.) Пожалуйста, посмотрите на документы Parsley для примеров. – Reece
Понял. Петрушка выглядит великолепным модулем, и я с удовольствием узнал об этом. Похоже, нет простой альтернативы предложенному вами методу. Является ли ваше единственным приемлемым решением не изменять правила грамматики абсолютно? –