Я пытаюсь совместить слово с использованием Parsley. Грамматика, которую я использую, работает только при создании правила для общего слова. Тем не менее, я хотел бы знать, почему это не работает так, как показано на презентации и примере кода Аллена Шорта здесь (http://bit.ly/1025Qxo) и здесь (http://bit.ly/17wzUYg).Возврат пустого списка с синтаксисом «или» с использованием Parsley
В своем коде, у него есть:
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
Любая помощь будет оценена по достоинству. Спасибо.
Пол
FWIW, то, что у вас есть, выглядит иначе, чем то, что вы говорите. (ваша скобка включает return val, где оригинал не подходит) – mgilson