Обход схемы-подобного дерева (графа) дампа с использованием C
-
27-10-2019 - |
Вопрос
У меня есть древовидная структура graph в виде схемы.Я хочу проанализировать его с помощью C в некоторое представление в памяти и пройтись по нему.
Есть ли для этого библиотека или интерфейс парсера?
РЕДАКТИРОВАТЬ:
Я проанализировал следующее выражение
родовое словов следующее (это мой дамп дерева в виде схемы)
родовое словоКоторый я хочу пройти с помощью C (я должен передать его кому-то другому, который работает только с C).PROG - это метка;AndExp, OrExp и т. Д. Являются токенами для &&, ||и т. д.
Решение
Похоже, это разновидность S-выражения .Возможно, этот синтаксический анализатор S-выражений можно изменить для ваших нужд.
Другие советы
Думаю, я понял ваше требование, но не совсем уверен.
У вас есть выражения в префиксной нотации, поэтому в основном это загрузка префиксного выражения, которое есть в вашем файле дампа, в двоичном дереве.
Вот псевдокод, описывающий процесс загрузки выражений в дерево.
родовое слово-
Рекурсивный вызов 1 с генератором кода тега
tok1=
(AndExp TVal(OrExp FValTVal))
создает новый node1tok2=
AndExp
tok3=
TVal
-
Рекурсивный вызов 2 с
(OrExp FValTVal)
возвращает node2 в вызов 1 , который связывает его с левым указателем node1. -
Рекурсивный вызов 3 с генерирующим кодом тега из вызова 1.
tok1=
TVal
создает новый узел 3tok2=
(OrExp FValTVal)
tok3=
ORExp
-
Рекурсивный call 3 с
FVal
и call 4 сTVal
соответственно возвращает node4 и node5 со значениями операндов, которые связаны с левой и правой ссылками узел 3 из вызова 3.
Подвыражение больше не рассматривается, рекурсия возвращается к начальной точке. У вас есть корень дерева.
родовое словоЕсли операндов больше двух, обработку можно произвести аналогичным образом, добавив дополнительные ссылки на узлы дерева.
Для каждого выражения в вашем файле дампа, разделенных запятыми, будут отдельные деревья, по которым после создания можно будет пройти.