我试图解析的结构看起来像这样:
group "a" [
group "b" [
group "c" [
]
]
group "d" [
]
]
和语法:
def p_group(p):
'''group : GROUP string subgroups'''
p[0] = DNAGroup(p[2])
for sgroup in p[3]:
print p[0].getName(), "subgroup ", sgroup.getName()
p[0].add(sgroup)
sgroup.setParent(p[0])
def p_subgroups(p):
'''subgroups : "[" group
| subgroups group
| subgroups "]"
| "[" "]"'''
if p[0] is None:
p[0] = []
if p[2] != ']':
p[0] += [p[2]]
每个父级都有一个子组列表,每个子组都有一个对其父级的引用。我似乎无法在没有移位/减少冲突的情况下获得语法,并且它无法正确解析。
答案 0 :(得分:1)
问题在于子组的定义:在子组状态中,令牌GROUP可以导致移位或缩小(将此作为一个新组进行解析,减少识别子组 - 处理到目前为止并离开GROUP重新扫描以创建一个新的组),令牌']'也可以导致转移或减少(类似的推理)。
我认为您的意图是可以将其重写为:
subgroups : "[" sublist_opt "]"
使用:
sublist_opt : group sublist_opt
| empty
(我让你填写这个语法片段的python代码)。