|
Politica de confidentialitate |
|
• domnisoara hus • legume • istoria unui galban • metanol • recapitulare • profitul • caract • comentariu liric • radiolocatia • praslea cel voinic si merele da aur | |
Structura lexicala Java | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4.1 Setul de caractereLimbajului Java lucreaza in mod nativ folosind setul de caractere Unicode. Acesta este un standard international care inlocuieste vechiul set de caractere ASCII. Motivul acestei inlocuiri a fost necesitatea de a reprezenta mai mult de 256 de caractere. Setul de caractere Unicode, fiind reprezentat pe 16 biti are posibilitati mult mai mari. Vechiul standard ASCII este insa un subset al setului Unicode, ceea ce inseamna ca vom regasi caracterele ASCII cu exact aceleasi coduri ca si mai inainte in noul standard. Java foloseste setul Unicode in timpul rularii aplicatiilor ca si in timpul compilarii acestora. Folosirea Unicode in timpul executiei nu inseamna nimic altceva decat faptul ca o variabila Java de tip caracter este reprezentata pe 16 biti iar un sir de caractere va ocupa fizic in memorie de doua ori mai multi octeti decat numarul caracterelor care formeaza sirul. In ceea ce priveste folosirea Unicode in timpul compilarii, compilatorul Java accepta la intrare fisiere sursa care pot contine orice caractere Unicode. Se poate lucra si cu fisiere ASCII obisnuite in care putem introduce caractere Unicode folosind secvente escape. Fisierele sursa sunt fisiere care contin declaratii si instructiuni Java. Aceste fisiere trec prin trei pasi distincti la citirea lor de catre compilator:
In primul pas al citirii fisierului sursa, sunt generate secvente escape. Secventele escape sunt secvente de caractere ASCII care incep cu caracterul backslash \. Pentru secventele escape Unicode, al doilea caracter din secventa trebuie sa fie u sau U. Orice alt caracter care urmeaza dupa backslash va fi considerat ca fiind caracter nativ Unicode si lasat nealterat. Daca al doilea caracter din secventa escape este u, urmatoarele patru caractere ASCII sunt tratate ca si cifre hexazecimale (in baza 16) care formeaza impreuna doi octeti de memorie care reprezinta un caracter Unicode. Se pot folosi la intrare si fisiere ASCII normale, pentru ca ASCII este un subset al Unicode. De exemplu, putem scrie: int f\u0660 = 3; Numele variabilei are doua caractere si al doilea caracter este o cifra arabic-indic. Exemple de secvente Unicode: \uaa08 \U0045 \uu6abe In al doilea pas al citirii fisierului sursa, sunt recunoscute ca si caractere de sfarsit de linie caracterele ASCII CR si ASCII LF. In acelasi timp, secventa de caractere ASCII CR-ASCII LF este tratata ca un singur sfarsit de linie si nu doua. In acest mod, Java suporta in comun standardele de terminare a liniilor folosite de diferite sisteme de operare: MacOS, Unix si DOS. Este important sa separam caracterele de sfarsit de linie de restul caracterelor de intrare pentru a sti unde se termina comentariile de o singura linie (care incep cu secventa //) precum si pentru a raporta odata cu erorile de compilare si linia din fisierul sursa in care au aparut acestea. In pasul al treilea al citirii fisierului sursa, sunt izolate elementele de intrare ale limbajului Java, si anume: spatii, comentarii si unitati lexicale. Spatiile pot fi caracterele ASCII SP (spatiu), FF (avans de pagina) sau HT (tab orizontal) precum si orice caracter terminator de linie. Comentariile le vom discuta in paragraful 4.3. 4.2 Unitati lexicaleUnitatile lexicale sunt elementele de baza cu care se construieste semantica programelor Java. In sirul de cuvinte de intrare, unitatile lexicale sunt separate intre ele prin comentarii si spatii. Unitatile lexicale in limbajul Java pot fi: 4.2.1 Cuvinte cheieCuvintele cheie sunt secvente de caractere ASCII rezervate de limbaj pentru uzul propriu. Cu ajutorul lor, Java isi defineste unitatile sintactice de baza. Nici un program nu poate sa utilizeze aceste secvente altfel decat in modul in care sunt definite de limbaj. Singura exceptie este aceea ca nu exista nici o restrictionare a aparitiei cuvintelor cheie in siruri de caractere sau comentarii. Cuvintele cheie ale limbajului Java sunt:
Dintre acestea, cele ingrosate sunt efectiv folosite, iar restul sunt rezervate pentru viitoare extensii ale limbajului. 4.2.2 IdentificatoriIdentificatorii Java sunt secvente nelimitate de litere si cifre Unicode, incepand cu o litera. Identificatorii nu au voie sa fie identici cu cuvintele rezervate. Cifrele Unicode sunt definite in urmatoarele intervale:
Tabelul 4.1 Cifrele Unicode.Un caracter Unicode este o litera daca este in urmatoarele intervale si nu este cifra:
Tabelul 4.2 Literele Unicode.4.2.3 LiteraliUn literal este modalitatea de baza de exprimare in fisierul sursa a valorilor pe care le pot lua tipurile primitive si tipul sir de caractere. Cu ajutorul literalilor putem introduce valori constante in variabilele de tip primitiv sau in variabilele de tip sir de caractere. In limbajul Java exista urmatoarele tipuri de literali: 4.2.3.1 Literali intregiLiteralii intregi pot fi reprezentati in baza 10, 16 sau 8. Toate caracterele care se folosesc pentru scrierea literalilor intregi fac parte din subsetul ASCII al setului Unicode. Literalii intregi pot fi intregi normali sau lungi. Literalii lungi se recunosc prin faptul ca se termina cu sufixul l sau L. Un literal intreg este reprezentat pe 32 de biti iar unul lung pe 64 de biti. Un literal intreg in baza 10 incepe cu o cifra de la 1 la 9 si se continua cu un sir de cifre de la 0 la 9. Un literal intreg in baza 10 nu poate sa inceapa cu cifra 0, pentru ca acesta este semnul folosit pentru a semnaliza literalii scrisi in baza 8. Exemple de literali intregi in baza 10: 12356L234871234567890l Exemplul al doilea si al patrulea sunt literali intregi lungi. Pentru a exprima un literal intreg in baza 16 trebuie sa definim cifrele de la 10 la 15. Conventia va fi urmatoarea: 10 - a, A13 - d, D 11 - b, B14 - e, E 12 - c, C15 - f, F In plus, pentru ca un literal intreg in baza 16 poate incepe cu o litera, vom adauga prefixul 0x sau 0X. Daca nu am adauga acest sufix, compilatorul ar considera ca este vorba despre un identificator. Exemple de literali intregi in baza 16: 0xa340X1230x2c45L0xde123abccdL Ultimele doua exemple sunt literali intregi lungi. In fine, pentru a reprezenta un literal intreg in baza 8, il vom preceda cu cifra 0. Restul cifrelor pot fi oricare intre 0 si 7. Cifrele 8 si 9 nu sunt admise in literalii intregi in baza 8. Exemple de literali intregi in baza 8: 0234500123001234567712345677L Valoarea maxima a unui literal intreg normal este de 2147483647 (231-1), scrisa in baza 10. In baza 16, cel mai mare literal pozitiv se scrie ca 0x7fffffff iar in baza 8 ca 017777777777. Toate trei scrierile reprezinta de fapt aceeasi valoare, doar ca aceasta este exprimata in baze diferite. Cea mai mica valoare a unui literal intreg normal este -2147483648 (-231), respectiv 0x80000000 si 020000000000. Valorile 0xffffffff si 037777777777 reprezinta amandoua valoarea -1. Specificarea in sursa a unui literal intreg normal care depaseste aceste limite reprezinta o eroare de compilare. Cu alte cuvinte, daca folosim in sursa numarul: 21474836470 de exemplu, fara sa punem sufixul de numar lung dupa el, compilatorul va genera o eroare la analiza sursei. Valoarea maxima a unui literal intreg lung este, in baza 10, 9223372036854775807L (263-1). In octal, asta inseamna 0777777777777777777777L iar in baza 16 0x7fffffffffffffffL. In mod asemanator, valoarea minima a unui literal intreg lung este -9223372036854775808L (-263-1), in octal aceasta valoare este 0400000000000000000000L iar in baza 16 este 0x8000000000000000L. La fel ca si la literalii intregi normali, depasirea acestor limite este o eroare de compilare. 4.2.3.2 Literali flotantiLiteralii flotanti reprezinta numere reale. Ei sunt formati dintr-o parte intreaga, o parte fractionara, un exponent si un sufix de tip. Exponentul, daca exista, este introdus de litera e sau E urmata optional de un semn al exponentului. Este obligatoriu sa existe macar o cifra fie in partea intreaga fie in partea zecimala si punctul zecimal sau litera e pentru exponent. Sufixul care indica tipul flotantului poate fi f sau F in cazul in care avem o valoare flotanta normala si d sau D daca avem o valoare flotanta dubla. Daca nu este specificat nici un sufix, valoarea este implicit dubla. Valoarea maxima a unui literal flotant normal este 3.40282347e+38f iar valoarea cea mai mica reprezentabila este 1.40239846e-45f, ambele reprezentate pe 32 de biti. Valoarea maxima reprezentabila a unui literal flotant dublu este de 1.79769313486231570e+308 iar valoarea cea mai mica reprezentabila este 4.94065645841246544e-324, ambele reprezentate pe 64 de biti. La fel ca si la literalii intregi, este o eroare sa avem exprimat in sursa un literal mai mare decat valoarea maxima reprezentabila sau mai mic decat cea mai mica valoare reprezentabila. Exemple de literali flotanti: 1.0e45f-3.456f0..01e-3 Primele doua exemple reprezinta literali flotanti normali, iar celelalte literali flotanti dubli. 4.2.3.3 Literali booleeniLiteralii booleeni nu pot fi decat true sau false, primul reprezentand valoarea booleana de adevar iar celalalt valoarea booleana de fals. True si false nu sunt cuvinte rezervate ale limbajului Java, dar nu veti putea folosi aceste cuvinte ca identificatori. 4.2.3.4 Literali caracterUn literal de tip caracter este utilizat pentru a exprima caracterele codului Unicode. Reprezentarea se face fie folosind o litera, fie o secventa escape. Secventele escape ne permit reprezentarea caracterelor care nu au reprezentare grafica si reprezentarea unor caractere speciale precum backslash si insasi caracterul apostrof. Caracterele care au reprezentare grafica pot fi reprezentate intre apostrofe, ca in exemplele: 'a' 'S' ',' Pentru restul caracterelor Unicode trebuie sa folosim secvente escape. Dintre acestea, cateva sunt predefinite in Java, si anume:
Tabelul 4.3 Secvente escape predefinite in Java.In forma generala, o secventa escape se scrie sub una din formele: '\o' '\oo''\too' unde o este o cifra octala iar t este o cifra octala intre 0 si 3. Nu este corect sa folositi ca valori pentru literale caracter secventa '\u000d' (caracterul ASCII CR), sau altele care reprezinta caractere speciale, pentru ca acestea fiind secvente escape Unicode sunt transformate foarte devreme in timpul procesarii sursei in caractere CR si sunt interpretate ca terminatori de linie. Exemple de secvente escape: '\n''\u23a''\34' daca dupa caracterul backslash urmeaza altceva decat: b, t, n, f, r, ", ', \, 0, 1, 2, 3, 4, 5, 6, 7 se va semnala o eroare de compilare. In acest moment secventele escape Unicode au fost deja inlocuite cu caractere Unicode native. Daca u apare dupa \, se semnaleaza o eroare de compilare. 4.2.3.5 Literali sir de caractereUn literal sir de caractere este format din zero sau mai multe caractere intre ghilimele. Caracterele care formeaza sirul de caractere pot fi caractere grafice sau secvente escape ca cele definite la literalii caracter. Daca un literal sir de caractere contine in interior un caracter terminator de linie va fi semnalata o eroare de compilare. Cu alte cuvinte, nu putem avea in sursa ceva de forma: "Acesta este gresit!" chiar daca aparent exprimarea ar reprezenta un sir format din caracterele A, c, e, s, t, a, spatiu, e, s, t, e, linie noua, g, r, e, s, i, t, !. Daca dorim sa introducem astfel de caractere terminatoare de linie intr-un sir va trebui sa folosim secvente escape ca in: "Acesta este\ngresit" Daca sirul de caractere este prea lung, putem sa-l spargem in bucati mai mici pe care sa le concatenam cu operatorul +. Fiecare sir de caractere este in fapt o instanta a clasei de obiecte String declarata standard in pachetul java.lang. Exemple de siruri de caractere: """\"""Sir de caractere""unu" + "doi" Primul sir de caractere din exemplu nu contine nici un caracter si se numeste sirul vid. Ultimul exemplu este format din doua siruri distincte concatenate. 4.2.4 SeparatoriUn separator este un caracter care indica sfarsitul unei unitati lexicale si inceputul alteia. Separatorii sunt necesari atunci cand unitati lexicale diferite sunt scrise fara spatii intre ele. Acestea se pot totusi separa daca unele dintre ele contin caractere separatori. In Java separatorii sunt urmatorii: ( ) A S a i ; , . Exemple de separare: aaiisin(56) In primul exemplu nu avem o singura unitate lexicala ci patru: a, a, i, i. Separatorii a si i ne dau aceasta informatie. In al doilea exemplu, unitatile lexicale sunt tot 4 sin, (, 56, ). Atentie, separatorii participa in acelasi timp si la constructia sintaxei limbajului. Ei nu sunt identici cu spatiile desi, ca si acestea, separa unitati lexicale diferite. 4.2.5 OperatoriOperatorii reprezinta simboluri grafice pentru operatiile elementare definite de limbajul Java. Despre operatori vom discuta mai mult atunci cand vom prezenta expresiile. Deocamdata, iata lista tuturor operatorilor limbajului Java: =><!I?: ==<=>=!=&&||++-- +-*/&|^%<<>> >>> +=-=*=/=&=|=^=%=<<=>>=>>>= Sa mai precizam deocamdata ca toti operatorii joaca si rol de separatori. Cu alte cuvinte, din secventa de caractere: vasile+gheorghe putem extrage trei unitati lexicale, vasile, + si gheorghe. 4.3 ComentariiUn comentariu este o secventa de caractere existenta in fisierul sursa dar care serveste doar pentru explicarea sau documentarea sursei si nu afecteaza in nici un fel semantica programelor. In Java exista trei feluri de comentarii:
In Java, nu putem sa scriem comentarii in interiorul altor comentarii. La fel, nu putem introduce comentarii in interiorul literalilor caracter sau sir de caractere. Secventele /* si */ pot sa apara pe o linie dupa secventa // dar isi pierd semnificatia. La fel se intampla cu secventa // in comentarii care incep cu /* sau /**. Ca urmare, urmatoarea secventa de caractere formeaza un singur comentariu: /* acest comentariu /* // /* se termina abia aici: */ |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite |
|