<åt sidan class = "s-notice s-notice__info js-post-notice mb16" role = "status">

Kommentarer

  • För bred, åtminstone " Hur fungerar det " del. Det finns hela böcker skrivna om det ämnet.
  • sv.wikipedia.org/wiki/Compiler skulle vara Wikipedia-länken som är trivial för hitta, vad undrar du specifikt? Frågan är tillräckligt bred för att jag ' skulle bli frestad att ge det smarta alec-svaret på " Kompilatorer översätter kod från ett språk till ett annat , " eftersom det är den allmänna idén som har många nyanser inom det när man börjar titta på vad det egentligen innebär.
  • Ja och jag tror det har besvarats ganska bra.
  • Varje förklaring till hur en kompilator fungerar kommer att vara för bred eller för komplicerad. Det ' är ett komplicerat ämne, och kompilatorklasserna var de svåraste datorrelaterade kurserna jag någonsin gått.
  • @David Naturligtvis är kompilatorer komplicerade, och du kan inte förklara alla detaljer om hur de fungerar här. Jag är dock säker på att du hade en grundläggande förståelse på hög nivå av vad en kompilator är eller hur den fungerar innan du tog din kompilatorkurs.

Svar

En kompilator är ett program som översätter källkoden för ett annat program från ett programmeringsspråk till körbar kod.

Källkoden finns vanligtvis på ett programmeringsspråk på hög nivå (t.ex. Pascal, C, C ++, Java, Perl, C #, etc.). Den körbara koden kan vara en sekvens av maskininstruktioner som kan köras av CPU direkt, eller det kan vara en mellanrepresentation som tolkas av en virtuell maskin (t.ex. Java-byte-kod).

Kort sagt, en kompilator omvandlar ett program från ett läsbart format till ett maskinläsbart format.

Hur en kompilator fungerar, det är verkligen komplicerat. Det finns böcker och universitetskurser om ämnet. Jag kommer att försöka kort beskriva de viktigaste stegen i processen, men detta kommer att vara en mycket kortfattad översikt.

  1. Lexing – dela upp programmets text i ”tokens”. Token är ”orden” i programmeringsspråket, såsom identifierare (nyckelord, variabelnamn, funktionsnamn, etc.) eller operatorer (=, *, &, etc.) .
  2. Parsing – konvertera tokensekvensen till ett parse-träd, vilket är en datastruktur som representerar olika språkkonstruktioner: typdeklarationer, variabeldeklarationer, funktionsdefinitioner, loopar, villkor, uttryck, etc.
  3. Optimering – utvärdera konstanta uttryck, optimera bort oanvända variabler eller oåtkomlig kod, rulla slingor om möjligt, etc.
  4. Översätt analysträdet till maskininstruktioner (eller JVM-byte-kod).

Återigen betonar jag att detta är en mycket kort beskrivning. Moderna kompilatorer är väldigt smarta och följaktligen mycket komplicerade.

Kommentarer

  • Det förvandlar faktiskt ett språk till ett annat. Tidig C ++ kompilator kompilerade till C. Detsamma gäller Vala kompilator. Java-kompilator kompilerar till bytkod som inte är ' t körbar utan JVM ' s JIT-kompilator.
  • @deadalnix IMHO , poängen är att du går från icke-körbar kod till körbar kod. Jag skulle hävda att C-fronten inte var en kompilator utan en front-end till C-kompilatorn. Eller ett steg i sammanställningsprocessen, om du vill. Virtuella maskiner suddar ut gränsen mellan " körbar " och " icke-körbar ", förstås. Här skulle jag helt enkelt anse att körbar kod är vad som helst som går in i den virtuella maskinen, som byte-koden, och tar bort allt som händer inom den virtuella datorn, som JIT.
  • @Dima, det gör det inte ' t måste vara från icke-körbar kod till körbar kod. Du kan till exempel inte köra JVM-byte-kod direkt på Windows-datorer.
  • @Thorbj ø rn Ravn Andersen: men byte-koden kan köras av JVM. Är inte ' t hela punkten i en " virtuell maskin " för att se ut som en riktig maskin till programmeraren?
  • Jag skulle hävda att en kompilator traditionellt konverterade ett program från ett läsbart format till ett maskinläsbart format, precis som Dima sa. Variationer som Cfront konverterar C ++ till C eller javac konverterar Java till bytecode är mer avancerade ämnen som antagligen bör lämnas tills efter att ha förklarat det grundläggande, traditionella konceptet till någon som inte känner till det. h2> Svar

    En kompilator är ett datorprogram (eller uppsättning instruktioner) som omvandlar källkod skriven på ett programmeringsspråk (källspråket) till ett annat datorspråk ( målspråk, ofta med en binär form som kallas objektkod). Den vanligaste orsaken till att man vill omvandla källkoden är att skapa ett körbart program.

    Kompilatorer överbryggar källprogram på högnivåspråk med den underliggande hårdvaran. En kompilator kräver:

    1. Bestämning av programmets syntax
    2. Skapa korrekt och effektiv objektkod
    3. Körtidsorganisation
    4. Formatera utdata enligt samlar- och / eller länkarkonventioner.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *