Edit this page Backlinks This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. Schelet si checker pentru fiecare limbaj: * {{lfa:2022:skel-py-e2.zip}} * {{lfa:2022:skel-scala-e2.zip}} Deadline etapa 3: ... ora 23:59 ====== Proiect ====== Etapa 3 a proiectul consta in implementarea unui lexer in python sau scala. <note important>Este recomandat sa va folositi de functionalitatile implementate la etapele precedente pentru rezolvarea etapei</note> ===== Ce este un lexer? ==== Un lexer este un program care imparte un sir de caractere in subsiruri numite //lexeme//, fiecare dintre acestea fiind clasificat ca un //token//, pe baza unei specificatii. ==== Care este input-ul unui lexer? ==== Lexer-ul primeste initial o specificatie de forma: <code> TOKEN1 : REGEX1; TOKEN2 : REGEX2; TOKEN3 : REGEX3; ... </code> unde fiecare ''TOKENi'' este un nume dat unui token, iar ''REGEXi'' este un regex ce descrie lexemele ce pot fi clasificate ca acel token. Puteti imagina aceasta specificatie ca un //fisier de configurare//, care descrie modul in care va functiona lexerul pe diverse fisiere de text. Inputul efectiv al unui lexer este un text care va fi impartit in lexeme folosind expresii regulate. In cursurile viitoare veti afla mai multe detalii despre cum functioneaza si cum sunt implementate lexerele. ==== Care este output-ul unui lexer? ==== Lexer-ul are ca output o lista de forma : ''[(lexema1, TOKEN_LEXEMA_1), (lexema2, TOKEN_LEXEMA_2), ...]'', unde ''TOKEN_LEXEMA_N'' este numele token-ului asociat lexemei n, pe baza specificatiei. ===== Structura specificatiei si incarcarea ei ===== ==== Python ==== Pentru aceasta etapa va fi nevoie sa implementati clasa ''Lexer'' cu 2 metode obligatorii: * constructorul care primeste ca parametru configuratia lexerului * metoda''lex'' care va primi un cuvand ca ''str'' si va intoarce rezultatul lexarii lui sub forma ''List[Tuple[str, str]] | str''. Metoda ''lex'' va intoarce o lista de tupluri ''(token, lexem_cuvant)'' in cazul in care lexarea reuseste si un string cu un mesaj de eroare in caz contrar. (//Mai multe despre cazurile in care un lexer poate esua mai jos//) Specificatia va fi incarcata in teste sub forma unui dictionar ''TOKEN -> REGEX'' ==== Scala ==== ... ===== Format arhiva ====== <note important> In radacina proiectului trebuie pus un fisier intitulat ''ID.txt'' ce va avea pe prima linie a sa ID-ul vostru anonim (ar trebui sa il fi primit pe mail, dar daca din vreun motiv nu il aveti, luati legatura cu asistentul vostru) si pe a doua linie limbajul in care rezolvati tema (''python'' sau ''scala'') Exemplu de continut pentru ''ID.txt'': <code> 9921225 scala </code> sau <code> 9246163 python </code> </note> ==== Structura arhivei (Python) ==== <code> . ├── ID.txt └── src ├── DFA.py ├── __init__.py ├── NFA.py ├── Regex.py ├── Parser.py ... (alte surse pe care le folositi) </code> ==== Structura arhivei (Scala) ==== <code> . ├── build.sbt ├── ID.txt └── src └── main └── scala ├── Dfa.scala ├── Nfa.scala ├── Regex.scala ... (alte surse pe care le folositi) </code> <note> Pentru niciunul din limbaje nu este necesar sa includeti folder-ul cu teste, dar includerea sa nu va cauza erori. </note>