This is an old revision of the document!
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:
stage
reprezinta indexul etapei testate (parametru optional; default: 1 - pentru etapa 2, utilizati scriptul-ul checker.py de la sectiunea urmatoare),set
reprezinta numele setului testat (parametru optional; ex.: T1.1) sitest
reprezinta indicele testului din cadrul unui anumit set (parametru optional, trebuie specificat impreuna cu–set
; ex.: 1). Astfel, puteti testa fie o intreaga etapa (momentan doar etapa 1), fie un set dintr-o etapa, fie un anumit test dintr-un set dintr-o etapa.
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:
- runTest, ce primeste ca parametri indicele etapei (
Int
), numele unui set de teste (String
) si indicele unui test (Int
) si intoarce rezultatele lexer-ului vostru pe testul specificat - runSet, ce primeste ca parametri indicele etapei (
Int
) si numele unui set de teste (String
) si intoarce rezultatele lexer-ului pe setul specificat - runAll, ce primeste ca parametru indicepe etapei (
Int
) si afiseaza rezultatele lexer-ului pe toate testele din cadrul etapei specificate.
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 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, aceasta 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 de 0.7p corespunzator primei parti a Etapei 3.
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:
stage
reprezinta indexul etapei testate (parametru optional; default: 1), pentru Etapa 3 putand fi 3, 3-regex sau 3-progset
reprezinta numele setului testat (parametru optional; ex.: –set T3.1)test
reprezinta indicele testului din cadrul unui anumit set (parametru optional, trebuie specificat impreuna cu –set; ex.: –test 1). Ca urmare, puteti testa fie o intreaga etapa, fie un set dintr-o etapa, fie un anumit test dintr-un set dintr-o etapa.
Fisierul Tester.py
trebuie sa se afle in acelasi director impreuna cu un modul numit CompleteLexer.py
, ce exporta o functie runcompletelexer
. Functia runcompletelexer
va primi ca argumente (in ordine) calea catre fisierul .lex
(ce contine specificatia lexicala sub forma unor expresii regulate) a unui set de teste, calea catre un fisier .in
(ce contine sirul de lexat) si calea catre un fisier .out
unde va trebui sa printeze perechile <token,lexem>
conform formatului din cadrul fisierelor .ref
(ex. de linie: <NUME_TOKEN_CU_MAJUSCULE><SPATIU><LEXEM_ASA_CUM_APARE_IN_INPUT>
).
Detaii pentru Haskell
In curand.