Python 返回带有';或';使用欧芹的语法

Python 返回带有';或';使用欧芹的语法,python,Python,我想用欧芹来匹配一个词。我使用的语法只有在我为泛型词制定规则时才有效。然而,我想知道为什么它不能像Allen Short的演示和示例代码所示的那样工作 在他的代码中,他有: rule = (expr1 -> returnval) | -> [] 但我让它工作的唯一方法是: rule = (expr1 -> returnval) | (expr2) -> [] 这是我的密码: 进口欧芹 语法=r“” myword=“你好” myrule=(myword:word->w

我想用欧芹来匹配一个词。我使用的语法只有在我为泛型词制定规则时才有效。然而,我想知道为什么它不能像Allen Short的演示和示例代码所示的那样工作

在他的代码中,他有:

rule = (expr1 -> returnval) | -> []
但我让它工作的唯一方法是:

rule = (expr1 -> returnval) | (expr2) -> [] 
这是我的密码:

进口欧芹
语法=r“”
myword=“你好”
myrule=(myword:word->word)|->[]
"""
MyPar=parsley.makeGrammar(grammar,{})
打印MyPar(“hello”).myrule()有效,返回myword
打印MyPar(“再见”)。myrule()不起作用,引发异常
我让它工作的唯一方法是使用内置的'letter'变量为通用单词字符串制定规则

进口欧芹
语法=r“”
myword=“你好”
任意字=
myrule=(myword:word->word)| anyword->[]
"""
MyPar=parsley.makeGrammar(grammar,{})
打印MyPar(“hello”).myrule()有效
打印MyPar(“bye”).myrule()有效,返回空列表
任何帮助都将不胜感激。多谢各位


保罗

我想你误解了规则应该符合什么

myrule = (myword:word -> word) | -> []
将尝试匹配以下两个选项中的任何一个:

  • (myword:word->word)
    尝试匹配
    myword
    并返回它

  • ->[]
    尝试匹配nothing(空字符串,不是任何内容),并返回空列表

  • 因此,您的行为是预期的。

    如果你想匹配任何单词,我认为你的第二个代码就是这样做的。

    FWIW,你所拥有的看起来与你所说的不一样。(括号中包含返回值,而原始值不包含)