| Hjem | Hardware | Netværk | Programmering | software | Fejlfinding | systemer | 
Programmering  
  • C /C + + Programming
  • Computer Programmeringssprog
  • Delphi programmering
  • Java programmering
  • JavaScript Programmering
  • PHP /MySQL programmering
  • Perl programmering
  • Python Programming
  • Ruby Programming
  • Visual Basics Programmering
  •  
    Computer Viden >> Programmering >> Computer Programmeringssprog >> Content
    Hvad er en kompilators rolle i computerprogrammering, og hvordan oversætter det sprog på højt niveau til maskinkode?

    en kompilators rolle i computerprogrammering

    En kompilator er et afgørende stykke software, der fungerer som en oversætter mellem menneskelig læsbar programmeringssprog på højt niveau (Ligesom Python, Java, C ++ osv.) Og den maskinudførbare lavt niveau maskinkode (binær kode), at en computers processor direkte kan forstå og udføre.

    I det væsentlige er kompilatorens rolle at:

    1. Oversæt kildekode på højt niveau til maskinkode: Dette er den primære funktion. Kompilatoren tager kildekoden skrevet af en programmør og konverterer den til en række instruktioner, som computerens CPU kan udføre.

    2. Udfør fejldetektion: Under kompilationsprocessen analyserer kompilatoren kildekoden for syntaksfejl, semantiske fejl og andre overtrædelser af programmeringssprogets regler. Det markerer disse fejl og giver informative meddelelser til programmereren, så de kan korrigere koden inden udførelsen.

    3. Optimer kode (valgfrit men almindelig): Mange compilere inkluderer optimeringsfunktioner for at forbedre effektiviteten af ​​den genererede maskinkode. Denne optimering kan involvere:

    * Reduktion af kodestørrelse: Gør den eksekverbare fil mindre.

    * Forbedring af eksekveringshastighed: At få programmet til at køre hurtigere ved at bruge mere effektive algoritmer eller instruktionssekvenser.

    * Optimering af hukommelsesforbrug: Reduktion af mængden af ​​hukommelse, som programmet har brug for.

    4. link eksterne biblioteker: Sprog på højt niveau er ofte afhængige af eksterne biblioteker (forudskrevne samlinger af funktioner) for at give funktionalitet. Kompilatoren fungerer typisk med en linker for at løse referencer til disse biblioteker og inkluderer den nødvendige kode i den endelige eksekverbare.

    Hvorfor er kompilatorer nødvendige?

    * maskinkode er ulæselig og vanskelig at skrive: At skrive direkte i maskinkode er ekstremt kompleks og kedelig. Sprog på højt niveau tilbyder abstraktion, hvilket giver programmerere mulighed for at udtrykke logik på en mere naturlig og forståelig måde.

    * Portabilitet: Sprog på højt niveau er ofte designet til at være relativt platformuafhængige. Kompilatorer tillader, at den samme kildekode samles til forskellige operativsystemer (Windows, MacOS, Linux) og CPU -arkitekturer (x86, ARM), selvom der stadig er påkrævet ændringer.

    Hvordan en kompilator oversætter sprog på højt niveau til maskinkode

    Samlingsprocessen er typisk opdelt i flere forskellige faser, der hver udfører en bestemt opgave:

    1. leksikal analyse (scanning):

    - Kildekoden læses karakter efter karakter.

    - Koden er opdelt i en strøm af tokens , som er grundlæggende byggesten som nøgleord, identifikatorer (variable navne), operatører og konstanter.

    - Whitespace og kommentarer fjernes ofte.

    Eksempel (Python):

    `` `Python

    x =5 + y

    `` `

    tokens genereret:

    * `Identifier` (x)

    * `Tildeling_operator` (=)

    * `Integer_literal` (5)

    * `Plus_operator` (+)

    * `Identifikator '(y)

    2. Syntaksanalyse (parsing):

    - Tokens er organiseret i en hierarkisk struktur kaldet A parse -træ (eller abstrakt syntakstræ, AST) baseret på grammatikken på programmeringssproget.

    - Parse -træet repræsenterer programmets syntaktiske struktur.

    - Kontrollerer, om tokens er arrangeret i henhold til sprogets grammatikregler. Syntaksfejl påvises her (f.eks. Manglende semikoloner i C ++).

    eksempel (parse træ): Parse-træet for `x =5 + y` ville repræsentere, at tildelingen er den øverste operation, med variablen` x` til venstre og udtrykket `5 + y` til højre.

    3. semantisk analyse:

    - Kompilatoren analyserer betydningen (semantik) af koden.

    - Typekontrol udføres for at sikre, at operationer udføres på kompatible datatyper (f.eks. Tilføjelse af en streng til et heltal ville være en semantisk fejl).

    - Variable erklæringer kontrolleres for at sikre, at variabler defineres korrekt, før de bruges.

    - Scoping -regler håndhæves for at bestemme synligheden og levetiden for variabler.

    - Semantiske fejl påvises (f.eks. Brug af en ikke -erklæret variabel).

    4. Mellemkodegenerering (valgfrit):

    - Kompilatoren kan generere en mellempræsentation (IR) af koden.

    - IR er en sproguafhængig repræsentation, der forenkler de efterfølgende optimerings- og kodegenereringsfaser.

    - Almindelige IRS inkluderer formularen med tre-adress-kode og statisk enkeltopgave (SSA).

    Eksempel (tre-adresse-kode):

    `` `

    T1 =5 + y

    X =T1

    `` `

    5. Kodeoptimering:

    - Kompilatoren forsøger at forbedre mellemkoden (eller det indledende parse -træ) for at producere mere effektiv maskinkode.

    - Optimeringsteknikker inkluderer:

    * Konstant foldning: Evaluering af konstante udtryk på kompileringstidspunktet.

    * dødskode eliminering: Fjernelse af kode, der ikke har nogen indflydelse på programmets output.

    * loop rulling: Udvidelse af løkker for at reducere sløjfe overhead.

    * Registrer tildeling: Tildeling af variabler til CPU -registre for at forbedre adgangshastigheden.

    6. Kodegenerering:

    - Kompilatoren oversætter den optimerede mellemkode (eller parse træ) til maskinkode, der er specifik for målarkitekturen.

    - Dette involverer at vælge passende CPU -instruktioner til at udføre de operationer, der er repræsenteret i IR.

    - Hukommelsesadresser tildeles variabler.

    - Den genererede maskinkode er normalt i form af samlingssprog, som derefter konverteres til binær kode af en samler.

    7. linking (linker):

    - Linkeren kombinerer den genererede maskinkode med alle nødvendige biblioteker (forudkompilerede funktioner og data) for at oprette den endelige eksekverbare fil.

    - Løser referencer mellem forskellige objektfiler (kompilerede kildekodefiler).

    forenklet eksempel (C ++ til samling):

    Lad os sige, at du har følgende C ++ -kode:

    `` C ++

    int main () {

    int x =5;

    int y =10;

    int z =x + y;

    return 0;

    }

    `` `

    En forenklet kompilationsproces genererer muligvis følgende (meget basale) samlingskode (til x86 -arkitektur):

    `` `forsamling

    sektion .data

    ; Ingen datasektion i dette eksempel

    Sektion .Text

    Global _start

    _starte:

    ; x =5

    Mov Eax, 5; Flyt værdien 5 ind i EAX -registeret (brugt til x)

    ; y =10

    Mov EBX, 10; Flyt værdien 10 ind i EBX -registeret (brugt til Y)

    ; z =x + y

    Tilføj EAX, EBX; Tilføj værdien i EBX til EAX (EAX indeholder nu x + y)

    ; retur 0

    Mov Eax, 0; Indstil returværdien til 0

    Mov EBX, 0; Afslut statuskode

    Mov ECX, EAX; Sæt EAX i ECX

    MOV EDX, EBX; Sæt EBX i EDX

    Mov Esi, ECX; Sæt ECX i ESI

    Mov EDI, EDX; Sæt EDX i EDI

    Mov ESP, ESI; Sæt ESI i ESP

    MOV EBP, EDI; Sæt EDI i EBP

    Mov Al, 60

    Syscall

    `` `

    Nøgle takeaways:

    * Kompilatorer er vigtige for at bygge bro mellem mennesket-venlige programmeringssprog og den lave maskinkode, som computere forstår.

    * Samlingsprocessen involverer flere faser, der hver er ansvarlig for en specifik opgave:leksikalsk analyse, syntaksanalyse, semantisk analyse, mellemliggende kodegenerering (valgfrit), kodeoptimering, kodegenerering og sammenkobling.

    * Ved at bruge kompilatorer kan programmerere skrive kode på en mere produktiv og vedligeholdelig måde, mens de stadig opnår effektiv udførelse på en række hardwareplatforme.

    Forrige :

    næste :
      Relaterede artikler
    ·MS Access 97 Tutorials 
    ·Hvordan man skriver & Convert Pounds Into Ounces i Comp…
    ·Hvordan kan man øge den " Udfør for at Parse ' procen…
    ·Begrænsninger af Fuzzy Logic 
    ·Sådan Initialiser Indgangsparametre i procedurerne 
    ·Sådan bruges Oracle SQL Loader til Parse XML 
    ·Sådan får Populære Emner at vise på dit websted 
    ·Qt Designer Tutorials 
    ·Sådan Design en CSS Sprite Navigation Bar 
    ·Sådan krypteres E-mail i ColdFusion 
      Anbefalede Artikler
    ·Hvordan kan man kontrollere, hvilken version af Java er…
    ·Android UI Development 
    ·Hvad er en syntaksfejl i Java 
    ·Hvordan man laver en Gentagelse Programmet på en TI 84…
    ·Hvordan at slette en række i MySQL Brug af PHP på kli…
    ·Tegnsæt ved starten af ​​en streng i PHP 
    ·Sådan Manuelt installere en Ruby perle 
    ·Hvad er forskellene mellem computerprogramsprog og menn…
    ·Sådan tilføjes en bruger til en Wheel Group 
    ·String til Double Conversion i Java 
    Copyright © Computer Viden https://www.computerdk.com