I file java. class hanno un lexer / parser?

4

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.

    
posta phatmanace 06.06.2015 - 14:33
fonte

1 risposta

6

Tecnicamente parlando, c'è un parser, ma in pratica il parser è così banale che di solito non lo si chiama "parser". Dopotutto, il formato bytecode JVM è specificamente progettato per essere veloce e facile da leggere da una macchina e per nulla leggibile dagli esseri umani.

Sono fondamentalmente alcuni campi a dimensione fissa di tipi fissi e alcuni array a lunghezza variabile di tipi fissi la cui lunghezza è fornita in un campo a dimensione fissa di un tipo fisso in una posizione fissa.

    
risposta data 06.06.2015 - 15:19
fonte

Leggi altre domande sui tag