Professional Documents
Culture Documents
Mod de implementare:
O functie recursiva care primeste un string cu codul sursa si returneaza true daca stringul indeplineste
conditiile definite pentru codul sursa.
Tabela de simboluri a fost implementata conform cerintelor sub forma de hash table.
S-a utilizat o lista de chei (0-9) si functia de hashing suma_codurilor_ascii(string) mod 10.
Rezolvarea coliziunilor: fiecare valoare corespunzatoare unei chei este o lista, iar coliziunea se rezolva
prin adaugarea elementului nou in lista de la valoarea data de functia de hashing.
Regexuri:
CIFRA = /[0-9]/;
LITERA = /[A-Za-z]/;
OPERATORI = /==|>=|<=|&&|\|\||[-\+\*\/>=<]/;
IDENTIFICATORI = /[A-Za-z0-9_]{1,250}/;
# CONSTANTE:
# NUMERE:
NUMAR = /^[1-9][0-9]*|^0$/;
CONST_INT = /(\+|-)?<NUMAR>/;
# STRING-URI:
CARACTER = /'(<LITERA>|<CIFRA>)?'/;
STRING = /<CARACTER>+/;
CONST_CHAR = /\"(<LITERA>|<CIFRA>)*\"/;
CONST = /<CONST_CHAR>|<CONST_INT>/;
#EXPRESIE SIMPLA:
OPERATOR_EXPRESIE = /[-\+*\/]/;
OPERAND_EXPRESIE_SIMPLA = /<CONST>|<IDENTIFICATORI>/;
EXPRESIE_SIMPLA = /<OPERAND_EXPRESIE_SIMPLA>
/x;
# FUNCTII PREDEFINITE:
FUNC_PREDEF = /read|write/;
/x;
# EXPRESIE COMPLEXA:
OPERAND_EXPRESIE = /<EXPRESIE_SIMPLA>|<APEL_FCT_PREDEF>/;
EXPRESIE = /
<EXPRESIE_SIMPLA >
|
<OPERAND_EXPRESIE>(\s*<OPERATOR_EXPRESIE>\s*<OPERAND_EXPRESIE>)*
/x;
# OPERATII LOGICE:
RELATIE = />=|<=|>|<|==|\|\||&&/;
CONDITIE = /<EXPRESIE>\s*<RELATIE>\s*<EXPRESIE>/;
# INSTRUCTIUNE SIMPLA:
ATRIBUIRE = /<IDENTIFICATORI>\s*=\s*<EXPRESIE>/;
TIP_DATE = /char|int|array/;
DECLARATIE = /<TIP_DATE>\s*<IDENTIFICATORI>/;
INSTRUCTIUNE_SIMPLA = /<DECLARATIE>|<ATRIBUIRE>|<APEL_FCT_PREDEF>/;
Cazuri de test:
1.
__FILE__
int x;
char a;
array my_array1;
__END__
__FILE__
int;
char a;
array my_array1;
__END__
1.
__FILE__
int x;
char a;
array my_array1;
int e = 'asd';
while ( 1 == 1 ) {
x = x + 1;
x = x + 2;
if ( a == "a" ) {
a = 1;
write(1) if ( e > 2 );
__END__
Sparge stringul in
componente sintactice, dupa Printeaza
separatori eroarea de
sintaxa