【发布时间】:2010-11-10 03:07:55
【问题描述】:
我正在使用 pyparsing 来解析 vcd(值更改转储)文件。本质上,我想读入文件,将其解析为内部字典,然后操作值。
在不详细介绍结构的情况下,我的问题在于识别嵌套类别。
在 vcd 文件中,您有“范围”,其中包括连线,可能还有一些更深(嵌套)的范围。把它们想象成关卡。
所以在我的文件中,我有:
$scope module toplevel $end
$scope module midlevel $end
$var wire a $end
$var wire b $end
$upscope $end
$var wire c $end
$var wire d $end
$var wire e $end
$scope module extralevel $end
$var wire f $end
$var wire g $end
$upscope $end
$var wire h $end
$var wire i $end
$upscope $end
所以“顶层”包含所有内容 (a - i),“中层”包含 (a - b),“外层”包含 (f - g),等等。
这是我解析此部分的代码 (sn-p):
scope_header = Group(Literal('$scope') + Word(alphas) + Word(alphas) + \
Literal('$end'))
wire_map = Group(Literal('$var') + Literal('wire') + Word(alphas) + \
Literal('$end'))
scope_footer = Group(Literal('$upscope') + Literal('$end'))
scope = Forward()
scope << (scope_header + ZeroOrMore(wire_map) + ZeroOrMore(scope) + \
ZeroOrMore(wire_map) + scope_footer)
现在,我认为发生的事情是,当它到达每个范围时,它会跟踪每个“级别”,我最终会得到一个包含嵌套范围的结构。但是,它在
上出错$scope module extralevel $end
说它需要'$upscope'。
所以我知道我没有正确使用递归。有人可以帮我吗?如果我需要提供更多信息,请告诉我。
谢谢!!!!
【问题讨论】:
标签: python recursion forward pyparsing