Table of Contents

Checker proiect LFA

Etapa 1

De aici (checker_etapa1.zip) puteti descarca arhiva ce contine checkere (pentru etapa 1) atat pentru variantele in Python, cat si in Haskell ale proiectului, sub forma fisierelor Tester.py si Tester.hs, precum si directorul cu testele. Ambele testere presupun ca arhiva cu teste de care au nevoie pentru a rula (T1) se afla intr-un director numit tests/, aflat la randul sau in cadrul directorului curent. Puteti schimba oricand asta prin modificarea variabilei TESTER_DIR din cadrul fisierului .py sau .hs.

Checker-ele ofera un total de 107 puncte pentru prima etapa, dintre care 100 sunt distribuite in mod uniform pe primele seturi de teste T.1-10, ultimele 7 fiind distribuite in cadrul setului T1.11.

Detalii pentru Python3

Checker-ul pentru Python3 se ruleaza dand o comanda de forma python3 Tester.py [-h] [–stage STAGE] [–set SET] [–test TEST], unde:

Script-ul Tester.py presupune ca se afla in acelasi director impreuna cu un fisier numit Lexer.py, ce exporta o functie numita runlexer. Functia runlexer primeste ca parametri (in ordine) calea catre un fisier .lex (ce contine specificatia lexicala sub forma unor AFD-uri), un fisier .in (ce contine sirul de lexat) si un fisier .out. In ultimul, runlexer va trebui sa printeze, pe cate o linie, perechile (token, lexem) conform formatului din fisierele .ref (ex. de linie: <NUME_TOKEN_CU_MAJUSCULE><SPATIU><LEXEM_ASA_CUM_APARE_IN_INPUT>).

Detalii pentru Haskell

Checker-ul pentru variantele in Haskell ale proiectului se gaseste sub forma unui modul cu numele Tester.hs si care exporta 3 functii principale:

Pentru a utiliza in mod facil functiile puteti, in ghci, da comanda :l Tester.hs Lexer.hs <alte module auxiliare> pentru a incarca modulul Tester impreuna cu Lexer si a rula direct functiile anterior mentionate.

Tester.hs se asteapta sa se afle in acelasi director impreuna cu un alt modul numit Lexer.hs, care sa exporte o functie numita runLexer. Functia aceasta primeste ca parametri un String reprezentand continutul raw al unui fisier .lex si un String reprezentand sirul de caractere de lexat si intoarce o lista de perechi (token, lexem) de tipul [(String, String)].

Etapa 2

Aici (checker_etapa2.zip) puteti gasi arhiva ce contine checker-ul pentru etapa a doua a proiectului. Acesta a fost creat atat pentru Python3, cat si pentru Haskell, si poate fi rulat dand o comanda de forma python3 checker.py <python3|haskell>. In plus, script-ul presupune ca se afla in acelasi director impreuna cu un folder numit tests/, in care sa se afle la randul sau directorul T2 cu subdirectoarele in si ref.

Detalii pentru Python3

Pentru Python3, este nevoie ca in directorul curent sa existe un fisier numit main.py, ce sa poata fi rulat folosind comanda python3 main.py <input_file> <output_file>. Acesta trebuie sa va ruleze rezolvarea etapei pe fisierul <input_file> si sa scrie rezultatele in <output_file>.

Detalii pentru Haskell

Pentru Haskell, este nevoie ca in directorul curent sa existe un executabil numit Main, compilat dintr-un modul numit Main.hs. In arhiva de sus puteti gasi un schelet de Main.hs in care input-ul si output-ul au fost deja implementate, iar la care ramane doar sa atasati ce ati facut pana acum. Pentru a compila unul sau mai multe module Haskell intr-un executabil, puteti da comanda ghc -make Main.hs <alte module auxiliare>.

Etapa 3

De aici (checker_etapa3.zip) puteti descarca arhiva ce contine checker-ul (Tester.py) de Python3 pentru Etapa 3, impreuna cu folder-ul de teste.

Script-ul Tester.py este o varianta imbunatatia a celui oferit pentru Etapa 1. Ca urmare, acesta poate fi folosit pentru verificarea atat a primeia, cat si a celei de-a treia etape, pastrand aceeasi functionalitate in cazul Etapei 1.

Punctajul total calculat de checker pentru Etapa 3.1 este de 107p, ce va fi scalat pentru a se incadra in maximul corespunzator de 0.7p. Pentru Etapa 3.2, punctajul este de 8p, fiind de asemenea scalat pentru a se incadra in maximul corespunzator de 0.3p. Pentru claritate, checker-ul afiseaza si nota finala pe etapa/subetapa pe care rulati (nu se aplica daca rulati doar un singur test sau set de teste).

Detalii pentru Python 3

Checker-ul pentru Python3 se ruleaza dand o comanda de forma python3 Tester.py [-h] [–stage STAGE] [–set SET] [–test TEST], unde:

Fisierul Tester.py trebuie sa se afle in acelasi director impreuna cu un modul numit CompleteLexer.py, ce exporta doua functii: runcompletelexer (pentru etapa 3.1) si runparser (pentru etapa 3.2).

Detaii pentru Haskell

Verficarea in cadrul prezentarilor se va face manual impreuna cu asistentul/a de laborator.