Ho imparato ANTLR, scrivendo il mio (estremamente semplice!) linguaggio di programmazione
Mi ha incuriosito su come il lexer / parser / AST sia implementato per java. Ovviamente c'è una grammatica per .java
file e questa viene analizzata in ByteCode, che viene poi validata per verificare che tutto sia sintatticamente e sementicamente corretto e quindi alla fine un file .class
è scritto, ma mi chiedevo cosa succede quando corri
java -cp '.' Foo
Presumo che Foo.class
debba essere letto - ma questo (il bytecode nel file .class
) ha una sua grammatica? o è l'AST che si forma quando il file .java
è stato compilato appena scritto sul disco in forma binaria, e poi è stato semplicemente gettato in memoria quando il programma java.exe
è in esecuzione
Stavo pensando che probabilmente ha un AST, poiché questo è probabilmente l'essenza di ciò che è realmente un compilatore JIT.