Zaprojektuj i zaimplementuj swoją tablicę nazw - strukturę danych dostarczającą operacji
W testowaniu moze pomóc poniższy kod:
void test() { NameTab nameTab; int identifiers = 0; while(yylex()) { identifiers ++; if(!nameTab.insert(yytext,yyleng)) abort("FATAL: Pool memory exhausted"); } cout << "Identifier lexems: " << identifiers << endl; cout << "Repeats: " << nameTab.repeated << endl;
Lexer: https://gist.github.com/706400
[ben@students Nametab]$ find /usr/include -name \*.h | xargs cat | /usr/bin/time ./pooled Identifier lexems: 3679282 Repeats: 3265862 2.94user 0.13system 0:03.11elapsed 98%CPU (0avgtext+0avgdata 67104maxresident)k 0inputs+0outputs (0major+4257minor)pagefaults 0swaps
Rozszerz kalkulator o zmienne i przypisania, np
x = 2*2 y = x+1 y*y 25