Python使用多个规则

Python使用多个规则,python,ply,Python,Ply,在这方面,我们如何区分所使用的规则- 示例:-'' p:a-b| c| D ''' 所以假设我们需要为不同的规则编写不同的代码。那么,有什么优雅的方法可以做到这一点呢。手册中给出的一种方法是使用规则和标记的组合,但我发现并不总是单击。只需将表达式分解为多个规则,每个不同的代码对应一个规则 e、 g.(来自) 也可以写成 def p_expression_plus(p): 'expression : expression PLUS term' p[0] = p[1] + p[3]

在这方面,我们如何区分所使用的规则-

示例:-'' p:a-b| c| D '''
所以假设我们需要为不同的规则编写不同的代码。那么,有什么优雅的方法可以做到这一点呢。手册中给出的一种方法是使用规则和标记的组合,但我发现并不总是单击。

只需将表达式分解为多个规则,每个不同的代码对应一个规则

e、 g.(来自)

也可以写成

def p_expression_plus(p):
    'expression : expression PLUS term'
    p[0] = p[1] + p[3]

def p_expression_minus(t):
    'expression : expression MINUS term'
    p[0] = p[1] - p[3]

要拥有多个解析器不是问题,请检查PLY文档(此处 )

接下来,在解析时,确保parse()函数引用了它应该使用的lexer。例如:

parser.parse(text,lexer=lexer)
如果您忘记这样做,解析器将使用最后创建的lexer——这并不总是您想要的

因此,可以包含一些属性

在解析器中,“lexer”和“parser”属性分别指lexer和parser对象

def p_expr_plus(p):
   'expr : expr PLUS expr'
   ...
   print p.parser          # Show parser object
   print p.lexer           # Show lexer object
更多细节可在此处找到


是的,我们可以这样做,但想象一下代码行数的激增。我们也可以为每一行使用不同的标记。我想知道是否有一些变量,比如rule,告诉我们使用了哪个规则。不管怎样,谢谢。啊,我理解,对不起!恐怕我不知道有什么变量可以告诉你使用了哪条规则。(我猜您希望代码爆炸,因为您有非常相似的代码用于不同的规则。也许您可以调用一个helper函数来解析相似的规则,然后拆分成不同函数的开销就不会那么高了?)在更复杂的语法中,不同优先级的规则需要
%pred
以避免减少冲突,因为这些规则需要处于同一级别。他不是问多个词法分析器和多个语法分析器-问题是单个语法分析器中的多个语法规则。
parser.parse(text,lexer=lexer)
def p_expr_plus(p):
   'expr : expr PLUS expr'
   ...
   print p.parser          # Show parser object
   print p.lexer           # Show lexer object