Python PLY zero or more occurrences of a parsing item

馋奶兔 提交于 2019-12-07 13:01:10

问题


I am using Python with PLY to parse LISP-like S-Expressions and when parsing a function call there can be zero or more arguments. How can I put this into the yacc code. This is my function so far:

def p_EXPR(p):
    '''EXPR : NUMBER
            | STRING
            | LPAREN funcname [EXPR] RPAREN'''
    if len(p) == 2:
        p[0] = p[1]
    else:
        p[0] = ("Call", p[2], p[3:-1])

I need to replace "[EXPR]" with something that allows zero or more EXPR's. How can I do this?


回答1:


How about this:

EXPR : NUMBER
        | STRING
        | LPAREN funcname EXPR_REPEAT RPAREN
EXPR_REPEAT: /*nothing*/
        | EXPR EXPR_REPEAT



回答2:


Are you sure you want a Context Free Grammar and not a Parsing Expression Grammar? Also, in my experience the design of PLY couples the grammar and parsing and post-processing very badly so I would recommend an implementation with more modular design.



来源:https://stackoverflow.com/questions/2794762/python-ply-zero-or-more-occurrences-of-a-parsing-item

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!