【发布时间】:2013-12-15 13:50:08
【问题描述】:
我继承了一个 ANTLR 语法,现在我需要编写一个好的、旧的、类似 YACC/BISON 的解析器(具体来说,我将 PLY 用于 python)。有许多奇怪的规则,我现在正在努力解决以下问题:
factor : ('(' expr ')' | procedure | variable) ('.' variable | call)* '!'?
目前,我只有第一部分的规则,即
factor : '(' expr ')'
| procedure
| variable
PLY 规则:
def p_factor_1(self, p):
""" factor : LPAREN expr RPAREN """
p[0] = p[2]
def p_factor_2(self, p):
""" factor : variable
| procedure_definition
"""
p[0] = p[1]
我怎样才能把那件上衣变成真正适合 PLY 的东西?我需要合理的规则,这样我就可以为单个 expr、过程、变量构建一个 AST 节点,然后还可以为变量访问和链式调用的链接构建一些节点。更糟糕的是还有“!” .原始语法的创建者这样做是为了给予最高优先级的因式分解,但对于转换,这完全是痛苦的。
【问题讨论】:
-
Grako 有一个 ANTLR 到 Grako 的翻译器,并提供简单的 Python 解析器构造。
标签: python parsing grammar context-free-grammar ply