Daugelis žmonių susiduria su sunkumais ar nusivylimais kasdien naudojamomis programavimo kalbomis. Vieni nori, kad dalykai būtų sprendžiami abstrakčiau, o kiti nemėgsta įgyvendinti funkcijų, kurių jie norėtų būti „standartiniai“. Nesvarbu, ar esate IT specialistas, ar tiesiog mėgėjas, daug kartų galite pajusti norą sukurti naują programavimo kalbą.
Žingsniai
Žingsnis 1. Susipažinkite su technologija
Negalite sukurti programavimo kalbos, jei nemokate naudotis kompiuteriu.
Žingsnis 2. Susipažinkite su terminologija
Kompiliatoriai dažnai naudoja nepažįstamą terminiją. Prieš tęsdami, perskaitykite kompiliatorius. Būtinai žinokite viską, ką reikia žinoti.
3 žingsnis. Nuspręskite, kokią problemą sprendžia jūsų kalba
Ar tai skirta konkrečiai sričiai būdingai problemai spręsti, ar tai bendros paskirties kalba?
4 žingsnis. Pagalvokite apie savo kalbos semantiką ir jos sąvokas
- Ar leisite tiesioginę prieigą prie rodyklės, ar ne?
- Kokie yra jūsų kalbos duomenų tipai?
- Ar tai statiška, ar dinamiška kalba?
- Koks jūsų atminties modelis? Ar ketinate naudoti šiukšlių surinkėją ar rankinį atminties valdymą? (Jei naudojate šiukšlių surinkėją, pasiruoškite jį parašyti arba pritaikykite esamą savo kalbai.)
- Kaip ketinate elgtis lygiagrečiai? Ar ketinate naudoti paprastą sriegimo/užrakinimo modelį ar kažką sudėtingesnio, pavyzdžiui, Linda ar aktoriaus modelį? (Kadangi šiais laikais kompiuteriai turi kelis branduolius.)
- Ar yra primityvių funkcijų, įterptų į kalbą, ar viskas ateis iš bibliotekos?
- Kokia jūsų kalbos paradigma ar paradigmos? Funkcionalus? Orientuotas į objektą? Prototipas (kaip „JavaScript“)? Į aspektus orientuotas? Į šabloną orientuota? Arba kažkas visiškai naujo?
- Kaip jūsų kalba siejasi su esamomis bibliotekomis ir kalbomis (daugiausia C)? Šis punktas yra svarbus, jei kuriate konkrečiai sričiai skirtą kalbą.
- Galiausiai į kai kuriuos atsakymus į šiuos klausimus bus atsakyta per antrąjį žingsnį ir jie padės atsakyti į kitą žingsnį.
5 žingsnis. Pagalvokite apie konkrečias užduotis, kurias kažkas norėtų atlikti jūsų kalba
Pvz., „Jie gali norėti nukreipti robotą sekti liniją“arba „jie gali norėti sukurti gana nešiojamas darbalaukio programas“arba „jie gali norėti kurti žiniatinklio programas“.
Žingsnis 6. Eksperimentuokite su minėtų pavyzdžių sintaksės idėjomis (kalbos tekstu)
Būkite atsargūs ir laikykite savo kalbą be konteksto kalbos kategorijoje ar kitoje jos vietoje. Jūsų analizatorius ir vėliau tai įvertinsite
Žingsnis 7. Parašykite oficialią sintaksės gramatiką
Žingsnis 8. Nuspręskite, ar kalba bus interpretuojama, ar sudaroma
Tai reiškia, kad interpretuojamame pasaulyje jūsų vartotojas paprastai redaguoja jūsų programą redaktoriuje ir paleidžia ją tiesiogiai vertėjo žodžiu; būdamas sudarytame pasaulyje, jūsų vartotojas redaguos jūsų programą, ją sukompiliuos, išsaugos gautą vykdomąjį failą kažkur ir paleis.
Žingsnis 9. Parašykite priekinį skaitytuvą ir analizatorių arba raskite įrankį, kuris jums tai padėtų
Taip pat pagalvokite, kaip jūsų kompiliatorius/vertėjas įspės jūsų vartotoją apie klaidingas programas ir sintaksės klaidas
Žingsnis 10. Naudokite analizatoriaus informaciją, kad parašytumėte objekto kodą arba tarpinį vaizdą
Paprašykite analizatoriaus sukurti AST, tada sukurkite savo objekto kodą iš AST naudodami tris adreso kodus arba jo didįjį brolį SSA, tada sukurkite simbolių lentelę, kad apibrėžtumėte savo funkcijas, visuotinius kintamuosius ir kt.
Be to, priklausomai nuo jūsų kalbos, galbūt norėsite sukurti virtualias rodyklių lenteles arba informacines lenteles savo klasėms (kad būtų lengviau atspindėti ar RTTI)
Žingsnis 11. Parašykite vykdytoją arba kodų generatorių, kuris suriš viską
Žingsnis 12. Parašykite daug testų programų, kad patikrintumėte kalbą
Norite sukurti programas, pabrėžiančias jūsų formalios gramatikos naštą, kad pamatytumėte, jog kompiliatorius priima viską, kas yra jūsų apibrėžime, ir atmeta viską, kas yra už jos ribų
Žingsnis 13. Apsvarstykite, kaip vartotojas derins savo programas
Žingsnis 14. Jei jūsų kalba naudoja standartinę biblioteką, norėsite ją parašyti
Kartu su šiukšlių surinkėju ar kitomis veikimo laiko funkcijomis, jei to reikia.
Tiksliau, jei rašote kompiliatorių, jums reikės kodo, kurį vykdys operacinė sistema, kad pradėtumėte vykdyti vartotojo kodą (pavyzdžiui, paskirstyti visus pasaulinius kintamuosius)
Žingsnis 15. Paskelbkite savo kalbą kartu su jos specifikacija ir keliais pavyzdžiais, ką galite nuveikti
Nepamirškite dokumentuoti, kaip galite integruotis su esamomis bibliotekomis, kalbomis ir kaip naudotis vykdymo laiko funkcijomis ir (arba) standartine biblioteka
Vaizdo įrašas - naudojant šią paslaugą kai kuri informacija gali būti bendrinama su „YouTube“
Patarimai
- Pradėkite kurdami savo kalbą ir nerašykite jokio kodo, kol nebūsite patenkinti ir neatsakysite į visus (ar daugumą) klausimų ar problemų, susijusių su jūsų dizainu, nes lengviau pakeisti dizainą anksčiau nei vėliau.
- Žinokite savo kompiliatoriaus/vertėjo tikslinę platformą (operacinę sistemą ir bibliotekas), juk ketinate ja naudotis ir ja manipuliuoti.
Įspėjimai
- Pagalvokite, ar jums tikrai reikia naujos kalbos ir ką naujo jūsų kalba turi, ko neturi kitos kalbos (tai gali būti funkcijų derinys arba viena ypatybė).
- Rašyti kalbas yra sunku, jei nežinai, ką darai. Tai taip pat reikalauja daug praktikos.
- Pasiruoškite praleisti šiek tiek laiko kurdami kalbas, nes parašę kompiliatorių ir perėję projektavimo tašką, neturėsite galimybės pakeisti savo kalbos.
- Nebandykite savo bruožų pagrįsti kelių kalbų sąjunga, pvz., Sakyti, kad jūsų kalba bus X, Y ir Z kalbų sąjunga. Istorija parodė, kad taip sukurtos kalbos niekada nebus sėkmingos, arba visi programuotų PL/1, o ne kažką pagal C.