Pagina provvisoria contenente il materiale finora realizzato per il parsing del VHDL. Questa pagina non viene più mantenuta perchè il materiale qui descritto è ora diventata la mia tesi di laurea.
Attenzione: questa pagina viene aggiornata come uno stack, quindi le notizie più recenti sono all'inizio.

Data: 31 Agosto 2001
Ho creato una semplice grammatica ad attibuti modificando la grammatica sotto descritta in modo da comprendere alcune azioni semantiche che permettano (per il momento) di contare e classificare le porte (e la loro omogeneità) delle entità.

Ho incontrato alcune difficoltà nel lavoro di tipizzazione dei terminali e non-terminali necessario per mantenere gli attributi, ma ora il tutto funziona, anche se c'è parecchio ancora da implementare.

Il risultato di questo lavoro si trova qui: vhdl-grammar-0.4-scarpaz-beta1.tar.gz. Per compilare il parser basta scompattare i files e lanciare make. L'archivio contiene i file aggiornati già presenti nella 0.3, descritti più sotto, ed in più i files util.c e util.h che per il momento non sono ancora quasi utilizzati. In più sono disponibili da scaricare i seguenti files, che risultano dal make del progetto:
y.output.0.4 dettagli della generazione del parser da parte di bison
report risultato del parsing del file mc8051.vhd (preso dai sorgenti 8051 riportati sotto).


Data: 20 Agosto 2001
Ho appena finito di mettere in piedi un parser flex-bison funzionante per VHDL (in giro non se ne trovano di veramente funzionanti). Il prossimo passo dovrebbe essere la preparazione all'interno di questo parser di una grammatica ad attributi che funzioni in qualche modo come uno stimatore FFP per un progetto scritto in VHDL.

Pensavo anche ad un front-end in Tcl/Tk in grado di gestire 'progetti' intesi come collezioni di files VHDL distribuiti in percorsi diversi, e in più gestire i parametri degli FFP.

Sintassi BNF del linguaggio VHDL (copia locale) (copia su ETHZ).
Nota: la sintassi VHDL così definita è ambigua, quindi non deterministica e tanto meno LALR(1). Si rende quindi necessario, per poter usare yacc, effettuare una sorta di interpretazione delle specifiche, modificando la sintassi BNF in modo da rispettare i vincoli LALR(1) eventualmente riconoscendo un linguaggio leggermente più ampio di quello ammesso dalle specifiche e rimandare alcuni controlli alla fase semantica.

Una delle grammatiche lex-yacc che ho trovato: uc_vhdl_yacc.tar.Z. Non è realmente utilizzabile in quanto presenta 3 conflitti del tipo riduzione/riduzione, che evidenziano da qualche parte degli errori abbastanza gravi di progettazione della grammatica.

Un'altra grammatica lex-yacc che ho trovato: vhdl-lexyacc.1.4.tar.Z, fatta da Thomas Dettmer.
In questa versione presenta i seguenti problemi:

  • Non è completa (ad esempio mancano 6 parole riservate dall'analizzatore lessicale e un certo numero di produzioni da quello sintattico);
  • Non rispetta le specifiche (ho dovuto riscriverla in almeno una decina di punti per risolvere parse error che non dovevano avvenire
  • L'analizzatore lessicale sfruttava caratteristiche di lex che non sono disponibili in GNU flex, che ho dovuto escludere.

Il risultato di questo lavoro abbastanza lungo si trova qui: vhdl-grammar-0.3-scarpaz-beta.tar.gz. Per compilare il parser basta scompattare i files e lanciare make. L'archivio contiene i seguenti files:
vhdl.yacc grammatica bison per l'analizzatore sintattico; abilitare la definizione di macro #define DEBUG_ENABLED per ottenere il log completo delle produzioni che vengono riconosciute;
vhdl.lex specifica flex per l'analizzatore lessicale
main.c codice di supporto; qui si può abilitare l'istruzione yydebug=1; per ottenere il log completo delle operazioni di spostamento e riduzione;
makefile makefile per Linux
INFO informazioni varie
In più sono disponibili da scaricare i seguenti files, che risultano dal make del progetto:
parse_vhdl eseguibile del parser compilato sotto Red Hat Linux 7.0 Guinness, kernel 2.2.16-22 i686
y.output.0.3 dettagli della generazione del parser da parte di bison

Sorgenti VHDL del microcontrollore 8051, utilizzati per il test del mio parser: 8051src.tar.Z. Al momento tutti i files presenti in questo archivio vengono correttamente riconosciuti dal parser.

(link The Hamburg VHDL archive)