Identificator (limbi de computer) - Identifier (computer languages)
În limbile de computer , identificatorii sunt jetoane (numite și simboluri , dar care nu trebuie confundate cu tipul de simbol primitiv ) care denumesc entitățile lingvistice. Unele dintre tipurile de entități pe care le poate denumi un identificator includ variabile , tipuri , etichete , subrutine și pachete .
Forma lexicală
Ce secvențe de caractere constituie identificatori depinde de gramatica lexicală a limbajului. O regulă obișnuită este secvențele alfanumerice , cu subliniere permisă (în unele limbi, _ nu este permisă) și cu condiția ca aceasta să nu poată începe cu o cifră numerică (pentru a simplifica lexingul evitând confuzia cu literele întregi ) - așa că foo, foo1, foo_bar, _foosunt permise , dar 1foonu este - aceasta este definiția utilizată în versiunile anterioare de C și C ++ , Python și multe alte limbi. Versiunile ulterioare ale acestor limbi, împreună cu multe alte limbi moderne, acceptă mult mai multe Unicodecaractere dintr-un identificator. Cu toate acestea, o restricție comună este să nu permită caractere în spațiu alb și operatori de limbă; acest lucru simplifică tokenizarea făcându-l în formă liberă și fără context . De exemplu, interzicerea +identificatorilor datorită utilizării sale ca operație binară înseamnă că a+bși a + bpoate fi simbolizat la fel, în timp ce, dacă ar fi permis, a+bar fi un identificator, nu un adaos. Spațiul alb din identificator este deosebit de problematic, ca și cum spațiile ar fi permise în identificatori, atunci o clauză, cum ar fi if rainy day then 1legală, cu rainy dayidentificator, dar pentru a semnifica acest lucru necesită contextul frazal de a fi în condiția unei clauze if. Unele limbi permit spații în identificatori, cu toate acestea, cum ar fi ALGOL 68 și unele variante ALGOL - de exemplu, următoarea este o afirmație validă: real half pi;care ar putea fi introdusă ca .real. half pi;(cuvintele cheie sunt reprezentate cu caractere aldine, concret prin stropire ). În ALGOL acest lucru a fost posibil, deoarece cuvintele cheie sunt diferențiate sintactic, deci nu există riscul de coliziune sau ambiguitate, spațiile sunt eliminate în timpul fazei de reconstrucție a liniei , iar sursa a fost procesată prin analiză fără scaner , astfel încât lexing-ul ar putea fi contextual.
În majoritatea limbilor, unele secvențe de caractere au forma lexicală a unui identificator, dar sunt cunoscute sub numele de cuvinte cheie - de exemplu, ifeste frecvent un cuvânt cheie pentru o clauză if, dar lexical are aceeași formă ca igși fooanume o succesiune de litere. Această suprapunere poate fi tratată în diferite moduri: acestea pot fi interzise să fie identificatori - ceea ce simplifică tokenizarea și analiza - caz în care sunt cuvinte rezervate ; ambele pot fi permise, dar se pot distinge în alte moduri, cum ar fi prin stropping; sau secvențele de cuvinte cheie pot fi permise ca identificatori și care sens este determinat din context, care necesită un lexer contextual. Non-cuvintele cheie pot fi, de asemenea, cuvinte rezervate (interzise ca identificatori), în special pentru compatibilitatea redirecționată , în cazul în care un cuvânt poate deveni un cuvânt cheie în viitor. În câteva limbi, de exemplu, PL / 1 , distincția nu este clară.
Semantică
Scopul sau accesibilitatea în cadrul unui program al unui identificator poate fi local sau global. Un identificator global este declarat în afara funcțiilor și este disponibil pe tot parcursul programului. Un identificator local este declarat în cadrul unei funcții specifice și este disponibil numai în cadrul acelei funcții.
Pentru implementările limbajelor de programare care utilizează un compilator , identificatorii sunt deseori doar entități de timp de compilare . Adică, în timpul rulării , programul compilat conține referințe la adrese de memorie și decalaje, mai degrabă decât jetoane de identificare textuală (aceste adrese de memorie sau decalaje, care au fost atribuite de către compilator fiecărui identificator).
În limbile care acceptă reflectarea , cum ar fi evaluarea interactivă a codului sursă (folosind un interpret sau un compilator incremental), identificatorii sunt, de asemenea, entități de rulare, uneori chiar ca obiecte de primă clasă care pot fi manipulate și evaluate în mod liber. În Lisp , acestea sunt numite simboluri .
Compilatoarele și interpreții nu atribuie de obicei nicio semnificație semantică unui identificator pe baza secvenței reale de caractere utilizate. Cu toate acestea, există excepții. De exemplu:
- În Perl, o variabilă este indicată folosind un prefix numit sigil , care specifică aspecte ale modului în care variabila este interpretată în expresii .
- În Ruby, o variabilă este considerată automat imuabilă dacă identificatorul său începe cu o literă mare.
- În Fortran , prima literă din numele unei variabile indică dacă în mod implicit este creată ca o variabilă cu număr întreg sau cu virgulă mobilă .
- În Go , scrierea cu majuscule a primei litere a numelui unei variabile determină vizibilitatea acesteia (majuscule pentru public, minuscule pentru privat).
În unele limbi precum Go, unicitatea identificatorilor se bazează pe ortografia și vizibilitatea lor.
În HTML un identificator este unul dintre atributele posibile ale unui element HTML . Este unic în document.