Кіріспе
Дұрыс құрылымдалған бағдарламаларды анықтайтын ережелер жиынтығы. Компьютер ғылымында компьютер тілінің синтаксисі – бұл сол тілде дұрыс құрылымдалған операторлар немесе өрнектер саналатын символдардың комбинацияларын анықтайтын ережелер. Бұл бағдарламалау тілдеріне де, құжаттың бастапқы кодты білдіретінін, сондай-ақ деректерді білдіретін таңбалау тілдеріне де қатысты. Тілдің синтаксисі оның сыртқы түрін анықтайды. Мәтіндік компьютер тілдері таңбалар тізбегіне негізделген, ал визуальды бағдарламалау тілдері символдар арасындағы кеңістіктік орналасу мен байланыстарға негізделген (бұл символдар мәтіндік немесе графикалық болуы мүмкін). Синтаксистік қателерге ие құжаттар синтаксистік жарамсыз деп есептеледі. Тілдің синтаксисін жобалау кезінде дизайнер заңды және заңсыз жолдардың мысалдарын жазып алып, содан кейін осы мысалдардан жалпы ережелерді анықтауға тырысуы мүмкін. Сондықтан синтаксис – кодтың формасы, ал семантика – мағынасы. Компьютер тілдерін өңдеуде семантикалық өңдеу әдетте синтаксистік өңдеуден кейін жүзеге асырылады; алайда, кейбір жағдайларда толық синтаксистік талдау үшін семантикалық өңдеу қажет, және олар бірдей немесе параллель түрде орындалады. Компиляторда синтаксистік талдау – фронтенд, ал семантикалық талдау – бэкенд (егер бұл кезең бөлініп қарастырылса, ортаңғы бөлік те) құрайды.
In computer science, the syntax of a computer language is the rules that define the combinations of symbols that are considered to be correctly structured statements or expressions in that language. This applies both to programming languages, where the document represents source code, and to markup languages, where the document represents data. The syntax of a language defines its surface form. Text based computer languages are based on sequences of characters, while visual programming languages are based on the spatial layout and connections between symbols (which may be textual or graphical). Documents that are syntactically invalid are said to have a syntax error. When designing the syntax of a language, a designer might start by writing down examples of both legal and illegal strings, before trying to figure out the general rules from these examples. Syntax therefore refers to the form of the code, and is contrasted with semantics – the meaning. In processing computer languages, semantic processing generally comes after syntactic processing; however, in some cases, semantic processing is necessary for complete syntactic analysis, and these are done together or concurrently. In a compiler, the syntactic analysis comprises the frontend, while the semantic analysis comprises the backend (and middle end, if this phase is distinguished).
Синтаксис анықтамасы
Мәтіндік бағдарламалау тілдерінің синтаксисі әдетте реттегіш өрнектерді (лексикалық құрылым үшін) және Backus–Naur формасын (грамматикалық құрылым үшін метатіл) қолдану арқылы синтаксистік категорияларды (терминалды емес) және терминалдық символдарды индуктивті түрде анықтау үшін белгіленеді. Жалпы синтаксис контекстке сезімтал (айнымалы жарияланымдар мен ішкі көлемдерге байланысты), сондықтан 1-түрге жатады. Дегенмен, кейбір тілдерде грамматика 0-түр (Тюринг толық) болуы мүмкін. Perl және Lisp сияқты кейбір тілдерде тілдің сипаттамасы (немесе іске асырылуы) талдау кезеңінде орындалатын құрылымдарға рұқсат береді. Бұдан өзге, бұл тілдерде бағдарламалаушыға талдаушының әрекетін өзгертуге мүмкіндік беретін құрылымдар бар. Бұл үйлесім талдау мен орындалу арасындағы шекараны күрт бұрмалап, осы тілдерде синтаксистік талдауды шешілмейтін мәселеге айналдырады, яғни талдау кезеңі аяқталмауы мүмкін. Мысалы, Perl-де BEGIN операторын пайдаланып, талдау кезінде кодты орындауға болады, ал Perl функциясының прототиптері синтаксистік түсіндіруді, тіпті қалған кодтың синтаксистік дұрыстығын өзгерте алады. Бұл жай сөзбен "Perl-ді тек Perl талдай алады" (өйткені код талдау кезінде орындалуы керек және грамматиканы өзгерте алады) немесе тіпті "Perl-ді Perl де талдай алмайды" (өйткені ол шешілмейтін мәселе) деп айтылады. Сол сияқты, defmacro синтаксисімен енгізілген Lisp макролары да талдау кезінде орындалады, яғни Lisp компиляторында Lisp орындалу ортасының толық жиынтығы болуы керек. Керісінше, C макросы тек тізбек алмастыру болып табылады және кодты орындауды қажет етпейді.