跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 我想用 llvm 制作一门语言的编译器,是不是要学会 llvm ir 里的哪个奇怪的语法
未分類
31 12 月 2020

我想用 llvm 制作一门语言的编译器,是不是要学会 llvm ir 里的哪个奇怪的语法

我想用 llvm 制作一门语言的编译器,是不是要学会 llvm ir 里的哪个奇怪的语法

資深大佬 : find456789 9

我的理解是,llvm ir 里的语法,应该也类似一门编程语言,但这个语言是针对大部分硬件平台通用的

我只要把我的编程语言,翻译成 llvm ir 里的语言, 就可以实现一门可以在大多数平台编译的语言了

所以,在我的语言里,我要实现 print(“hello world”), 那我就要掌握 llvm ir 里,怎么实现 打印 hello word,

如果我要实现 定义一个函数的功能, 就要掌握 用 llvm ir 语言定义函数的方法

只有掌握了 llvm ir 语言, 才能实现这个翻译的过程

请问我的理解对吗? 我应该怎么办

下图是我发现的 llvm ir 的语言

如图

我想用 llvm 制作一门语言的编译器,是不是要学会 llvm ir 里的哪个奇怪的语法

大佬有話說 (9)

  • 資深大佬 : sfqtsh

    https://llvm.org/docs/tutorial/

  • 資深大佬 : ghostheaven

    你需要的是实现 llvm 的前端,找本编译原理看看。

  • 資深大佬 : ghostheaven

    当然 llvm 的 ir 也是要懂的

  • 資深大佬 : xiri

    实现一门编程语言 /编译器并不是简单地“翻译”就够了。一般来说需要先进行词法分析、语法分析生成不依赖于具体文法和语言细节的 AST 树,然后在此基础上进行处理、优化,最后根据具体的平台 /系统生成目标代码。
    不能简单的看成用一门已有的语言将新语言的功能一一对应翻译出来,建议还是去系统的学习一下编译原理比较好。

  • 資深大佬 : secondwtq

    我想用 x86 制作一门语言的编译器,是不是要学会 x86 汇编里的哪个奇怪的语法

  • 資深大佬 : codehz

    然而 llvm ir 没有帮你处理好 abi,也就是包括调用约定在内的还是得和各个具体平台对接

  • 資深大佬 : GeruzoniAnsasu

    不完全是,你写代码的时候用的是 llvm 框架提供的 ir builder,它有自己的代码来生成对应的 byte code

    但你自己的语言里,要将语言背后的数据结构(类似 PyObject 这种东西)做好定义,并且每个词法元素之间的相互作用也要自己实现,这是实现编译器很麻烦的一个地方。举个例子我想实现全 OO 语言,把所有词法元素都看做 MyLangObject 这很好,但 MyLangObject 的结构如何定义,内存如何分配,是否要调语言 Runtime 实现的 API,这些都是要提前考虑的,然后调用 Runtime 的内存分配这件事,你要用 byte code 实现出来

  • 資深大佬 : amimo

    不需要。你使用的是 LLVM 提供 API 生成 IR,不需要预先学习这个 IR 的文本表示,但看懂它有助于调试你的前端。
    因为 llvm ir 是 ssa 形式的,没有接触过可能还不好转,你可以考虑把你的语言先转成 C,控制流使用 goto,这步走通之后再使用 llvm 。

  • 資深大佬 : msg7086

    不止是语言吧,还有运行时。你说的 print 是要真的有人写出来的。
    你可以调用现有 C 运行时里的函数,也可以实现自己的版本。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具