Я использую 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».
Итак, я знаю, что использую рекурсию неправильно. Кто-нибудь может мне помочь? Сообщите мне, если мне понадобится дополнительная информация.
Спасибо !!!!