Я пишу компилятор, который будет компилировать язык, который я сделал (называется Сленг (в настоящее время эти файлы несколько отстают, что не важно) в C ++ (в конечном итоге ELF, Mach-O и PE, но это будет позже). Это мой первый компилятор, и мне было интересно, как лучше включить библиотеки? В c / c ++ библиотеки просто импортируются путем копирования и вставки (в худшем случае. Я уверен, что некоторые более сложные вещи происходят там). Это лучший способ сделать это для компилятора? Есть ли более эффективный способ для тех, кто не сможет подобрать препроцессор gcc / visual c ++ / clang? Заранее благодарю за любую помощь, которую вы можете оказать. Просто чтобы прояснить, я не прошу конкретный код, просто идеи о том, как это сделать.
Примечание Если кто-нибудь знает о каких-либо форумах, посвященных компилятору, или IRC-каналам, я хотел бы знать, что они из себя представляют. Я посмотрел и посмотрел, и еще не нашел ни одного, кроме конкретных для продукта, таких как #gcc или #clang.
редактировать: я оговорился выше. Я знаю, что только файл заголовка вставляется в файл, включающий его, и затем компоновщик связывает исходные файлы с большим количеством исходных файлов и / или библиотек. Однако я все еще ищу наиболее эффективный способ включения библиотек без написания компоновщика для SLang.
Вы не предоставили небольшой пример «Hello World» для своего языка программирования и, по вашей ссылке, не показали ни одного примера напрямую.
Попытка сделать что-то подобное, в прошлом.
Возможно, вы захотите взглянуть на D, так как это похожий известный случай:
Большинство языков программирования не имеют заголовочных файлов, но могут генерировать заголовочные файлы, если они скомпилированы в C или C ++.
Как ваш компилятор / язык программирования обрабатывает отдельные файлы?
Как ваш компилятор / язык программирования находит отдельные файлы?
Я предлагаю вашему языку программирования поддерживать пространства имен или модули. «Обычный C» и «PHP» изначально не имели пространств имен.
Что-то вроде:
Файл: «CollectionExample.sprg»
namespace CollectionExample;
import Collections = "c:\\slang\\Collections.slib";
...
void main()
{
// do something with definitions in "Collections"}
...
Он может генерировать файлы C ++, такие как:
Файл: «CollectionExample.hpp»
А также:
Файл: «CollectionExample.cpp»
#include "c:\\slang\\Collections.hpp"#include "c:\\slang\\CollectionExample.hpp"...
Я также предлагаю, чтобы на вашем языке программирования использовалось другое расширение файла или суффикс файла из библиотек, чем в основной программе.
Приветствия.