首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PLY yacc指定多行生产

PLY yacc指定多行生产
EN

Stack Overflow用户
提问于 2013-11-08 09:32:36
回答 2查看 654关注 0票数 3

有没有一种方法可以用下面的语法定义一个多线生产?PLY期望:在ID之前,这意味着每条线一个产品。

代码语言:javascript
复制
def p_envvar(p):
   ''' 
   envvar : EV                    \
            ID                    \
            COLON                 \ 
            INT_VAL               \ 
            BOX_OPEN              \ 
            INT_VAL               \ 
            SEP                   \ 
            INT_VAL               \ 
            BOX_CLOSE             \ 
            STRING_VAL            \ 
            INT_VAL               \ 
            INT_VAL               \ 
            DUMMY_NODE_VECTOR     \ 
            comma_identifier_list \ 
            SEMICOLON              
   '''
EN

回答 2

Stack Overflow用户

发布于 2013-11-21 05:39:07

您应该使用“管道”来分隔备用规则:

代码语言:javascript
复制
def p_envvar(p):
    ''' 
    envvar : EV
           | ID
           | COLON
           | INT_VAL
           | BOX_OPEN
           | INT_VAL
           | SEP
           | INT_VAL
           | BOX_CLOSE
           | STRING_VAL
           | INT_VAL
           | DUMMY_NODE_VECTOR
           | comma_identifier_list
           | SEMICOLON  
    '''

但是使用如此多的替代提示给我提示,你可能需要简化,(你可以声明不同的函数来简化到相同的状态:

代码语言:javascript
复制
def p_envar_ev():
    """envvar : EV"""

def p_envvar_id():
    """envvar : ID"""

..。等,这比使用大的if块来处理每种可能的情况更容易阅读。

票数 2
EN

Stack Overflow用户

发布于 2014-04-11 16:09:03

有一种方法可以以PLY理解的方式将一个长docstring分布在多条线路上:

代码语言:javascript
复制
def p_expr(p):
    ("""process_type : this is a very long """
     """ production rule """
     """ that does not fit on a single line """)

这个魔术的功劳归功于this的OP。注意括号:它们比使用\转义要好得多,因为它们符合PEP 8,所以语法检查器不会抱怨。

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

https://stackoverflow.com/questions/19850048

复制
相关文章

相似问题

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