A programozási nyelv specifikációja (szabványa, definíciója) egy olyan dokumentáció tárgya, amely úgy határoz meg egy programozási nyelvet , hogy egy nyelv használói és fejlesztői megegyezzenek abban, hogy mit jelentenek egy adott nyelven a programok. A specifikációk általában bőbeszédűek és formálisak, és többnyire nyelvi tervezők használják őket, míg a felhasználók félreérthetőség esetén hivatkoznak rájuk: például a C++ nyelvi specifikációt a felhasználók gyakran idézik bonyolultsága miatt. A kapcsolódó dokumentáció tartalmaz egy programnyelvi hivatkozást , amely kifejezetten a felhasználók számára készült, és egy programnyelvi indoklást, amely elmagyarázza, hogy a specifikáció miért van megírva úgy, ahogy van; az utóbbiak általában informálisabbak, mint a specifikációk.
Nem minden fő programozási nyelv rendelkezik specifikációkkal; A nyelvek évtizedekig létezhetnek és népszerűek specifikáció nélkül. Egy nyelvnek lehet egy vagy több olyan implementációja, amelyek viselkedése a de facto szabvány, de viselkedése nincs dokumentálva a specifikációban. A Perl (Perl 5) a specifikáció nélküli nyelv jól ismert példája, míg a PHP csak 2014-ben kapott specifikációt, 20 éves használat után [1] .
A nyelv implementálható, majd szabványosítható, vagy szabványosítható, majd implementálható, vagy a kettő együtt fejlődhet, ahogy az ma már általános gyakorlat. Ennek az az oka, hogy az implementáció és a specifikáció ellenőrzéseket biztosít egymásnak: a specifikáció megírásához meg kell határozni az implementáció viselkedését, az implementáció pedig azt ellenőrzi, hogy a specifikáció megvalósítható, ésszerű és konzisztens-e.
Az Algol 68 (1968) után gyakran elkerülték a specifikációk megírását az implementáció előtt , a késleltetett végrehajtás miatti váratlan megvalósítási nehézségek miatt. A nyelvek azonban még mindig alkalmanként használatosak, és formális specifikáció nélkül válnak népszerűvé: használatához a nyelv implementációja szükséges, míg a specifikáció kívánatos, de nem szükséges.
A programozási nyelvek specifikációja többféle lehet, többek között:
Egy programozási nyelv szintaxisát általában a következő két összetevő kombinációjával írják le:
Egy nagy, összetett, gyakorlatias programozási nyelv szigorú szemantikájának megfogalmazása még a tapasztalt emberek számára is kihívást jelent, és az így kapott specifikációt a szakértők kivételével bárki nehezen értheti meg. Az alábbiakban bemutatunk néhány módszert egy programozási nyelv szemantikájának leírására; minden nyelv legalább egyet használ ezen leírási módszerek közül, és néhány nyelv több mint egyet kombinál [4] :