Noi te platim pentru timpul acordat , o postare , like , vizualizare subiect , sau creare subiect , insemna castig.
Suntem comunitatea unica din Romania care plateste pentru efortul depus . Ideile ,opiniile tale conteaza si sunt platite doar la noi.

Unităţile lexicale ale limbajului C

Unităţile lexicale ale limbajului C

Solus

Membru
Staff member
Fondator BitArena
Moderator
Utilizator
Joined
Jul 6, 2018
Messages
523
Reaction score
94
Points
26
Location
Bucuresti
Website
www.bitarena.eu

Reputation:

În limbajul C există şase tipuri de unităţi lexicale: identificatori, cuvinte-cheie, constante, şiruri, operatori şi separatori.

2.1. Identificatori


Un identificator este o succesiune de litere şi cifre dintre care primul caracter este în mod obligatoriu o literă. Se admit şi litere mari şi litere mici dar ele se consideră caractere distincte. Liniuţa de subliniere _ este considerată ca fiind literă. Deci alfabetul peste care sînt definiţi identificatorii este următorul:

A = <a,...,z,A,...,Z,0,...,9,_>

2.2. Cuvinte cheie


Cuvintele cheie sînt identificatori rezervaţi limbajului. Ei au o semnificaţie bine determinată şi nu pot fi utilizaţi decît aşa cum cere sintaxa limbajului. Cuvintele-cheie se scriu obligatoriu cu litere mici. Aceste cuvinte sînt (fiecare mediu de programare C poate folosi şi alte cuvinte rezervate):

int register if const
char auto else void
float extern for switch
double static while case
long struct do default
short union continue return
unsigned typedef break sizeof


2.3. Constante

În limbajul C există următoarele tipuri de constante: întreg (zecimal, octal, hexazecimal), întreg lung explicit, flotant, caracter, simbolic.

Constante întregi


O constantă întreagă constă dintr-o succesiune de cifre.
O constantă octală este o constantă întreagă care începe cu 0 (cifra zero), şi este formată cu cifre de la 0 la 7.
O constantă hexazecimală este o constantă întreagă precedată de 0x sau 0X (cifra 0 şi litera x). Cifrele hexazecimale includ literele de la A la F şi de la a la f cu valori de la 10 la 15.
În orice alt caz, constanta întreagă este o constantă zecimală.
Exemplu: constanta zecimală 31 poate fi scrisă ca 037 în octal şi 0x1f sau 0X1F în hexazecimal.
O constantă întreagă este generată pe un cuvînt (doi sau patru octeţi, dacă sistemul de calcul este pe 16 sau 32 de biţi).
O constantă zecimală a cărei valoare depăşeşte pe cel mai mare întreg cu semn reprezentabil pe un cuvînt scurt (16 biţi) se consideră de tip long şi este generată pe 4 octeţi.
O constantă octală sau hexazecimală care depăşeşte pe cel mai mare întreg fără semn reprezentabil pe un cuvînt scurt se consideră de asemenea de tip long.
O constantă întreagă devine negativă dacă i se aplică operatorul unar de negativare ’-’.

Constante de tip explicit

O constantă întreagă zecimală, octală sau hexazecimală, urmată imediat de litera l sau L este o constantă lungă. Aceasta va fi generată în calculator pe 4 octeţi.
Exemplu: 123L.
O constantă întreagă zecimală urmată imediat de litera u sau U este o constantă de tip întreg fără semn. Litera u sau U poate fi precedată de litera l sau L.
Exemplu: 123lu.

Constante flotante


O constantă flotantă constă dintr-o parte întreagă, un punct zecimal, o parte fracţionară, litera e sau E şi opţional, un exponent care este un întreg cu semn. Partea întreagă şi partea fracţionară sînt constituite din cîte o succesiune de cifre. Într-o constantă flotantă, atît partea întreagă cît şi partea fracţionară pot lipsi dar nu ambele; de asemenea poate lipsi punctul zecimal sau litera e şi exponentul, dar nu deodată (şi punctul şi litera e şi exponentul).
Exemplu: 123.456e-7 sau 0.12e-3
Orice constantă flotantă se consideră a fi în precizie extinsă.

Constante caracter

O constantă caracter constă dintr-un singur caracter scris între apostrofuri, de exemplu 'x'. Valoarea unei constante caracter este valoarea numerică a caracterului, în setul de caractere al calculatorului. De exemplu în setul de caractere ASCII caracterul zero sau '0' are valoarea 48 în zecimal, total diferită de valoarea numerică zero.
Constantele caracter participă la operaţiile aritmetice ca şi oricare alte numere. De exemplu, dacă variabila c conţine valoarea ASCII a unei cifre, atunci prin instrucţiunea:
c = c - '0' ;
această valoare se transformă în valoarea efectivă a cifrei.
Anumite caractere negrafice şi caractere grafice ' (apostrof) şi \ (backslash) pot fi reprezentate ca şi constante caracter cu ajutorul aşa numitor secvenţe de evitare. Secvenţele de evitare oferă de altfel şi un mecanism general pentru reprezentarea caracterelor mai greu de introdus în calculator şi a oricăror configuraţii de biţi. Aceste secvenţe de evitare sînt:

\n new-line \r carriage return \\ backslash
\t tab orizontal \f form feed \' apostrof
\b backspace \a semnal sonor \" ghilimele
\ddd configuraţie de biţi (ddd)

Aceste secvenţe, deşi sînt formate din mai multe caractere, ele reprezintă în realitate un singur caracter. Secvenţa '\ddd' unde ddd este un şir de 1 pînă la 3 cifre octale, generează pe un octet valoarea caracterului dorit sau a configuraţiei de biţi dorite, date de şirul ddd.
Exemplu: secvenţa '\040' va genera caracterul spaţiu.
Un caz special al acestei construcţii este secvenţa '\0' care indică caracterul NULL, care este caracterul cu valoarea zero. '\0' este scris deseori în locul lui 0 pentru a sublinia natura de caracter a unei anumite expresii.
Cînd caracterul care urmează după un backslash nu este unul dintre cele specificate, backslash-ul este ignorat. Atragem atenţia că toate caracterele setului ASCII sînt pozitive, dar o constantă caracter specificată printr-o secvenţă de evitare poate fi şi negativă, de exemplu '\377' are valoarea -1.

Constante simbolice

O constantă simbolică este un identificator cu valoare de constantă. Valoarea constantei poate fi orice şir de caractere introdus prin construcţia #define (vezi capitolul 8).
Exemplu: #define MAX 1000
După întîlnirea acestei construcţii compilatorul va înlocui toate apariţiile constantei simbolice MAX cu valoarea 1000.
Numele constantelor simbolice se scriu de obicei cu litere mari (fără a fi obligatoriu).


2.4. Şiruri

Un şir este o succesiune de caractere scrise între ghilimele, de exemplu "ABCD".
Ghilimelele nu fac parte din şir; ele servesc numai pentru delimitarea şirului. Caracterul " (ghilimele) poate apărea într-un şir dacă se utilizează secvenţa de evitare \". În interiorul unui şir pot fi folosite şi alte secvenţe de evitare pentru constante caracter, de asemenea poate fi folosit caracterul \ (backslash) la sfîrşitul unui rînd pentru a da posibilitatea continuării unui şir pe mai multe linii, situaţie în care caracterul \ însuşi va fi ignorat.
Pentru şirul de caractere se mai foloseşte denumirea constantă şir sau constantă de tip şir.
Cînd un şir apare într-un program C, compilatorul creează un masiv de caractere care conţine caracterele şirului şi plasează automat caracterul NULL ('\0') la sfîrşitul şirului, astfel ca programele care operează asupra şirurilor să poată detecta sfîrşitul acestora. Această reprezentare înseamnă că, teoretic, nu există o limită a lungimii unui şir, iar programele trebuie să parcurgă şirul, analizîndu-l pentru a-i determina lungimea. Se admit şi şiruri de lungime zero.
Tehnic, un şir este un masiv ale cărui elemente sînt caractere. El are tipul masiv de caractere şi clasa de memorie static (vezi secţiunea 3.1). Un şir este iniţializat cu caracterele date (vezi secţiunea 5.4).
La alocare, memoria fizică cerută este cu un octet mai mare decît numărul de caractere scrise între ghilimele, datorită adăugării automate a caracterului null la sfîrşitul fiecărui şir.

Exemplu. Funcţia strlen(s) returnează lungimea şirului de caractere s, excluzînd caracterul terminal null.

int strlen(char s[]) {
/* returnează lungimea şirului */
int i;
i=0;
while (s!='\0')
++i;
return i;
}


Atragem atenţia asupra diferenţei dintre o constantă caracter şi un şir care conţine un singur caracter. "x" nu este acelaşi lucru cu 'x'. 'x' este un singur caracter, folosit pentru a genera pe un octet valoarea numerică a literei x, din setul de caractere al calculatorului. "x" este un şir de caractere, care în calculator se reprezintă pe doi octeţi, dintre care primul conţine un caracter (litera x), iar al doilea caracterul NULL care indică sfîrşitul de şir.

2.5. Operatori


Limbajul C prezintă un număr mare de operatori care pot fi clasificaţi după diverse criterii. Există operatori unari, binari şi ternari, operatori aritmetici, logici, operatori pe biţi etc.
Într-un capitol separat vom prezenta clasele de operatori care corespund la diferite nivele de prioritate.

2.6. Separatori


Un separator este un caracter sau un şir de caractere care separă unităţile lexicale într-un program scris în C.
Separatorul cel mai frecvent este aşa numitul spaţiu alb (blanc) care conţine unul sau mai multe spaţii, tab-uri, new-line-uri sau comentarii.
Aceste construcţii sînt eliminate în faza de analiza lexicală a compilării.
Dăm mai jos lista separatorilor admişi în limbajul C.


( ) Parantezele mici - încadrează lista de argumente ale unei
funcţii sau delimitează anumite părţi în cadrul expresiilor
aritmetice etc
{ } Acoladele - încadrează instrucţiunile compuse, care
constituie corpul unor instrucţiuni sau corpul funcţiilor
[ ] Parantezele mari - încadrează dimensiunile de masiv sau
indicii elementelor de masiv
" " Ghilimelele - încadrează un şir de caractere
' ' Apostrofurile - încadrează un singur caracter sau o secvenţă
de evitare
; Punct şi virgula - termină o instrucţiune
/* Slash asterisc - început de comentariu
*/ Asterisc slash - sfîrşit de comentariu


Un comentariu este un şir de caractere care începe cu caracterele /* şi se termină cu caracterele */.
Un comentariu poate să apară oriunde într-un program, unde poate apărea un blanc şi are rol de separator; el nu influenţează cu nimic semnificaţia programului, scopul lui fiind doar o documentare a programului.
Nu se admit comentarii imbricate.
 
Top