Gerar bytecode para JVM

Estou nos ultimos messes estudando sobre desenvolvimento de compiladores. Como ja tenho uma boa base de como fazer um, estou crianso uma linguagem para estudos, essa é a sintaxe:

var num = 10
print "num tem o valor " + 10

Bom minha dúvida é em relação ao back end do compilador. Vi que a JVM tem uma boa documentação sobre as instituições mais nao sei como posso gerar o bytecode dessa “nova linguagem” para que a JVM possa executar alguem pode me ajudar com isso?
Desde já agradeço.

Se vc já consegue caminhar na árvore de análise sintática e verificar a semântica, o processo de tradução é quase direto… Como prova de conceito, pq primeiro vc não traduz sua linguagem para outra, pode ser Java mesmo e compila o que foi gerado? Sinceramente não sei se vale a pena descer tanto assim perto da JVM.

Essa é uma ótima diversão.

https://asm.ow2.io/

https://commons.apache.org/proper/commons-bcel/

Porque minha ideia é um pouco maluca. Quero criar uma linguagem tipo Kotlin mas bem maluca, como:

  • usar metodos de classe java em uma outra classe (como funções)
  • misturar codigo java com a tal linguagem

Por exemplo:

 !JavaInitCode
public class Tes {
        public void Print (String msg) {
                System.out.println(msg);
        }
}
!JavaEndCode

pub class Main {
       extern method Tes : Print

       pub fun main() {
                Print("Hello world")
       }
}`

Ai não sei se usando apenas a árvore sintática é uma boa implementação

Já definiu a gramática dela?

Sim

Tem um negocio super legal, quentíssimo.
Já imaginou em Rodar Java em Java com resultado nativo.
Pois é, trata-se de Java on Truffle JVM da graalvm.org e o interessante que essa framework tem os passos pra fazer uma linguagem usando ela.

graalvm.org/graalvm-as-a-platform/language-implementation-framework/

1 curtida