Я пытаюсь сопоставить слово с помощью петрушки. Грамматика, которую я использую, работает только тогда, когда я устанавливаю правило для общего слова. Однако я хотел бы знать, почему это не работает так, как показано в презентации Аллена Шорта и образце кода здесь (http: //bit.ly/1025Qxo) и здесь (http://bit.ly/17wzUYg) .
В его коде есть:
rule = (expr1 -> returnval) | -> []
Но единственный способ заставить его работать был:
rule = (expr1 -> returnval) | (expr2) -> []
Вот мой код:
import parsley
grammar = r"""
myword = "hello"
myrule = (myword:word -> word) | -> []
"""
MyPar = parsley.makeGrammar(grammar,{})
print MyPar("hello").myrule() # works, returns myword
print MyPar("bye").myrule() # doesn't work, throws exception
Единственный способ заставить его работать - это создать правило для общей строки слов, используя встроенную переменную letter.
import parsley
grammar = r"""
myword = "hello"
anyword = <letter+>
myrule = (myword:word -> word) | anyword -> []
"""
MyPar = parsley.makeGrammar(grammar,{})
print MyPar("hello").myrule() # works
print MyPar("bye").myrule() # works, returns empty list
Любая помощь будет оценена. Спасибо.
Павел
1 ответ
Я думаю, вы неправильно понимаете, чему должно соответствовать правило.
myrule = (myword:word -> word) | -> []
Это попытается сопоставить любой из двух:
(myword:word -> word)
пытается сопоставитьmyword
и возвращает его-> []
пытается найти ничего (пустая строка, ничего) и возвращает пустой список
Таким образом, вы ожидаете ожидаемого поведения.
Если вы хотите сопоставить любое слово, я думаю, что ваш второй код - это способ сделать это.
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.