Я занимаюсь созданием пользовательского языка для удовольствия, в основном для того, чтобы узнать, как он работает, но у меня возникают проблемы с концепциями, прежде чем я копаю код.Сгенерировать код стиля С ++ с помощью 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?
Хотя это информационное, я действительно не ищу широкого объяснения, я рассмотрел исходный код для процесса, описанного выше, мне интересно, что мне нужно сделать, чтобы он работал, как описано выше, какая логика в каких шагах сделать это, как в моем посте? Мне не нужны детали, которые мне обычно нужно делать, чтобы они работали, как я хочу. В основном я понимаю процессы лексинга и синтаксического анализа, но я не уверен, когда в этом процессе мне нужно будет учитывать и что мне нужно делать. – Krum110487
Я думаю, что ваш вопрос слишком широк. Для меня ваш вопрос звучит так: «Как мне заставить работать язык программирования», который очень широк. –
Это широкий вопрос о конкретном элементе, мне не нужно все это для работы, мне просто нужны широкие шаги, описывающие его, никакого кода или чего-то еще. Я понимаю, что такое lexing и parsing, а также семантический анализ (менее того), но мне действительно нужно понять процесс превращения дескриптора слова в функцию. Является ли это вопросом анализа Symantic или я каким-то образом обработаю его в IR? Я понимаю, как разбирать что-то как есть, что имеет смысл для меня, но в какой момент я бы перевел его на новый код, как показано выше? Это то, что я ищу. Благодарю. – Krum110487