Python PLY 解析项出现零次或多次

发布于 2024-09-01 08:04:59 字数 358 浏览 13 评论 0原文

我使用 Python 和 PLY 来解析类似 LISP 的 S 表达式,在解析函数调用时可以有零个或多个参数。我如何将其放入 yacc 代码中。到目前为止,这是我的功能:

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])

我需要将“[EXPR]”替换为允许零个或多个 EXPR 的内容。我该怎么做?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

紫﹏色ふ单纯 2024-09-08 08:04:59

这个怎么样:

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

How about this:

EXPR : NUMBER
        | STRING
        | LPAREN funcname EXPR_REPEAT RPAREN
EXPR_REPEAT: /*nothing*/
        | EXPR EXPR_REPEAT
怀念你的温柔 2024-09-08 08:04:59

您确定需要上下文无关语法而不是解析表达式语法吗?另外,根据我的经验,PLY 的设计将语法、解析和后处理结合得非常糟糕,因此我建议采用更加模块化设计的实现。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文