|
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 | ||||||
|
||||||
x5p10pc 4.1 Setul de caractere 4.2 Unitati lexicale 4.2.1 Cuvinte cheie 4.2.2 Identificatori 4.2.3 Literali 4.2.3.1 Literali intregi 4.2.3.2 Literali flotanti 4.2.3.3 Literali booleeni 4.2.3.4 Literali caracter 4.2.3.5 Literali sir de caractere 4.2.4 Separatori 4.2.5 Operatori 4.3 Comentarii 4.1 Setul de caractere Limbajului 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: 1. Sirul de caractere Unicode sau ASCII, memorat in fisierul sursa, este transformat intr-un sir de caractere Unicode. Caracterele Unicode pot fi introduse si ca secvente escape folosind doar caractere ASCII. 2. Sirul de caractere Unicode este transformat intr-un sir de caractere in care sunt evidentiate separat caracterele de intrare fata de caracterele de sfarsit de linie. 3. Sirul de caractere de intrare si de sfarsit de linie este transformat intr-un sir de cuvinte ale limbajului Java. 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 lexicale Unitatile 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: • Cuvinte cheie • Identificatori • Literali • Separatori • Operatori 4.2.1 Cuvinte cheie Cuvintele 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: Abstract Boolean Break Byte Case Cast Catch Char Class Const Continue Default Do Double Else Extends Final Finally Float For Future Generic Goto If Implements Import Inner Instanceof intinterface long native new null operator outer package private protected public rest return short static super switch synchronized this throw throws transient try var void volatile while byvalue Dintre acestea, cele ingrosate sunt efectiv folosite, iar restul sunt
rezervate pentru viitoare extensii ale limbajului. \u0030-\u0039 0-9 cifre ISO-LATIN-1 \u0660-\u0669 cifre Arabic-Indic \u06f0-\u06f9 cifre Eastern Arabic-Indic \u0966-\u096f cifre Devanagari \u09e6-\u09ef cifre Bengali \u0a66-\ u0a6f cifre Gurmukhi \u0ae6-\u0aef cifre Gujarati \u0b66-\u0b6f cifre Oriya \u0be7-\u0bef cifre Tamil \u0c66-\u0c6f cifre Telugu \u0ce6-\u0cef cifre Kannada \u0d66-\u0d6f cifre Malayalam \u0e50-\u0e59 cifre Thai \u0ed0-\u0ed9 cifre Lao \u1040-\u1049 cifre Tibetan Tabelul 4.1 Cifrele Unicode. Tabelul 4.2 Literele Unicode. 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 flotanti Literalii 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 booleeni Literalii 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 caracter Un 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. 4.2.3.5 Literali sir de caractere Un 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 Separatori Un 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 Operatori Operatorii 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 Comentarii Un 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: • Comentarii pe mai multe linii, inchise intre /* si */. Toate caracterele dintre cele doua secvente sunt ignorate. • Comentarii pe mai multe linii care tin de documentatie, inchise intre /** si */. Textul dintre cele doua secvente este automat mutat in documentatia aplicatiei de catre generatorul automat de documentatie. • Comentarii pe o singura linie care incep cu //. Toate caracterele care urmeaza acestei secvente pana la primul caracter sfarsit de linie sunt ignorate. 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 |
|