llvm 实现一门语言_使用LLVM实现一门语言(一)Lexer

这个系列来自LLVM的Kaleidoscope教程,增加了我对代码的注释以及一些理解,修改了部分代码。现在开始我们要使用LLVM实现一个编译器,完成对如下代码的编译运行# 斐波那契数列函数定义def fib(x) if x < 3 then 1 else fib(x - 1) + fib(x - 2)fib(40)# 函数声明ext...
摘要由CSDN通过智能技术生成

这个系列来自LLVM的Kaleidoscope教程,增加了我对代码的注释以及一些理解,修改了部分代码。

现在开始我们要使用LLVM实现一个编译器,完成对如下代码的编译运行

# 斐波那契数列函数定义
def fib(x)
    if x < 3 then
        1
    else
        fib(x - 1) + fib(x - 2)

fib(40)

# 函数声明
extern sin(arg)
extern cos(arg)
extern atan2(arg1 arg2)

# 声明后的函数可调用
atan2(sin(.4), cos(42))

这个语言称为Kaleidoscope, 从代码可以看出,Kaleidoscope支持函数、条件分支、数值计算等语言特性。为了方便,Kaleidoscope唯一支持的数据类型为float64, 所以示例中的所有数值都是float64.

编译的第一个步骤称为Lex, 词法分析,其功能是将文本输入转为多个tokens, 比如对于如下代码

atan2(sin(.4), cos(42))

就应该转为

tokens = ["atan2", "(", "sin", "(", .4, ")", ",", "cos", "(", 42, ")", ")"]

接下来我们使用C++来写这个Lexer, 由于这是教程代码,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值