编译器架构的王者LLVM——(7)函数的翻译方法

本文介绍了LLVM编译器架构中关于函数翻译的方法,包括设计宏、宏函数的编写以及函数的特殊问题。重点讨论了如何利用宏驱动编译过程,以及在处理函数声明和定义时的LLVM API使用,同时提到了符号表的查询接口和函数类型的构造。
摘要由CSDN通过智能技术生成

LLVM平台,短短几年间,改变了众多编程语言的走向,也催生了一大批具有特色的编程语言的出现,不愧为编译器架构的王者,也荣获2012年ACM软件系统奖 —— 题记

版权声明:本文为 西风逍遥游 原创文章,转载请注明出处 西风世界 http://blog.csdn.net/xfxyy_sxfancy

函数的翻译方法

前面介绍了许多编译器架构上面的特点,如何组织语法树、如果多遍扫描语法树。今天开始,我们就要设计本编译器中最核心的部分了,如何设计一个编译时宏,再利用LLVM按顺序生成模块。

设计宏

我们的编译器可以说是宏驱动的,因为我们扫描每个语法节点后,都会考察当前是不是一个合法的宏,例如我们来分析一下上一章的示例代码:

void hello(int k, int g) {
    ......
}   

我暂时隐藏了函数体部分,让大家先关注一下函数头

        String function
        String void
        String hello
        Node
            Node
                String set
                String int
                String k

            Node
                String set
                String int
                String g

        Node
            ......

我们的语法树的每一层相当于是链表组织的,通过next指针都可以找到下一个元素。
而语法树的开头部分,是一个“function”的宏名称,这个部分就是提示我们用哪个宏函数来翻译用的。

接下来的节点就是: 返回类型,函数名,参数表,函数体

例如参数表,里面的内容很多,但我们扫描时,它们是一个整体,进行识别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值