Кіріспе

Дұрыс құрылымдалған бағдарламаларды анықтайтын ережелер жиынтығы. Компьютер ғылымында компьютер тілінің синтаксисі – бұл сол тілде дұрыс құрылымдалған операторлар немесе өрнектер саналатын символдардың комбинацияларын анықтайтын ережелер. Бұл бағдарламалау тілдеріне де, құжаттың бастапқы кодты білдіретінін, сондай-ақ деректерді білдіретін таңбалау тілдеріне де қатысты. Тілдің синтаксисі оның сыртқы түрін анықтайды. Мәтіндік компьютер тілдері таңбалар тізбегіне негізделген, ал визуальды бағдарламалау тілдері символдар арасындағы кеңістіктік орналасу мен байланыстарға негізделген (бұл символдар мәтіндік немесе графикалық болуы мүмкін). Синтаксистік қателерге ие құжаттар синтаксистік жарамсыз деп есептеледі. Тілдің синтаксисін жобалау кезінде дизайнер заңды және заңсыз жолдардың мысалдарын жазып алып, содан кейін осы мысалдардан жалпы ережелерді анықтауға тырысуы мүмкін. Сондықтан синтаксис – кодтың формасы, ал семантика – мағынасы. Компьютер тілдерін өңдеуде семантикалық өңдеу әдетте синтаксистік өңдеуден кейін жүзеге асырылады; алайда, кейбір жағдайларда толық синтаксистік талдау үшін семантикалық өңдеу қажет, және олар бірдей немесе параллель түрде орындалады. Компиляторда синтаксистік талдау – фронтенд, ал семантикалық талдау – бэкенд (егер бұл кезең бөлініп қарастырылса, ортаңғы бөлік те) құрайды.

Синтаксис анықтамасы

Мәтіндік бағдарламалау тілдерінің синтаксисі әдетте реттегіш өрнектерді (лексикалық құрылым үшін) және Backus–Naur формасын (грамматикалық құрылым үшін метатіл) қолдану арқылы синтаксистік категорияларды (терминалды емес) және терминалдық символдарды индуктивті түрде анықтау үшін белгіленеді. Жалпы синтаксис контекстке сезімтал (айнымалы жарияланымдар мен ішкі көлемдерге байланысты), сондықтан 1-түрге жатады. Дегенмен, кейбір тілдерде грамматика 0-түр (Тюринг толық) болуы мүмкін. Perl және Lisp сияқты кейбір тілдерде тілдің сипаттамасы (немесе іске асырылуы) талдау кезеңінде орындалатын құрылымдарға рұқсат береді. Бұдан өзге, бұл тілдерде бағдарламалаушыға талдаушының әрекетін өзгертуге мүмкіндік беретін құрылымдар бар. Бұл үйлесім талдау мен орындалу арасындағы шекараны күрт бұрмалап, осы тілдерде синтаксистік талдауды шешілмейтін мәселеге айналдырады, яғни талдау кезеңі аяқталмауы мүмкін. Мысалы, Perl-де BEGIN операторын пайдаланып, талдау кезінде кодты орындауға болады, ал Perl функциясының прототиптері синтаксистік түсіндіруді, тіпті қалған кодтың синтаксистік дұрыстығын өзгерте алады. Бұл жай сөзбен "Perl-ді тек Perl талдай алады" (өйткені код талдау кезінде орындалуы керек және грамматиканы өзгерте алады) немесе тіпті "Perl-ді Perl де талдай алмайды" (өйткені ол шешілмейтін мәселе) деп айтылады. Сол сияқты, defmacro синтаксисімен енгізілген Lisp макролары да талдау кезінде орындалады, яғни Lisp компиляторында Lisp орындалу ортасының толық жиынтығы болуы керек. Керісінше, C макросы тек тізбек алмастыру болып табылады және кодты орындауды қажет етпейді.