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)が含まれます。
このセクションを解析するための私のコード(スニペット)は次のとおりです。
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'を期待していると言っています。
したがって、再帰を正しく使用していないことがわかります。誰かが私を助けることができますか?さらに情報を提供する必要がある場合はお知らせください。
ありがとう!!!!