Как написать текстовый трансформер? - PullRequest
0 голосов
/ 02 марта 2010

Предположим, у меня есть текст, который я могу легко разобрать.Он состоит из текста и специальных идентификаторов.После анализа я получаю список токенов, которые соответствуют тексту и специальным идентификаторам в тексте.

Проблема, с которой я сталкиваюсь, состоит в том, как преобразовать ее из этого списка токенов в какую-то другую форму?

Я не могу понять, как решить эту проблему.

Я пытался построить дерево разбора, но я не понимаю, что делать дальше.

Пожалуйста, сообщите об этой общей проблеме синтаксического анализа.

1 Ответ

3 голосов
/ 02 марта 2010

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

В зависимости от того, какой язык программирования вы используетея хотел бы использовать следующие генераторы синтаксических анализаторов:

C / C ++ - Yacc

Java - ANTLR (такжеJavaCC, SableCC)

Python - PLY (Python Lex / Yacc)

OCaml - ocamlyacc

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

Когда ваш синтаксический анализатор будет готов, он возьмет поток токенов и создаст дерево, используя промежуточное представление - типычто вы определяете для представления различных частей вашего языка (например, текст и специальные идентификаторы, которые вы упомянули).Затем вы можете манипулировать деревом так, как вам нравится.

Редактировать : в ответ на ваш комментарий - я не совсем уверен, какой уровень ответа дать вам, поскольку я не могу сказать,точно какая проблема у вас возникла.Во-первых, знакомы ли вы с древовидными структурами данных ?Если да, знаете ли вы, как написать простой рекурсивный алгоритм для определения высоты дерева или выполнить поиск в глубину?Помните, что дерево - это просто способ упорядочить информацию - от вас зависит, что вы будете делать с этой информацией.

Общий шаблон проектирования для применения алгоритма к разнородному дереву (то есть к дереву, узлы которогоразличных типов) Шаблон посетителя .Если вы уже знакомы с деревьями, вы можете посмотреть пример шаблона посетителя на своем любимом языке;однако, если концепция для вас нова, я настоятельно рекомендую начать с более простых алгоритмов для практики.

...