Gå til innhold

Hvordan man lager et programmeringsspråk..?


Anbefalte innlegg

Videoannonse
Annonse
Har du postet så mange meldinger, som er så rar som denne?

Jeg poster vanligvis mest off-topic == svada.

Jeg syns den var litt vell tørrvittig. Men nå er jeg trøtt som en strømpe, og derfor ler rått!

 

MVH Øyvind

Den er ikke lagd for å være vittig. Det er noe jeg faktisk lurer på.

Lenke til kommentar

min teori :D :

Sett sammen en syntax med masse ord som gjør hver sin ting.

med dette kan du sette sammen en hel haug med komandoer til bruk i språket.

Lag en kompilator som klarer og kompilere denne koden med den nye syntaxen til maskinkode (språk maskinen kan håndtere)

 

(bare en liten teori da) :)

Lenke til kommentar

Det er omtrent som nemnt over. Du bestemmer deg for syntax, og nyttar eit anna programmeringsspråk til å skrive ein kompilator. Så brukar du den nye kompilatoren din, til å lage ein ny versjon av den, i ditt nye språk. Då kan du kompilere språket ditt vha. seg sjølv, og språket er i realiteten skriven i seg sjølv. Relativt artig, ja? :)

 

Sjølvsagt er dette svært forenkla. Du må ha _gode_ kunnskapar om maskinkode og optimiseringar for å kunne skrive ein kompilator. Men hovudlinjene går nok slik...

Lenke til kommentar

kansje de kunne maskinkode på den tiden og bare skrev det i maskinkode og la det en plass :p

eller lagde en kompilator til sitt (allerede oppsatte men ikke fullførte) programmeringsspråk, slik at de kunne programmere og kompilere osv i det nye språket (enklere) etterpå :)

Lenke til kommentar

Hehe, en datamaskin forstår jo ikke dette. Det jeg har forstått at skjer (ekstremt enkelt) er at cpu får en instruks, f.eks. legg sammen, så legger den sammen ett tall den får inn sammen med instruksjonen og ett fra minnet.

 

Disse instrusksjonene kan være binære nummer. La oss si at instruksjonen 0 betyr "legg tallet i minnet" og en betyr legg sammen med tallet i minnet kan ett eksempel på ett program være:

0 10

1 10

Cpu'en vil da kanskje sette 20 ut i "den andre enden". 1 og 0 er elektriske "states" som settes på pinnene til cpu'en.

 

Bruker du en statisk minnebrikke, altså minne som ikke slettes når strømmen går, kan du legge inn 010 (putt 10 i minnet) på minne-adresse 0 og 110 (legg sammen med tallet i minnet) på adresse 1. Deretter lager du en programteller som teller fra 0 og oppover i minnet. Verdiene i minnet blir lest ut og satt på cpu'ens innganger og viola! Du har en cpu, en bios og ett program.

 

Vet ikke hvor god denne forklaringen ble. Det er ganske plundrete å forklare uten å kunne tegne litt og sånn... :roll:

Lenke til kommentar

For å vere ekstra vanskelig skal eg og spørre om korleis dei fikk ei datamaskin til å forstå at når du trykker A på tastaturet, så kommer A fram på skjermen? Åssn kunne ei datamaskin forstå det du gjorde? Tastaturet kan ikkje vert forhåndsprogramert, så..... !?

 

(spurte vel egentlig om det samme i forige innlegg, men... whatever :D)

Lenke til kommentar

faktisk, når du trykker en tast på tastaturet5 så sendes ikke den tasten. Det som sendes er en binærkode e.g. 1001101 som brukes av os til å tolke input. f.eks vil en helt annen kode sendes dersom du trykker shift/ctrl/alt og a enn hvis du bare trykker a. Dette tolker tastaturet, og sender kun en enkelt verdi til os

Tataturet inneholder altså en datamanipuleringsalgoritme (nyere multimediatastaturer er faktisk "fullverdige"datamaskiner!!, men på eldre tastaturer er det mulig at det ble gjort med kun hardware - flippflopper og logiske porter)

Lenke til kommentar

Jeg lagde et lite programmeringsspråk for en tid tilbake siden, og det var ikke så vanskelig. Men jeg lagde ikke en kompilator til det, da. En interpreter er godt nok for meg.

 

Fremgangsmåten jeg brukte var ganske enkel:

 

- tenkte meg om hva slags språk jeg ville lage

- lagde et utkast til syntax på papir

- skrev et par programmer på papir slik at jeg fikk sjekket at syntaxen var brukbar.

- endret syntaxen etter erfaringer fra programmene

- skrev en interpreter i Delphi (noe som gikk ganske raskt siden jeg bare modifiserte en brainfuck-interpreter jeg hadde lagd fra før).

Lenke til kommentar

Man skriver ett program (i binær) direkte i minnet som har kapasitet til å skrive andre ting til minnet, f.eks. cpu-instrukser. Er ikke så vanskelig å forstå hvis du kan bittelitt om elektronikk og innsiden på en datamaskin :wink:

Lenke til kommentar
korleis dei fikk ei datamaskin til å forstå at når du trykker A på tastaturet, så kommer A fram på skjermen?

 

se ASCII kode

f.eks er A = 65, B = 66, a = 97 osv osv. så er det bare å konvertere til binært...

 

Faktisk har ikke ASCII-koder så veldig mye med saken å gjøre. Alle tastene på tastaturet har en scancode og det er opp til os-et å tolke disse til hva de nå enn måtte ønske. ASCII-tabellen er et standard tegnsett men det finnes andre hvor a, b, og c har andre verdier.

 

Når det gjelder programmeringsspråk/kompilatorer er det veldig vanlig å bruke egne program til å generere parsere/kompilatere ut fra en beskrivelse av syntaks og semantikk.

 

Ta en titt her: http://www.delphi-gems.com/DCG.php

 

-Vegar

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...