Skip to content

bonfa/compilatori

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

96 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

COMPILATORE

La cartella /lessicale contiene un analizzatore lessicale del linguaggio. La cartella contiene:
an_lessicale_alone.lex: file lex
def.h: file di intestazione
makefile: con le direttive per la compilazione

Questa versione dell'analizzatore lessicale riceve in input un file e per ogni token nel file, ritorna la codifica di tale simbolo.
Esempio di utilizzo (dopo aver compilato):

cat ./file_table/keywords.table | ./an_lessicale_alone

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

La cartella /sintattico contiene un analizzatore sintattico del linguaggio.  La cartella contiene:
def.h: file di intestazione
lessicale.lex: analizzatore lessicale
sintattico.c: analizzatore sintattico
makefile: con le direttive per la compilazione

L'analizzatore si basa su un metodo top-down e restituisce i codici del matching tra il simbolo in ingresso e la grammatica mostrando le due codifiche. Se viene trovato un errore, viene stampata una stringa che mostra il numero della riga che lo contiene.
In questa versione l'analizzatore sintattico NON crea l'albero della frase.
Esempio di utilizzo:

cat ./file_table/keywords.table | ./sintattico

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

La cartella /albero contiene un analizzatore sintattico del linguaggio che genera un albero sintattico. La cartella contiene:
albero.c: stampa l'albero
def.h: file di intestazione
lessicale.lex: analizzatore lessicale
sintattico.c: analizzatore sintattico
makefile: con le direttive per la compilazione

L'analizzatore si basa su un metodo top-down e restituisce un albero i cui nodi sono gli elementi terminali e non terminali della grammatica del linguaggio. Se viene trovato un errore, viene stampata una stringa che mostra il numero della riga che lo contiene.
Esempio di utilizzo:

cat ./file_table/keywords.table | ./sintattico

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

La cartella /yacc contiene un analizzatore sintattico del linguaggio che genera un albero sintattico ralizzata tramite yacc. La cartella contiene:
albero.c: stampa l'albero
def.h: file di intestazione
lessicale.lex: analizzatore lessicale
parser.y: analizzatore sintattico realizzato tramite yacc
parser_solo_sintassi.y: verifica solamente che la sintassi sia corretta, senza creare l'albero sintattico
makefile: con le direttive per la compilazione
test_parser.py: verifica che l'albero generato dal parser a discesa ricorsiva sia uguale a quello generato dal parser ralizzato tramite yacc

L'analizzatore sintattico si basa su YACC e restituisce un albero sintattico astratto della frase del linguaggio. In particolare, l'albero generato è uguale a quello generato dal parser a discesa ricorsiva.
Se viene trovato un errore, viene stampata una stringa che mostra il numero della riga che lo contiene.
Esempio di utilizzo:

cat ./file_table/es_0.table | ./solo_sintassi	(controlla la correttezza della frase)
cat ./file_table/es_0.table | ./parser	 (genera l'albero sintattico)
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
La cartella /compiler contiene il front end del compilatore del linguaggio table. Esso genera il codice intermedio del codice ricevuto in ingresso. La cartella contiene:
docs/: cartella che contiene la specifica del linguaggio
esempi_table/: cartella che contiene i file table su cui sono stati realizzati i test
test_results/: i risultati dei test esatti e quelli generati
expr.c: contiene il codice che effettua l'analisi semantica e la generazione di codice delle espressioni della EBNF
gen.c: contiene le funzioni di base che sono usate per la generazione di codice
main.c: 
print.c: contiene le funzioni per la stampa
sem.c: contiene le funzioni di base che sono usate per l'analisi semantica
stat.c: contiene il codice che effettua l'analisi semantica e la generazione di codice degli statement della EBNF 
symtab.c: contiene le funzioni di base per operare sulle tabelle dei simboli
def.h: file di intestazione
lexer.lex: analizzatore lessicale
parser.y: analizzatore sintattico che genera un albero sintattico astratto
makefile:
test_compiler.py: modulo python utilizzato per il test

Esempio di utilizzo:
cat ./esempi_table/es_0.table | ./table   (genera il codice per il file es_0.table)
python test_compiler.py  (lancia il test per tutti i file contenuti in /esempi_table)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published