2015-06-10 2 views
0

Я занимаюсь созданием пользовательского языка для удовольствия, в основном для того, чтобы узнать, как он работает, но у меня возникают проблемы с концепциями, прежде чем я копаю код.Сгенерировать код стиля С ++ с помощью LLVM

Я посмотрел на Калейдоскоп пример кода и многих других интернет-ресурсов, но я запутался о том, как сделать пару вещей:

Моя цель Перевести мой код на C++ или непосредственно кода в машинный код в стиле C++ AST

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

Какой у меня язык? Мой язык будет специфичным для sql и создания базы данных с упором на управление версиями и стратегии кэширования.

Моя проблема Я не уверен, как перевести часть информации на моем «языке» на эквивалент C++.

Пример:

//An Integer type which is nullable and the default value of null. 
int number = nullable; 

перевести бы на что-то вроде этого ...

public static sqlInt number = new sqlInt(true, null); 

Проблема Я имею в том, как бы я генерировать поколения AST и LLVM код признать поле «nullable» в качестве нового sqlInt без явного написания его? И это нужно будет работать для более сложных типов:

Пример 2:

//Create a foreign key which is of type int, points to pkID 
//forces reference and holds ZeroToMany records for a single pkID 
//It is also nullable with a default value of 0. 
FK<int>(tableName.pkID, true, ZTM) fk1 = nullable(0); 

бы перевести на что-то вроде этого:

public static FK<sqlInt> fk1 = new FK<sqlInt>(tableName.pkID, true, 
               ZTM, true, 0); 

вопрос остается, что я должен построить АСТ особенный? если да, то что мне нужно сделать, чтобы это стало возможным? Или это будет характерно для LLVM?

Я не могу найти пример языка llvm, подобного этому стилю.

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

Редактировать Я понимаю (в основном), как сделать парсер и лексера найти функцию и присвоить его переменной, но я не уверен, когда я должен получить функцию, чтобы объявить sqlInt и как найти правильные параметры ... и т. д. Это во время генерации кода после LLVM IR? Должен ли я учитывать это до LLVM IR?

ответ

1

Если вы используете LLVM, вам захочется перевести с вашего языка на LLVM IR, а не на C++ ast.

Процесс перехода от текста исходного языка к IR - лексирование, синтаксический анализ, семантический анализ и опускание.

+0

Хотя это информационное, я действительно не ищу широкого объяснения, я рассмотрел исходный код для процесса, описанного выше, мне интересно, что мне нужно сделать, чтобы он работал, как описано выше, какая логика в каких шагах сделать это, как в моем посте? Мне не нужны детали, которые мне обычно нужно делать, чтобы они работали, как я хочу. В основном я понимаю процессы лексинга и синтаксического анализа, но я не уверен, когда в этом процессе мне нужно будет учитывать и что мне нужно делать. – Krum110487

+0

Я думаю, что ваш вопрос слишком широк. Для меня ваш вопрос звучит так: «Как мне заставить работать язык программирования», который очень широк. –

+0

Это широкий вопрос о конкретном элементе, мне не нужно все это для работы, мне просто нужны широкие шаги, описывающие его, никакого кода или чего-то еще. Я понимаю, что такое lexing и parsing, а также семантический анализ (менее того), но мне действительно нужно понять процесс превращения дескриптора слова в функцию. Является ли это вопросом анализа Symantic или я каким-то образом обработаю его в IR? Я понимаю, как разбирать что-то как есть, что имеет смысл для меня, но в какой момент я бы перевел его на новый код, как показано выше? Это то, что я ищу. Благодарю. – Krum110487

Смежные вопросы