开发者

Converting Abstract Syntax Tree to Byte code

开发者 https://www.devze.com 2023-03-21 07:09 出处:网络
I am trying to learn to build a simple compiler as a hobby. I am targeting the Java virtual machine.

I am trying to learn to build a simple compiler as a hobby. I am targeting the Java virtual machine.

I have written a simple grammar using ANTLR plugin for Eclipse .

Someone told me that there is something known as a method node on the AST generated by Antlr, and that has to be called. I am planning to use ASM开发者_Python百科 to generate the bytecode. So what is the method node and How do I call it from ASM and make it visit method instructions?

Also what about the semantic analyzer of a compiler. Should that be manually written or are there any generators for it?


You ask many unrelated questions in here. Depending on the language you define, there may be a method node in your language or there won't be any, say, if your language compiles to a main(String[]) method unconditionally.

There are multiple approaches to transform an AST to a target language. Mostly you would not generate code directly, but generate an AST for your target platform and have a pretty printer generate code out of it, using a treewalker.

The semantic analysis is the programming of a compiler. Reading and understanding the input on a syntactically level is the parsing. You will need to write the semantic analyzer on your own or you would not have written a compiler at all. ;-)

I presume you use Jasmin to compile the assembly code? A very good start would be writing grammars for your input language and the target language (Jasmin) and think about, which input structures would render what output. How would one write a for i := 1 to 10 loop in Jasmin? Tackle small problems and expand your compiler as needed, but slowly, testing newly implemented transformations early and thoroughly.

A very good reading: Let's Build a Compiler, by Jack Crenshaw.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号