Tematică științifică · 2.1
Sintaxa și mediile de programare
Sintaxa, semantica și vocabularul unui limbaj, drumul de la programul sursă la programul executabil, categoriile de erori și operațiile mediului de programare, cu exemplele date în C++ și în Python.
Un limbaj de programare este un mijloc de comunicare între programator și calculator. Programul scris în el nu se execută ca atare: procesorul execută numai instrucțiuni în limbajul mașinii, iar între textul scris de programator și execuție se interpune o traducere.
Exemplele de mai jos sunt date în C++, limbaj care se poate folosi la proba scrisă, și în Python, cel studiat la clasa a IX-a din 2025. Comutatorul de la începutul lecției schimbă limbajul: se schimbă și explicația, nu doar codul, fiindcă drumul de la textul sursă la execuție nu este același în cele două limbaje.
Sintaxa, semantica și vocabularul
Un limbaj de programare este caracterizat prin sintaxa, semantica și vocabularul lui.
Definirea riguroasă a unui limbaj cuprinde și pragmatica, care arată modul de folosire a elementelor limbajului.
Sintaxa, semantica și vocabularul se studiază și la limbile naturale. Deosebirea este că un limbaj de programare nu îngăduie abateri: într-o limbă naturală, o greșeală de gramatică nu împiedică de obicei înțelegerea, fiindcă interlocutorul completează din context, pe când calculatorul nu completează nimic. O construcție care nu respectă sintaxa nu este tradusă, iar în locul rezultatului se obține un mesaj de eroare.
Unitățile lexicale
Sintaxa nu lucrează cu litere, ci cu unități lexicale.
Traducerea programului începe prin despărțirea textului sursă în unități lexicale, iar abia după aceea se verifică dacă succesiunea lor formează construcții admise.
Unitățile lexicale sunt:
- identificatorii;
- cuvintele cheie;
- constantele;
- operatorii;
- separatorii.
În C++, ele se construiesc din setul de caractere al codului ASCII: literele mari și mici ale alfabetului latin, cifrele sistemului zecimal și caracterele speciale. În Python, textul sursă folosește setul de caractere Unicode, codificat în UTF-8, deci identificatorii pot conține și litere cu diacritice.
Corectitudinea sintactică și corectitudinea rezultatului
Traducerea verifică sintaxa, nu intenția. O instrucțiune scrisă după toate regulile limbajului poate calcula altceva decât s-a cerut, fără ca traducerea să semnaleze ceva.
În C++
int a = 7, b = 2;
cout << a + b / 2; // se afișează 8, nu 4.5
Instrucțiunea este corectă sintactic și se traduce fără nicio observație. Împărțirea are însă
prioritate mai mare decât adunarea, deci se calculează b / 2 și abia apoi se adună a.
Nici scrierea (a + b) / 2 nu dă media: a și b sunt de tip int, deci împărțirea este
întreagă și se afișează 4. Media 4.5 se obține scriind (a + b) / 2.0.
În Python
a, b = 7, 2
print(a + b / 2) # se afișează 8.0, nu 4.5
Instrucțiunea este corectă sintactic și se execută fără nicio observație. Împărțirea are însă
prioritate mai mare decât adunarea, deci se calculează b / 2 și abia apoi se adună a.
Media celor două numere se obține scriind (a + b) / 2, fiindcă operatorul / dă în Python
rezultat real chiar și pentru operanzi întregi.
Deosebirea dintre scrieri este de semantică, nu de sintaxă, iar programul o dovedește numai la execuție.
Descrierea sintaxei
Regulile de sintaxă ale unui limbaj se scriu de obicei în notația BNF (Backus-Naur Form). Fiecare
regulă definește o construcție prin construcțiile din care este alcătuită: semnul ::= desparte
numele construcției de definiția ei, iar bara verticală | desparte alternativele.
antet-funcție ::= tip identificator ( parametri )
parametri ::= void | listă-parametri
listă-parametri ::= tip identificator | tip identificator , listă-parametri
Ultima regulă se folosește pe ea însăși, deci descrie o listă de orice lungime, fără să spună dinainte câte elemente are.
Primul limbaj definit riguros, cu sintaxa complet formalizată, a fost ALGOL. Conceptele introduse atunci de colectivul coordonat de Peter Naur se folosesc și astăzi la proiectarea limbajelor de programare.
De la programul sursă la programul executabil
Transcrierea algoritmului într-un limbaj de programare se face cu un editor de texte, iar rezultatul se salvează într-un fișier pe disc.
De aici încolo, cele două limbaje se deosebesc: C++ folosește un compilator, iar Python un interpretor.
În C++
Fișierul cu programul sursă are extensia .cpp pentru C++ și .c pentru C. Până la execuție se
parcurg trei operații:
- compilarea — compilatorul analizează textul sursă din punct de vedere sintactic și, dacă nu
găsește erori, îl traduce în limbajul mașinii; rezultatul este un program obiect, salvat
într-un fișier cu extensia
.objsub Windows sau.osub Linux; - editarea legăturilor — editorul de legături, numit și link-editor, asamblează modulele obiect
ale aplicației împreună cu funcțiile din bibliotecile standard apelate în program și obține
programul executabil, un fișier cu extensia
.exesub Windows; - lansarea în execuție — programul executabil este încărcat în memoria internă și executat de procesor.
Programul obiect nu se poate executa: el conține numai instrucțiunile traduse din textul sursă, nu și pe cele ale funcțiilor din biblioteci. O bibliotecă este o colecție de funcții deja compilate, scrise fie de producătorul mediului de programare, fie de alți programatori; funcțiile de citire și de scriere și cele matematice se iau de acolo. De aceea editarea legăturilor este obligatorie, chiar dacă mediul de programare o face fără să fie cerută separat.
#include <iostream>
using namespace std;
int main() {
cout << "Salutare" << endl;
return 0;
}
Din salut.cpp se obține salut.obj, iar din acesta salut.exe. Compilarea și editarea
legăturilor se fac o singură dată: programul executabil se poate lansa apoi de oricâte ori, pe un
calculator pe care nu există nici compilatorul, nici textul sursă.
În Python
Fișierul cu programul sursă are extensia .py. Nu se obține niciun program executabil: fișierul
sursă este citit și executat de un program numit interpretor.
print('Salutare')
Fișierul se salvează ca salut.py și se execută cu comanda python salut.py. Textul sursă este
considerat codificat în UTF-8, deci diacriticele se pot folosi în constantele de tip șir de
caractere, în identificatori și în comentarii.
Interpretorul nu execută textul rând cu rând. El îl traduce întâi într-o formă intermediară, numită
bytecode, și abia aceasta se execută. Pentru modulele importate de program, forma intermediară
se păstrează pe disc, în directorul __pycache__, în fișiere cu extensia .pyc al căror nume
cuprinde și versiunea interpretorului. La o execuție următoare, interpretorul compară data
modificării fișierului sursă cu cea a fișierului compilat și traduce din nou numai dacă sursa s-a
schimbat. Fișierul dat direct în linia de comandă se traduce de fiecare dată, iar rezultatul
traducerii nu se păstrează.
Forma intermediară nu depinde de echipamentul pe care a fost obținută, dar nu se poate executa fără interpretor.
Modul interactiv. Interpretorul se poate porni și fără fișier sursă, cu comanda python.
Atunci el citește câte o comandă de la tastatură, o execută și afișează rezultatul. Promptul
principal este >>>, iar promptul secundar, care apare la liniile de continuare ale unei comenzi
scrise pe mai multe rânduri, este .... O linie goală încheie comanda.
>>> 17 // 3
5
>>> n = 12
>>> if n % 2 == 0:
... print('numar par')
...
numar par
Deosebirile dintre cele două feluri de traducere:
| Criteriul | Compilator | Interpretor |
|---|---|---|
| Rezultatul traducerii | program executabil, păstrat pe disc | formă intermediară, executată imediat |
| Momentul traducerii | înainte de execuție, o singură dată | la fiecare execuție |
| Ce este nevoie la execuție | numai programul executabil | interpretorul și programul sursă |
| Legătura cu echipamentul | executabilul se obține pentru un anumit sistem de calcul | același text sursă se execută pe orice sistem care are interpretor |
Erorile și momentul în care se văd
După momentul în care se manifestă, erorile dintr-un program se împart în erori de sintaxă, erori de execuție și erori logice.
| Categoria | Când apare | Ce o produce |
|---|---|---|
| erori de sintaxă | la traducerea programului | construcții care încalcă regulile limbajului: un cuvânt scris greșit, un separator care lipsește, o paranteză neînchisă |
| erori de execuție | în timpul executării programului | operații care nu se pot efectua: împărțirea la zero, deschiderea unui fișier care nu există, depășirea limitelor unui tablou |
| erori logice | la testare | programul se execută până la capăt, dar rezultatul nu este cel cerut |
Erorile logice se mai numesc erori de concepție. Erorile de execuție și cele logice nu țin de sintaxă: construcțiile sunt corecte, dar semnificația lor, adică semantica programului, nu este cea dorită. Erorile logice sunt cele mai greu de găsit, fiindcă nu le semnalează nimeni: ele se descoperă executând programul cu un set complet de date de intrare și comparând rezultatele obținute cu cele așteptate.
În C++
Compilatorul afișează erorile de sintaxă într-o fereastră de mesaje, fiecare cu numele fișierului și numărul liniei în care a fost detectată. Textul se corectează în editor, iar programul se compilează din nou; operațiile se repetă până când compilatorul nu mai găsește erori.
Pe lângă erori, compilatorul afișează mesaje de avertizare. Ele arată construcții corecte sintactic, dar care în contextul programului sunt probabil greșite:
- o variabilă declarată și nefolosită;
- o variabilă folosită fără să i se fi atribuit o valoare;
- operatorul de atribuire
=scris în locul operatorului relațional==într-o condiție.
Avertizările nu opresc compilarea și nu împiedică obținerea programului executabil. Ele se citesc totuși, fiindcă arată încă din faza de compilare erori de execuție sau erori logice.
În Python
Erorile de sintaxă sunt găsite de analizorul sintactic, o parte a interpretorului, înainte ca vreo
instrucțiune să fie executată; de aceea se mai numesc erori de analiză sintactică. Mesajul cuprinde numele
fișierului, numărul liniei, linia însăși și, sub ea, semnele ^ care arată porțiunea în care s-a
oprit analiza:
File "<stdin>", line 1
while True print('gata')
^^^^^
SyntaxError: invalid syntax
Erorile care apar în timpul executării unui program corect sintactic se numesc excepții. Ele opresc execuția și afișează numele excepției, care arată felul erorii:
ZeroDivisionErrorla împărțirea la zero;NameErrorla folosirea unei variabile care nu există;TypeErrorla o operație între date de tipuri nepotrivite.
Mediul de programare
Obținerea unui program executabil cere mai multe programe:
- un editor de texte;
- un compilator;
- un editor de legături;
- un program depanator.
Ele pot fi folosite separat, dar de obicei sunt încorporate într-un singur produs.
Un mediu de programare asigură:
- editarea programului sursă;
- administrarea fișierelor sursă: creare, deschidere, salvare, închidere, tipărire;
- compilarea programului sursă;
- editarea legăturilor și obținerea programului executabil;
- lansarea în execuție a programului;
- depanarea și corectarea erorilor;
- configurarea mediului însuși;
- documentarea prin sistemul de asistență (Help).
Interfața cuprinde bara cu titlurile meniurilor, spațiul de lucru în care se deschid ferestrele de editare și bara de informare din partea de jos a ecranului. Meniurile sunt grupate după operații: administrarea fișierelor, editarea textului, căutarea, compilarea, execuția, depanarea, configurarea mediului.
Editorul de texte folosește marcaje cu culoare pentru a deosebi elementele programului: cuvinte cheie, identificatori, constante, comentarii. Culorile nu fac parte din program și nu ajung în fișierul sursă; ele se văd numai în editor și arată o greșeală de scriere înainte de compilare, fiindcă un cuvânt cheie scris greșit rămâne necolorat.
Fișierele mediului
În C++
| Extensia | Fișierul |
|---|---|
.cpp, .c | program sursă |
.h | fișier antet |
.obj, .o | program obiect |
.lib | bibliotecă |
.exe | program executabil |
Când rezolvarea unei probleme cere mai multe fișiere sursă, ele se strâng într-un proiect. Fișierul proiectului ține evidența fișierelor sursă din care se obține aplicația, iar compilarea și editarea legăturilor se cer o singură dată, pentru tot proiectul.
În Python
| Extensia | Fișierul |
|---|---|
.py | program sursă |
.pyc | forma intermediară a unui modul, în directorul __pycache__ |
Fișierele .pyc sunt făcute și șterse de interpretor, nu de programator. Ele nu se editează și nu
se copiază de la o versiune de Python la alta: numele fiecăruia cuprinde versiunea pentru care a
fost obținut, tocmai ca formele intermediare produse de versiuni diferite să poată exista în același
director.
Medii de programare folosite în școală
Programa școlară de informatică pentru liceu recomandă, pentru exersarea și implementarea algoritmilor:
- pentru C++ — Code::Blocks;
- pentru Python — PyCharm, IDLE Python, Spyder, Wing și Komodo;
- pentru amândouă limbajele — Visual Studio Code.
Toate sunt multiplatformă, adică au variante pentru Windows, Linux și macOS. IDLE se instalează odată cu interpretorul, de pe www.python.org, iar celelalte se instalează separat.
Programa recomandă și instrumente online, care se folosesc în browser și nu cer nicio instalare pe calculatoarele din laborator:
- Online GDB;
- Programiz;
- w3schools;
- Repl.it;
- Jupyter Notebooks.
Interpretoarele de Python trecute în programă sunt CPython, distribuția de pe www.python.org, și PyPy.
Depanarea programului
Depanatorul asigură:
- executarea pas cu pas — instrucțiunile se execută una câte una, la cerere, astfel încât se vede ordinea în care se execută;
- urmărirea variabilelor și a expresiilor — valorile lor se afișează într-o fereastră aparte și se reevaluează după fiecare instrucțiune executată;
- punctele de întrerupere (breakpoints) — marcaje puse în dreptul unor instrucțiuni, la care execuția se oprește, pentru ca starea programului și conținutul variabilelor să poată fi examinate.
Punctele de întrerupere se pun înaintea executării pas cu pas: programul se execută normal până la instrucțiunea bănuită și abia de acolo se continuă instrucțiune cu instrucțiune. Altfel s-ar parcurge pas cu pas și partea de program care lucrează corect.
Testarea și depanarea sunt operații deosebite. Testarea se face executând programul cu un set complet de date de intrare și arată că programul greșește; depanarea arată unde greșește.
În C++
Corectarea unei erori cere reluarea întregului ciclu: se modifică textul sursă în editor, se compilează din nou, se editează legăturile și se execută programul. Ciclul se repetă până când rezultatele sunt cele așteptate pentru toate seturile de date de intrare.
În Python
Modul interactiv este el însuși un instrument de depanare. O expresie, un apel de subprogram sau o
prelucrare de șir se pot încerca la promptul >>>, cu valori alese de programator, fără a executa
programul întreg și fără a-l modifica.
Apariții la examen
La proba scrisă, sintaxa se punctează la fiecare program cerut, printr-un rând separat din barem:
| Examenul | Ce punctează rândul din barem | Punctajul |
|---|---|---|
| Definitivat | declarările variabilelor, citirea sau afișarea datelor și corectitudinea globală a programului | 1 p, o dată în lucrare |
| Titularizare | declarările variabilelor, afișarea datelor și corectitudinea globală a programului | 1 p, de două ori în lucrare |
Formularea s-a schimbat la 2026, la amândouă examenele: în locul sintagmei „corectitudine globală” baremele scriu „corectitudine sintactică”.
Punctul acesta nu ține de algoritm: se acordă pentru declararea tuturor variabilelor folosite, pentru citirea și afișarea datelor conform cerinței și pentru corectitudinea programului ca întreg. La proba scrisă nu există compilator care să semnaleze un punct și virgulă lipsă.
Mediul de programare mai apare o dată în programă, la tematica de metodică, în capitolul despre strategii didactice: printre produsele software pe care profesorul le alege pentru integrarea mijloacelor de învățământ în procesul de predare-învățare-evaluare sunt trecute sistemul de operare, aplicațiile de birotică, mediul specializat pentru reprezentarea algoritmilor prin blocuri grafice și mediul de programare.
Flashcarduri
Citește întrebarea și formulează răspunsul. Apoi întoarce flashcardul și verifică.
Totalitatea regulilor după care se scriu corect construcțiile limbajului.
Semnificația construcțiilor corecte din punct de vedere sintactic.
Totalitatea cuvintelor care pot fi folosite într-un program.
- un șir de caractere care are o semnificație în limbaj;
- unitățile lexicale sunt identificatorii, cuvintele cheie, constantele, operatorii și separatorii.
Programul scris de programator, salvat într-un fișier pe disc.
- compilarea, care produce programul obiect;
- editarea legăturilor, care produce programul executabil;
- lansarea în execuție.
Conține numai instrucțiunile traduse din textul sursă, nu și pe cele ale funcțiilor din biblioteci; acestea se adaugă la editarea legăturilor.
- compilatorul traduce programul o singură dată, înainte de execuție, și produce un program executabil păstrat pe disc;
- interpretorul traduce programul la fiecare execuție, într-o formă intermediară executată imediat;
- la execuție, programul compilat cere numai executabilul, iar cel interpretat cere interpretorul și programul sursă.
- erorile de sintaxă, la traducerea programului;
- erorile de execuție, în timpul executării programului;
- erorile logice, la testare.
Nu le semnalează nimeni: programul se execută până la capăt, iar ele se descoperă numai comparând rezultatele obținute cu cele așteptate.
Nu. Greșeala se poate afla înaintea locului semnalat, de exemplu un semn care lipsește la sfârșitul rândului anterior sau al condiției.
Produsul care încorporează editorul de texte, compilatorul, editorul de legături și depanatorul și le pune la dispoziție prin aceeași interfață.
- executarea pas cu pas;
- urmărirea variabilelor și a expresiilor;
- punctele de întrerupere.
Testarea arată că programul greșește, iar depanarea arată unde greșește.
Ai parcurs toate flashcardurile.
- Știu: 0
- De repetat: 0
Din tastatură: Spațiu întoarce flashcardul, ← și → trec la flashcardul precedent sau următor.
Hartă mentală
Pentru recapitulare, ascunde ideile, spune ce cuprinde fiecare ramură, apoi apasă pe titlul ei și verifică.
- executarea pas cu pas
- urmărirea variabilelor
- puncte de întrerupere
- testarea și depanarea
- editor, compilator, editor de legături, depanator
- operațiile mediului
- fișierele mediului
- medii folosite în școală
Sintaxa și mediile de programare
- sintaxa: regulile de scriere
- semantica: semnificația construcțiilor
- vocabularul: cuvintele limbajului
- unitățile lexicale
- notația BNF
- programul sursă
- C++: compilare, editarea legăturilor, execuție
- Python: interpretor, bytecode
- compilator și interpretor
- erori de sintaxă
- erori de execuție
- erori logice
- C++: mesaje de avertizare
- Python: excepții
Test grilă
Bifează un răspuns la fiecare întrebare, apoi apasă „Vezi nota”. Răspunsurile corecte se arată după corectare.
Materialul acesta se citește pe educamp.ro și nu se tipărește.
Surse (5)
- Cerchez, E., Șerban, M., „Programarea în limbajul C/C++ pentru liceu”, Editura Polirom, Iași, 2005
- „Metode și tehnici clasice de programare”, suport de curs
- Miloșescu, M. L., „Informatică: pentru profilul real, intensiv. Manual pentru clasa a IX-a”, Editura Didactică și Pedagogică, București, 2005
- Ministerul Educației și Cercetării, „Programa școlară pentru disciplina Informatică, clasa a X-a, curriculum de specialitate”, aprobată prin Ordinul nr. 4.370/2026, Monitorul Oficial nr. 591 bis din 20 iulie 2026
- „Tutorialul de Python”, documentația oficială a limbajului Python, https://docs.python.org/ro/3/tutorial/index.html