首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python PLY多规则

Python PLY多规则
EN

Stack Overflow用户
提问于 2012-03-24 04:59:00
回答 2查看 1.1K关注 0票数 4

在ply中,我们如何区分使用了哪条规则-

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

EN

回答 2

Stack Overflow用户

发布于 2012-03-24 05:25:06

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

例如(来自http://www.dabeaz.com/ply/ply.html#ply_nn25)

代码语言:javascript
复制
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]

也可以写成

代码语言:javascript
复制
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]
票数 0
EN

Stack Overflow用户

发布于 2013-09-25 05:10:57

拥有多个解析器不是问题,请查看PLY文档(这里是http://www.dabeaz.com/ply/ply.html#ply_nn37)

代码语言:javascript
复制
lexer  = lex.lex()       # Return lexer object
parser = yacc.yacc()     # Return parser object

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

代码语言:javascript
复制
parser.parse(text,lexer=lexer)

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

因此,您可以包含一些属性

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

代码语言:javascript
复制
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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9846412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档