Programozási nyelvet hogy csinálnak?
Programozási nyelvet úgy terveznek, hogy először is, szükségét látják egy olyannak, ami még nincs. Ezért nekiállnak egy új nyelv alapkoncepcióját kidolgozni, a nyelv kontúrjait megfogalmazni.
Ez azt foglalja magában, hogy eldönti a konstruktőr, hogy interpríteres vagy kompájleres nyelv lesz, hogy általános célú nyelv születik, vagy speciális.
Ha ez is megvan, akkor már csak a nyelv által használt adattípusokat és a nyelv szintaxisát kell kimunkálni. Az, amit kérdezel, semmit nem jelent. Hogy most azt gépeli valaki, hogy "while" vagy "amíg" vagy "kraksz", esetleg "blut", az nem oszt és nem szoroz.
A nyelv szintaxisának pontos leírására meg ott van az EBNF. Erre rákereshetsz, ha akarsz.
Lehet Kérdező a fordítós nyelvekre gondolt és hogy miképpen társítanak szavakhoz utasításokat.
Minden utasításnak rögzítve van az adott platformon a gépi kódú megfelelője.
"Minden utasításnak rögzítve van az adott platformon a gépi kódú megfelelője."
Ez azért nem teljesen igaz. Ha így volna, akkor nem lenne különbség a fordítók között, pedig van.
Egy utasítás lehet egyszerűbb és összetettebb. Ha összetett, akkor adott nyelv interpreterének, compilerének írójától függ, hogy miképpen implementálja azt az utasítást, de még az egyszerűbb utasítások zöme is egynél több gépi kódú utasításból áll össze. Egy növekményes (for) ciklus is több gépi kódú utasítást foglal magába, hiszen nyilván kell tartani a ciklusváltozót, inkrementálni/dekrementálni kell, van feltételvizsgálat, ahol is komparálni kell a felső- vagy alsóértékkel, és ez még a legegyszerűbb eset.
De ez már nem a programozási nyelv megalkotásához, hanem csak egy adott nyelv compilerének implementálásához tartozó feladat.
Egy programnyelv magából a nyelv szintaxisából és néhány belső szabályból áll.
Nekünk az egyetemen volt olyan tárgy, ahol fordítóprogramot fejlesztettünk egy egyedi nyelvhez. 4 fő lépése volt ennek.
Tokenizálás
Ebben a részben felsoroltuk a tokeneket, hogy mik szerepelhetnek a kódban, és ebbe skatulyáztuk be az a karaktersorozatot, amit te kódnak hívsz. Tehát pl int x = 10; -ből az lett, hogy <TÍPUS><VALTOZONEV><E.OPERATOR><SZAMLITERAL><PONTOSVESSZO>
Szintaktikai elemzés
Ebben vizsgáltuk meg, hogy megfelel-e a kód a szintaktikai szabályoknak. Tehát pl hogy <E.OPERATOR> bal oldalán nem állhat <SZAMLITERAL>, vagy hogy <FOR> után csak <ZAROJELNYIT> állhat stb.
Szemantikai elemzés
Azt már tudjuk, hogy a nyelv szabályai szerint íródott a kód, de itt vizsgáljuk, hogy van-e értelme. Pl, hogy nem-e használsz egy változónevet, mielőtt definiálnád. Vagy használod-e a for ciklusváltozóját két sorral lentebb, miközben nem tettél kapcsos zárójelet. Vagy hogy az if-be írt kifejezés boolean típusú-e, stb.
Ha mindennel megvagyunk, és a kód olyan, ahogy azt a szabályaink megkövetelik, és értelme is van, akkor jöhet a következő lépés.
Kódgenerálás
Itt kaptunk egy cheatsheet-et (amit persze tudni kellett), hogy assembly-ben hogy néz ki két szám összeadása, hogy néz ki egy forciklus, mit csinálsz a regiszterekkel, stb. És akkor szépen leprogramozod, hogy hogy lesz a for-ból assembly kód, meg minden egyébből. Miután előállt az assembly, után annak fordítójával elkészül a gépi kód az adott platformra.
Ha a 4 lépés megvan, akkor megalkottál egy új nyelvet. Ezt még ki lehet egészíteni egyebekkel, mondjuk kódoptimalizálással.
Ennek, amit leírsz, semmi köze a programnyelvek fejlesztéséhez.
Te csak egy valamilyen - már kész, kifejlesztett - programnyelv fordítójának az elkészítését ismerteted.
A 4. lépés megtétele után neked nem programnyelved lesz, hanem egy, már meglévő nyelvhez való fordítód.
Igen, ez így van. Írtam is, hogy fordítóprogramot fejlesztettünk, a kérdező kiírásából az jött le nekem, hogy erre gondolt valójában.
A nyelv szabályrendszerének megalkotása egy nagy elméleti feladat, ami megelőzi a fordítóprogramot.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!