Många människor har svårigheter eller frustrationer med de programmeringsspråk de använder varje dag. Vissa vill att saker ska hanteras mer abstrakt, medan andra ogillar att implementera funktioner som de önskar var "standard". Oavsett om du är en IT -proffs eller bara en amatör, kan du ofta tycka att du vill skapa ett nytt programmeringsspråk.
Steg
Steg 1. Bekanta dig med tekniken
Du kan inte skapa ett programmeringsspråk om du inte vet hur du använder en dator.
Steg 2. Bekanta dig med terminologin
Kompilatorförfattare använder ofta okänd terminologi. Läs om kompilatorer innan du fortsätter. Var noga med att veta allt du behöver veta.
Steg 3. Bestäm vilket problem ditt språk löser
Tar det upp ett domenspecifikt problem, eller är det ett allmänt språk?
Steg 4. Tänk på semantiken i ditt språk och begreppen för det
- Kommer du att tillåta direkt pekaråtkomst eller inte?
- Vilka datatyper är det för ditt språk?
- Är det ett statiskt eller dynamiskt språk?
- Vad är din minnesmodell? Kommer du att använda en sophämtare eller manuell minneshantering? (Om du använder en sophämtare, förbered dig på att skriva en eller anpassa en befintlig till ditt språk.)
- Hur ska hantera samtidighet? Kommer du att använda en enkel tråd-/låsmodell eller något mer komplext som Linda eller skådespelarmodellen? (Eftersom datorer idag har flera kärnor.)
- Finns det primitiva funktioner inbäddade i språket eller kommer allt från ett bibliotek?
- Vad är paradigmet eller paradigmen för ditt språk? Funktionell? Objektorienterad? Prototyp (som JavaScript)? Aspektorienterad? Mallorienterad? Eller något helt nytt?
- Hur kommer ditt språk att interagera med befintliga bibliotek och språk (främst C)? Denna punkt är viktig om du bygger ett domänspecifikt språk.
- Slutligen kommer några av svaren på dessa frågor att besvaras av det andra steget och hjälper dig att svara på nästa steg.
Steg 5. Tänk på några specifika uppgifter som någon skulle vilja kunna utföra med ditt språk
Till exempel "de kanske vill rikta en robot att följa en linje" eller "de kanske vill skapa relativt bärbara skrivbordsprogram i den" eller "de kanske vill skapa webbapplikationer med den".
Steg 6. Experimentera med syntaxidéer (språkets text) för exemplen ovan
Var noga med att behålla ditt språk i den kontextfria språkkategorin eller något inuti det. Din parsergenerator och du kommer att uppskatta det senare
Steg 7. Skriv ut en formell grammatik för syntaxen
Steg 8. Bestäm om språket ska tolkas eller sammanställas
Vilket betyder att i den tolkade världen kommer din användare vanligtvis att redigera ditt program i en redigerare och köra det direkt på tolken; medan i den sammanställda världen kommer din användare att redigera ditt program, kompilera det, spara den resulterande körbara någonstans och köra det.
Steg 9. Skriv front -end -skannern och parsern eller hitta ett verktyg som hjälper dig med detta
Tänk också på hur din kompilator/tolk varnar din användare om felaktiga program och syntaxfel
Steg 10. Använd parserinformationen för att skriva objektkoden eller en mellanliggande representation
Låt parsern skapa en AST, skapa sedan din objektkod från AST med hjälp av tre adresskoder eller storebror SSA, skapa sedan en symboltabell för att definiera dina funktioner, globala variabler etc.
Beroende på ditt språk kanske du också vill skapa virtuella pekartabeller eller informationstabeller för dina klasser (för att stödja reflektion eller RTTI)
Steg 11. Skriv köraren eller kodgeneratorn som kommer att binda ihop allt
Steg 12. Skriv många testprogram för att testa språket
Du vill skapa program som betonar bördorna i din formella grammatik för att se att din kompilator accepterar allt som finns i din definition och avvisar allt som ligger utanför den
Steg 13. Fundera över hur användaren kommer att felsöka sina egna program
Steg 14. Om ditt språk använder ett standardbibliotek vill du skriva det
Tillsammans med en skräpsamlare eller andra körtidsfunktioner om du behöver det.
Närmare bestämt, om du skriver en kompilator behöver du koden som operativsystemet kommer att köra för att börja köra användarkoden (till exempel allokera alla globala variabler)
Steg 15. Publicera ditt språk, tillsammans med specifikationen för det och några exempel på vad du kan göra i det
Glöm inte att dokumentera hur du kan integrera med befintliga bibliotek, språk och hur du använder körtidsfunktioner och/eller standardbibliotek
Video - Genom att använda denna tjänst kan viss information delas med YouTube
Tips
- Börja med att designa ditt språk och skriv inte någon kod förrän du är nöjd och har svarat på alla (eller de flesta) frågor eller problem relaterade till din design eftersom det är lättare att ändra designen tidigare än senare.
- Känn din målplattform (operativsystem och bibliotek) för din kompilator/tolk, trots allt kommer du att använda den och manipulera den.
Varningar
- Tänk om du verkligen behöver ett nytt språk och vad ditt språk har av nytt som andra språk inte har (Det kan vara en kombination av funktioner eller en enda funktion).
- Att skriva språk är svårt om du inte vet vad du gör. Det krävs mycket övning också.
- Förbered dig på att lägga lite tid på språkdesign, eftersom du inte kommer att ha möjlighet att ändra språk när du har skrivit kompilatorn och förbi designpunkten.
- Försök inte att basera dina funktioner i en förening av flera språk, som att säga att ditt språk kommer att vara en förening av språk X, språk Y och språk Z. Historien har visat oss att språk som skapats på ett sådant sätt aldrig kommer att lyckas, eller så skulle alla programmera PL/1 istället för något baserat på C.