Python PLY多个规则

时间:2012-03-23 20:59:00

标签: python ply

在层中我们如何区分使用哪个规则 -

示例: - '''             p:a b |                 c |                 d             “”” 所以我们需要为不同的规则编写不同的代码。然后有任何优雅的方式这样做。手册中给出的一种方法是使用规则和令牌的组合,但我发现并不总是点击。

2 个答案:

答案 0 :(得分:0)

简单地将表达式分解为多个规则,每个不同的代码都有一个规则。

e.g。 (来自http://www.dabeaz.com/ply/ply.html#ply_nn25

def p_expression(p):
    '''expression : expression PLUS term
              | expression MINUS term'''
    if p[2] == '+':
        p[0] = p[1] + p[3]
    elif p[2] == '-':
        p[0] = p[1] - p[3]

也可以写成

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]

答案 1 :(得分:-1)

要让多个解析器不是问题,请检查PLY文档(此处 http://www.dabeaz.com/ply/ply.html#ply_nn37

lexer  = lex.lex()       # Return lexer object
parser = yacc.yacc()     # Return parser object

接下来,在解析时,请确保为parse()函数提供对它应该使用的词法分析器的引用。例如:

parser.parse(text,lexer=lexer)

如果您忘记这样做,解析器将使用最后创建的词法分析器 - 这并不总是您想要的。

所以,你可以包含一些属性

在解析器中,“lexer”和“parser”属性分别引用词法分析器和解析器对象。

def p_expr_plus(p):
   'expr : expr PLUS expr'
   ...
   print p.parser          # Show parser object
   print p.lexer           # Show lexer object

更多细节可以在这里找到

http://www.dabeaz.com/ply/ply.html#ply_nn37