Kas teate keele süntaksi, grammatika ja semantika erinevust?


Vastus 1:

Arvan, et on oluline märkida, et keelte ja arvutiteadlaste sõnade “süntaks” ja “grammatika” kasutamise viisid erinevad.

Arvutiteadlased kasutavad sõna “grammatika” reeglite kogumi nimetamiseks, et teha kindlaks, kas antud sümbolite jada on süntaktiliselt kehtiv, st kas see kuulub teatud keelde. Teisisõnu on grammatika mõne süntaksi kirjeldus (sama süntaksi korral võib olla palju alternatiivseid kirjeldusi) ja keel on sünkroonselt õigete sümbolijadade kogum. Grammatikat pakutakse sageli nn Backus-Nauri vormis.

Keeleteadlased kasutavad sõna “grammatika”, et nimetada reeglid keele õigeks kasutamiseks. Reegleid on palju erinevaid ja nende tüüpide hulgas on süntaktilised reeglid seotud sõnade õiges järjekorras seadmisega. Kaks asja, mida tasub tähele panna, on see, et (1) jah, looduslikku keelt saab valesti kasutada (ja maailm ei varise kokku) ja (2) keeleteadlased ei ole tavaliselt mures, kas antud lause kuulub keelde, vaid nad on hoopis mis on seotud keelte kasutamisega.

Nii keeleteaduses kui ka arvutiteaduses osutab sõna “semantika” reeglistikule, mis selgitab, kuidas sümbolite järjestusi tuleks tõlgendada.


Vastus 2:

Süntaks: kuidas keelt pannakse paika. See hõlmab märksõnu ja kirjavahemärke. Näiteks erineb Pythoni süntaks C-süntaksist mitmes osas, suurimad avaldused peavad lõppema semikooloniga C-s, samas kui Python nõuab konkreetse taande töötlemist.

Süntaks on koht, kus näete, et paljud arendajad võidavad mõne keele vastu oma armastuse või vihkamise, sealhulgas mina. Ma vihkan PHP-d ja JavaScripti - nad loevad inetuid, suured plokid muutuvad ebameeldivaks ja tarbetult keerukateks ning ausalt öeldes võimaldavad mõlemad arendajatel järeldatavate masinakirjaparadigmade ja halbade tavade kasutamisel lohakust saada. Kuid ma armastan Rubiini, kuna see loeb nii kenasti, seal on pisut rangem trükkimine ja plokid ei muutu liiga keerukateks sellepärast, kuidas keel ise välja kujunes. Keelekonstruktsioonid muudavad selle elegantseks keeleks hoolimata sellest, et see on C-le väga oluline abstraktsioonikiht.

Grammatika: avalduste nõuetekohane järjestamine, nii et need on mõistlikud ja neid saab töödelda võimalikult väikeste arvutuslike üldkuludega. Üks parimatest näidetest, mida ma viimasel ajal olen selle kohta näinud, oli silmuste sisse pestud paar eesmärgiga printida midagi sellist:

**********

Parem, hõlpsamini mõistetav ja arvutustehniliselt vähem kasutatav teemaksu meetod oleks olnud printf () lausete seeria kasutamine. Hea programmilise grammatikaga kaasneb praktika ja kõik uued arendajad kipuvad lihtsuse nimel asju keeruliseks tegema.

See ei tähenda, et eesmärgi saavutamiseks on õige ja vale viis. Kassi naha saamiseks on alati 100 viisi, kuid leidub vaid käputäis, millel on aktsepteeritav Big O märge, ja tavaliselt ainult paar neist, mis on piisavalt loetavad, et neid elegantseks pidada.

Semantika: avalduse eesmärk versus avalduse tegelik funktsioon. Semantika on uskumatult oluline nii kõnekeeles kui ka programmeerimises. Erinevus: inimene võib avaldust valesti tõlgendada, isegi kui teie semantika on koha peal. Arvutid käitavad täpselt seda, mida kirjutate, või ei tööta, kui see on täielikult välja lülitatud, ja siit pärinevad loogikavead.