登录
首页 >  Golang >  Go问答

需要为了在Antlr4中创建一种语言生成LLVM IR时手动编写LLVM IR吗?

来源:stackoverflow

时间:2024-03-14 09:51:27 435浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《需要为了在Antlr4中创建一种语言生成LLVM IR时手动编写LLVM IR吗?》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

在学习antlr4时,我使用golang作为目标语言,所以我的玩具语言中的语句如下:

$myVar = 10
$myVar + 5

将转换为一些为结果生成“15”的 golang 代码

但是,据我所知,antlr 没有 llvm ir 目标,所以问题是:我有什么选择?

1) 生成 c/c++,然后用它来发出 llvm ir?

2) 尝试寻找 golang llvm ir 发射器?

3)继续使用生成的go词法分析器/解析器但手写llvm ir?

我尝试浏览 llvm 文档并观看了 llvm< 上的一些视频,但它们似乎都生成 c/c++,然后以这种方式与 api 进行通信。不确定他们这样做是因为他们知道这一点,还是因为这是唯一的方法。

预先感谢您提供任何见解!


解决方案


在学习antlr4时,我使用golang作为目标语言,所以我的玩具语言中的语句如下:

$myVar = 10
$myVar + 5

将转换为一些为结果生成“15”的 golang 代码

这不准确。您的语法被翻译成解析您的语言的 go 代码。然后,您自己的代码可以使用生成的解析器将上述内容转换为您想要的任何内容。

antlr 没有 llvm ir 目标

即使有,也不会帮助你。要做的就是创建一个用 llvm 而不是 go 编写的解析器。您仍然需要自己编写代码将您的语言翻译为 llvm(就像您必须编写自己的代码将您的语言翻译为 go 一样)。

至于是使用 llvm-api 生成 llvm 还是将其生成为字符串,任一选项都可以。有 Go bindings for LLVM 个,但也完全可以将 llvm 程序集写入 .ll 文件,然后通过 llc 运行它。

到这里,我们也就讲完了《需要为了在Antlr4中创建一种语言生成LLVM IR时手动编写LLVM IR吗?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>