LLVM用于食谱式语言

时间:2018-04-19 16:04:24

标签: compiler-construction llvm

我想学习LLVM。我想尝试使用以下食谱风格语言:

Ingredients:
    x-unit Flour
    y-unit Yeast
    z-unit Water
    a-unit Sugar

Instructions:
    bowl = mix flour with yeast for 30 seconds
    bowl = mix bowl with sugar for 25 seconds
    bowl = mix bowl with water for 1 minute
    heat bowl for 3 hours
    dough = split bowl into 3 parts
    heat dough[n] at 450 f for 1 hour

由于它是一种学习经历,我不确定LLVM是否能够处理时间/体积是可以计算的维度的语言。在阅读了一些文档之后,我并不完全确定这是否是我想要做的正确工具。

我想学习这门语言,编译它,并将其转换为有效的C / Python代码,这样我就可以使用RPi或Arduino来执行程序。基本上我想尝试通过用这种语言表达它们来自动化基本食谱,并从中运行一个小厨房。

以不同的方式提出问题:LLVM如何处理特定时间的指令。那么我将如何在LLVM IR中表达指令mix flour with yeast for 30 seconds

1 个答案:

答案 0 :(得分:0)

  

我不确定LLVM是否能够处理时间/体积是可以计算的维度的语言。

一般情况下,您可以在LLVM中执行任何可以在C中执行的操作。毕竟clang将C编译为LLVM。

  

我想学习这门语言,编译它,并将其转换为有效的C / Python代码

如果你想生成C和/或Python,那就这样做吧。如果目标是机器代码/程序集,则通过LLVM。 LLVM无法帮助您生成C代码或Python代码。

  

LLVM如何处理特定于时间的指令

您只需调用相应的操作系统或libc函数(或嵌入式平台上的等效函数) - 就像在C中一样。例如,要在POSIX系统上等待30秒,您将调用{{1 }}:

sleep

您还必须为该函数生成声明:

call i32 (i32) @sleep(i32 30)

所以基本上你在手写的C程序中完成同样的事情,除了LLVM的函数调用语法和声明而不是C语言。