用gcc扩展c语言

用gcc扩展c语言,c,gcc,compiler-construction,programming-languages,translation,C,Gcc,Compiler Construction,Programming Languages,Translation,我想写我自己的编程语言作为c编程语言的扩展。我发明的整个编程语言都是简写的,可以转换成有效的c代码。例如: namespace TcpConnection { void* connect(char *addr) } 将转化为: void* TcpConnection_connect(char *addr) 所做的只是一个简单的名称替换。这只是我想提供的扩展的一个例子。另一个简单的扩展是函数重载(这将把它的参数类型连接到函数名的末尾) 无论如何,结果是完全有效的C代码。有没有办法在不进

我想写我自己的编程语言作为c编程语言的扩展。我发明的整个编程语言都是简写的,可以转换成有效的c代码。例如:

namespace TcpConnection {
    void* connect(char *addr)
}
将转化为:

void* TcpConnection_connect(char *addr)
所做的只是一个简单的名称替换。这只是我想提供的扩展的一个例子。另一个简单的扩展是函数重载(这将把它的参数类型连接到函数名的末尾)


无论如何,结果是完全有效的C代码。有没有办法在不进入GCC代码的情况下?< /P> < P>你可以编写一个预处理器,它解析你的语言并编译成C,然后传递给GCC。这就是C++的早期实现方式。但是,你可能更喜欢对LVVM的CLAN进行黑客攻击,这是设计成S的。支持多种C族语言,作为LLVM的一部分,它的设计也更加模块化和易于扩展。

对于原型设计,可能只需使用用您选择的语言(C、Perl、Python…)编写的预处理器,然后将其构建到您的Makefile规则中。只需获得一种简单、低成本的方法来尝试所有功能


使用不同的文件扩展名,并将.foo转换为.c.

您可以在其上进行黑客攻击


Clang是另一种选择,但它不是最有用的代码重写工具,修改其解析器前端也不是那么容易。

我使用一些C99宏魔术和Perl做了类似的事情,为自定义字节码格式嵌入汇编语言

#define x3_pragma_(...) _Pragma(#__VA_ARGS__)
#define x3_asm(...) ((const struct x3instruction []){ \
    x3_pragma_(X3 ASM __VA_ARGS__) \
})
转化

x3_asm(exit = find val(0))
进入

它通过一个Perl脚本来获取

((const struct x3instruction []){
{ { { X3_OPFINDVAL, { .as_uint = (0) } }, { X3_OPEXIT, { 0 } } } },
})
gcc和perl的示例调用如下所示:

gcc -E foo.c | perl x3pp.pl | gcc -o foo.o -x c -
这比严格必要的要复杂得多,但我发现C预处理器在我的自定义预处理器之前运行是有益的,而且我还喜欢通过使用pragmas,源代码保持C的合法性

gcc -E foo.c | perl x3pp.pl | gcc -o foo.o -x c -