Обход схемы-подобного дерева (графа) дампа с использованием C

StackOverflow https://stackoverflow.com/questions/7335275

  •  27-10-2019
  •  | 
  •  

Вопрос

У меня есть древовидная структура graph в виде схемы.Я хочу проанализировать его с помощью C в некоторое представление в памяти и пройтись по нему.

Есть ли для этого библиотека или интерфейс парсера?

РЕДАКТИРОВАТЬ:

Я проанализировал следующее выражение

родовое слово

в следующее (это мой дамп дерева в виде схемы)

родовое слово

Который я хочу пройти с помощью C (я должен передать его кому-то другому, который работает только с C).PROG - это метка;AndExp, OrExp и т. Д. Являются токенами для &&, ||и т. д.

Это было полезно?

Решение

Похоже, это разновидность S-выражения .Возможно, этот синтаксический анализатор S-выражений можно изменить для ваших нужд.

Другие советы

Думаю, я понял ваше требование, но не совсем уверен.

У вас есть выражения в префиксной нотации, поэтому в основном это загрузка префиксного выражения, которое есть в вашем файле дампа, в двоичном дереве.

Вот псевдокод, описывающий процесс загрузки выражений в дерево.

родовое слово
  • Рекурсивный вызов 1 с генератором кода тега

    tok1= (AndExp TVal(OrExp FValTVal)) создает новый node1

    tok2= AndExp

    tok3= TVal

  • Рекурсивный вызов 2 с (OrExp FValTVal) возвращает node2 в вызов 1 , который связывает его с левым указателем node1.

  • Рекурсивный вызов 3 с генерирующим кодом тега из вызова 1.

    tok1= TVal создает новый узел 3

    tok2= (OrExp FValTVal)

    tok3= ORExp

  • Рекурсивный call 3 с FVal и call 4 с TVal соответственно возвращает node4 и node5 со значениями операндов, которые связаны с левой и правой ссылками узел 3 из вызова 3.

Подвыражение больше не рассматривается, рекурсия возвращается к начальной точке. У вас есть корень дерева.

родовое слово

Если операндов больше двух, обработку можно произвести аналогичным образом, добавив дополнительные ссылки на узлы дерева.

Для каждого выражения в вашем файле дампа, разделенных запятыми, будут отдельные деревья, по которым после создания можно будет пройти.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top