Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Need a Backend Compiler

I have created a compiler that produces an intermediate code. I do not have the time to write the backend for my project.

Is there any software I could use to evaluate the intermediate code produced? Where could I download this software?

The output looks something like this :

    t1 = 0.67596e-7
    sum = t1

    t1 = 2
    t2 = 3
    t3 = t2 + t1
    i = t3

L0:
    t1 = sum
    t2 = 20
t3 = compare(t1 <= t2)
    t4 = sum
    t5 = 12
t6 = compare(t4 ~= t5)
t7 = t3 | t6
    t8 = sum
    t9 = 20
t10 = compare(t8 > t9)
t11 = t7 & t10
if t11 true then goto L1 else goto L2
L1: 
    t1 = 2
    t2 = sum
    t3 = t2 + t1
    sum = t3

    t1 = 1
    t2 = i
    t3 = t2 + t1
    i = t3
    goto L0
L2:

Thanks for reading.

like image 995
user58935 Avatar asked Mar 21 '09 15:03

user58935


2 Answers

Code generation is my business :-)

Comments on a few options:

  • CLR:

    • Pro: industrial support
    • Con: you have to buy into their type system pretty much completely; depending on what you want to do with types, this may not matter
    • Con: Only Windows platform is really prime-time quality
  • LLVM:

    • Pro: enthusiastic user community with charismatic leader
    • Pro: many interesting performance improvements
    • Con: somewhat complex interface
    • Con: history of holes in the engineering; as LLVM matures expect the holes in the engineering to be plugged by adding to the complexity of the interface
  • C--

    • Pro: target is an actual written language, not an API; you can easily inspect, debug, and edit your C-- code
    • Pro: design is reasonably mature and reasonably clean
    • Pro: supports accurate garbage collection
    • Pro: most users report it is very easy to use
    • Con: very small development team
    • Con: as of early 2009, supports only three hardware platforms (x86, PPC, ARM)
    • Con: does not ship with a garbage collector
    • Con: future of project is uncertain
  • C as target language

    • Pro: looks easy
    • Con: nearly impossible to get decent performance
    • Con: will drive you nuts in the long run; ask the long line of people who have tried to compile Haskell, ML, Modula-3, Scheme and more using this technique. At some point every one of these people gave up and built their own native code generator.

Summary: anything except C is a reasonable choice. For the best combination of flexibility, quality, and expected longevity, I'd probably recommend LLVM. But your example code is very close to C--, so that may be an advantage.

Full disclosure: I am affiliated with the C-- project.

like image 191
Norman Ramsey Avatar answered Dec 19 '22 00:12

Norman Ramsey


Have a look at the llvm compiler infrastructure project. It is used in a lot of real world projects. The LLVM is a low level virtual machine, easy to create code for and easy to translate to native code.

like image 30
froh42 Avatar answered Dec 19 '22 01:12

froh42