我第一次使用YACC,并且已经习惯了使用BNF语法。在
我目前正在从一个逗号分隔的列表(例如int
,float
,string
)构建list
def p_type(p):
'''type : primitive_type
| array
| generic_type
| ID'''
p[0] = p[1]
def p_type_list(p):
'''type_list : type
| type COMMA type_list'''
if not isinstance(p[0], list):
p[0] = list()
p[0].append(p[1])
if len(p) == 4:
p[0] += p[3]
规则是可行的,但是我感觉到我的p_type_list
逻辑有点混乱,可以简化为一行代码。在
我在网上没有找到任何具体的例子。任何帮助将不胜感激!在
或者“简化”
p_type_list
到(你减少了1行代码,不确定是否值得):有两个产品。使用两个单独的函数。(无额外费用:-)
注意:我修正了你的语法使用左递归。对于自底向上的解析,左递归几乎总是您想要的,因为它避免了不必要的解析器堆栈使用,更重要的是它常常简化操作。在这种情况下,我可以将第二个函数写成:
^{pr2}$这样可以避免列表复制。在
相关问题 更多 >
编程相关推荐