Veel mensen hebben moeilijkheden of frustraties met de programmeertalen die ze dagelijks gebruiken. Sommigen willen dat dingen abstracter worden behandeld, terwijl anderen een hekel hebben aan het implementeren van functies die zij 'standaard' wensen. Of u nu een IT-professional bent of gewoon een hobbyist, vaak zult u merken dat u een nieuwe programmeertaal wilt maken.

Stappen

  1. 1 Raak bekend met technologie. U kunt geen programmeertaal maken als u niet weet hoe u een computer moet gebruiken.
  2. 2 Maak kennis met terminologie. Compiler-schrijvers gebruiken vaak onbekende terminologie. Lees de compilers voordat u verder gaat. Zorg dat je alles weet wat je moet weten.
  3. 3 Bepaal welk probleem uw taal oplost. Is het een domeinspecifiek probleem of is het een taal voor algemeen gebruik?
  4. 4 Denk na over de semantiek van uw taal en de concepten ervan.
    • Gaat u directe toegang tot de aanwijzer toestaan ​​of niet?
    • Wat zijn de gegevenstypen van uw taal?
    • Is het een statische of dynamische taal?
    • Wat is je geheugenmodel? Gaat u een garbage collector of handmatig geheugenbeheer gebruiken? (Als u een garbagecollector gebruikt, bereidt u voor om er een te schrijven of past u een bestaande aan in uw taal.)
    • Hoe gaan concurrency om? Gaat u een eenvoudig threading / locking-model gebruiken of iets complexers zoals Linda of het acteursmodel? (Sindsdien hebben computers meerdere kernen.)
    • Zijn er primitieve functies ingebed in de taal of komt alles uit een bibliotheek?
    • Wat is het paradigma of de paradigma's van jouw taal? Functionele? Object-georiënteerd? Prototype (zoals JavaScript)? Op aspecten georiënteerd? Sjabloon gericht? Of iets geheel nieuws?
    • Hoe gaat uw taal communiceren met bestaande bibliotheken en talen (voornamelijk C)? Dit punt is belangrijk als u een domeinspecifieke taal aan het bouwen bent.
    • Ten slotte zullen enkele van de antwoorden op deze vragen worden beantwoord door de tweede stap en zullen ze u helpen de volgende stap te beantwoorden.
  5. 5 Denk aan een aantal specifieke taken die iemand zou willen kunnen uitvoeren met uw taal. Bijvoorbeeld, 'ze willen misschien een robot regisseren om een ​​regel te volgen' of 'ze willen er relatief draagbare desktopprogramma's in maken' of 'ze willen er misschien webtoepassingen mee maken'.
  6. 6 Experimenteer met syntaxisideeën (de tekst van de taal) voor de bovenstaande voorbeelden.
    • Zorg ervoor dat uw taal in de contextvrije taalcategorie of iets daarbinnen blijft. Uw parser-generator en u zult het later waarderen.
  7. 7Schrijf een formele grammatica voor de syntaxis.
  8. 8 Bepaal of de taal zal worden geïnterpreteerd of samengesteld. Dit betekent dat in de geïnterpreteerde wereld uw gebruiker uw programma gewoonlijk in een editor zal bewerken en rechtstreeks op de interpreter zal uitvoeren; in de compileerwereld zal je gebruiker je programma aanpassen, compileren, het resulterende uitvoerbare bestand ergens opslaan en het uitvoeren.
  9. 9 Schrijf de front-end scanner en parser of zoek een hulpmiddel dat u hierbij helpt.
    • Denk er ook over na hoe uw compiler / interpreter uw gebruiker waarschuwt voor foutieve programma's en syntaxisfouten.
  10. 10 Gebruik de parserinformatie om de objectcode of een tussenrepresentatie te schrijven. Laat de parser een AST maken en maak vervolgens uw objectcode van de AST met behulp van de drie-adrescode of de Big Brother SSA, en maak vervolgens een symbooltabel om uw functies, globale variabelen, enz. Te definiëren.
    • Afhankelijk van uw taal wilt u mogelijk ook virtuele aanwijzertafels of informatietabellen voor uw klassen maken (ter ondersteuning van reflectie of RTTI).
  11. 11Schrijf de uitvoerder of codegenerator die alles samen zal binden.
  12. 12 Schrijf veel testprogramma's om de taal te testen.
    • U wilt programma's maken die de nadruk leggen op de last van uw formele grammatica om te zien dat uw compiler alles accepteert wat binnen uw definitie valt en alles verwerpt dat erbuiten ligt.
  13. 13Overweeg hoe de gebruiker zijn eigen programma's zal debuggen.
  14. 14 Als uw taal een standaardbibliotheek gebruikt, moet u deze schrijven. Samen met een garbage collector of andere runtime-functies als je het nodig hebt.
    • In het bijzonder, als u een compiler schrijft, hebt u de code nodig die het besturingssysteem zal uitvoeren om de gebruikerscode te kunnen uitvoeren (bijvoorbeeld door alle globale variabelen toe te wijzen).
  15. 15 Publiceer uw taal, samen met de specificatie ervoor en enkele voorbeelden van wat u er in kunt doen.
    • Vergeet niet te documenteren hoe u kunt integreren met bestaande bibliotheken, talen en hoe u de runtime-functies en / of standaardbibliotheek gebruikt.