Ich habe llvm-general-pure verwendet, um eine abstrakte Syntax Bäume für ein Programm in der LLVM language zu erstellen.Pretty print llvm-general-pure ASTs als llvm-ir?
Mit dem provided pretty printer, ich Ausgabe, die
A.Module {
A.moduleName = "main",
A.moduleDataLayout = Nothing,
A.moduleTargetTriple = Nothing,
A.moduleDefinitions = [
...
A.GlobalDefinition A.G.Function {
A.G.linkage = A.L.External,
A.G.visibility = A.V.Default,
A.G.callingConvention = A.CC.C,
A.G.returnAttributes = [],
A.G.returnType = A.IntegerType {A.typeBits = 32},
A.G.name = A.Name "Main",
A.G.parameters = ([], False),
A.G.functionAttributes = [],
A.G.section = Nothing,
A.G.alignment = 0,
A.G.garbageCollectorName = Nothing,
A.G.basicBlocks = [
A.G.BasicBlock (A.Name "mainBlock") [
A.Name "n57" A.:= A.Alloca {
A.allocatedType = A.IntegerType {A.typeBits = 64},
A.numElements = Nothing,
A.alignment = 0,
A.metadata = []
},
...
I ausgegeben werden soll, die wie
define i32 @main() {
mainBlock:
%n57 = alloca i64
...
}
...
Es verdächtig aussieht
sieht sieht aus wie es ein automatically generated parser für die Sprache LLVM ist in der llvm General -Paket, aber kein entsprechender hübscher Drucker.Stephen Diehl's excellent article Hinweise auf etwas namens moduleString
.
Ich kann 'moduleString' nicht finden (https://www.google.com/search?q=site%3Ahackage.haskell.org+moduleString+LLVM). Es scheint [in der Dokumentation für 3.3.8.2] (http://bscarlet.github.io/llvm-general/3.3.8.2/doc/html/llvm-general/LLVM-General-Module.html) aber gewesen zu sein es ist nicht in [3.4.4.1] (https://hackage.haskell.org/package/llvm-general-3.4.4.1/docs/LLVM-General-Module.html) (die neueste Version auf Hackage mit Dokumentation). – Cirdec
Ich hätte heute Morgen meinem Bauch vertrauen sollen, als es hieß: "Schreib einen hübschen Drucker für die Teilmenge von llvm, die du benutzt, du weißt, dass du in ein paar Stunden fertig bist", aber mein Herz entgleiste mir, als es sagte: "Sie werden nicht mit einem schönen Drucker für etwas weniger als die ganze Spezifikation zufrieden sein", und so beklagte sich mein Geist in den Zeilen: "Es ist eine große Menge von sinnlos langweilig Arbeit, einen hübschen Drucker für eine ganze Spezifikation zu schreiben ". – Cirdec
Sorry '' moduleString'' wurde in späteren Versionen '' moduleLLVMAssembly''. Sie tun das gleiche, dump die IR auf stdout. –