0

我试图解析的结构如下所示:

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

每个父母都有一个孩子组的列表,每个孩子都有一个对其父母的引用。如果没有 shift/reduce 冲突,我似乎无法让语法运行,并且它没有正确解析。

4

1 回答 1

1

问题在于子组的定义:在子组状态下,标记 GROUP 可以导致移位或减少(移位将其作为一个新组进行解析,减少识别子组-handled-so-far 并让 GROUP 被重新扫描组成一个新组),并且标记“]”也可以导致移位或减少(类似的推理)。

我认为您的意图是可以将其重写为:

subgroups : "[" sublist_opt "]"

和:

sublist_opt : group sublist_opt
            | empty

(我让你为这个语法片段填写 python 代码)。

于 2013-10-16T07:02:58.007 回答