AST для любого произвольного языка программирования или IR - PullRequest
2 голосов
/ 06 октября 2010

Можно ли создать AST для любого произвольного языка программирования или IR, используя только C или C ++ (без помощи таких инструментов, как YACC и LEX)?

Если да, то как осуществить лексический и синтаксический анализ?

Если нет, то какие инструменты должны быть расширены до C или C ++ для успешного создания AST?

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

P.S: На самом деле я пытаюсь создать AST для формата LLVM IR-представления. Я знаю, что .ll происходит от AST. Но я пробую практики статического анализа. Итак, я смотрю на создание AST.

Ответы [ 2 ]

2 голосов
/ 06 октября 2010

Самая простая методика создания парсера без генератора парсера - это рекурсивный спуск . Это очень хорошо задокументировано - стандартная книга в этой области - Книга Дракона .

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

0 голосов
/ 07 октября 2010

Я сомневаюсь, что между вашим произвольным языком и AST LLVM существует взаимно-однозначное соответствие.Это означает, что вполне вероятно, что вы действительно хотите сделать это в два этапа:

  • Разбор вашего «произвольного языка» с использованием лучших инструментов синтаксического анализа, которые вы можете получить, чтобы упростить проблему синтаксического анализа вашего языка.,Используйте это для создания AST для вашего языка, следуя стандартным методам для генераторов синтаксического анализатора, производящих AST.LEX / YACC в порядке, но есть много хороших альтернатив.Весьма вероятно, что вам понадобится построить таблицу символов.

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

Это классический стиль для простого компилятора.

Предлагаю вам прочитать книгу Aho / Ullman Dragon о синтаксически направленном переводе.Дневная учеба сэкономит вам месяцы потраченного впустую инженерного времени.

...