INFOPedia : TTCSimplePas

HomePage :: Categorie :: Indice :: Ultime modifiche :: Ultimi commenti :: Login/Registrazione
La versione più recente è stata modificata il 2007-03-28 19:03:40 da DenteDiLupo

Aggiunzioni:
ATTENZIONE : per un problema di parser non è possibile scrivere %% all'interno del codice che è stato sostituito con <percento><percento>

Soluzione 2

ATTENZIONE : per un problema di parser non è possibile scrivere %% all'interno del codice che è stato sostituito con <percento><percento>


Omissioni:
ATTENZIONE : per un problema di parser non è possibile scrivere %% all'interno del codice che è stato sostituito con <percento><percento>
Soluzione 2
ATTENZIONE : per un problema di parser non è possibile scrivere %% all'interno del codice che è stato sostituito con <percento><percento>




Modificato il 2007-03-28 19:02:30 da DenteDiLupo

Aggiunzioni:
Soluzione 2
%{
int i=1;
%}
%x comment
SPAZI [ \t]*
FINERIGA \n
{KEYWORD} fprintf(yyout, "%d :%30s \t<KEYWORD>\n",i,yytext);
{IDENTIFICATORE} fprintf(yyout, "%d :%30s \t<IDENTIFICATORE>\n",i,yytext);
{ASSEGNAZIONE} fprintf(yyout, "%d :%30s \t<ASSEGNAZIONE>\n",i,yytext);
{NUMERO} fprintf(yyout, "%d :%30s \t<NUMERO>\n",i,yytext);
{RELOP} fprintf(yyout, "%d :%30s \t<RELOP>\n",i,yytext);
{OP} fprintf(yyout, "%d :%30s \t<OP>\n",i,yytext);
{FINEISTRUZIONE} fprintf(yyout, "%d :%30s \t<FINEISTRUZIONE>\n",i,yytext);
{FINERIGA} i;
"{" BEGIN(comment);
<comment>[^}\n]* ;
<comment>\n i
;
<comment>"}" BEGIN(INITIAL);
. ;
if (argc > 1)
yyout = fopen(argv[2], "w");
yyout = stdout;
fprintf(yyout, "INIZIO PARSER : \n");
fprintf(yyout, "\nFINE PARSER\n");



Modificato il 2007-03-28 19:00:06 da DenteDiLupo

Aggiunzioni:
ATTENZIONE : per un problema di parser non è possibile scrivere %% all'interno del codice che è stato sostituito con <percento><percento>

Omissioni:
ATTENZIONE : per un problema di parser non è possibile scrivere %% all'interno del codice che è stato sostituito con <percento><percento>



Modificato il 2007-03-28 18:59:02 da DenteDiLupo

Aggiunzioni:
ATTENZIONE : per un problema di parser non è possibile scrivere %% all'interno del codice che è stato sostituito con <percento><percento>
<percento><percento>
<percento><percento>


Omissioni:




Modificato il 2007-03-28 18:49:45 da DenteDiLupo

Omissioni:
‰‰



Modificato il 2007-03-28 18:49:30 da DenteDiLupo

Aggiunzioni:
%%


Omissioni:
%%



Modificato il 2007-03-28 18:48:42 da DenteDiLupo

Aggiunzioni:
%%



Modificato il 2007-03-28 18:46:56 da DenteDiLupo

Aggiunzioni:
‰‰
‰‰


Omissioni:

\%\%
&percent;&percent;




Modificato il 2007-03-28 18:46:13 da DenteDiLupo

Aggiunzioni:

\%\%
&percent;&percent;


Omissioni:
&percent;
&percent&percent
&percent&percent




Modificato il 2007-03-28 18:45:33 da DenteDiLupo

Aggiunzioni:
&percent;

Omissioni:
&percent



Modificato il 2007-03-28 18:45:16 da DenteDiLupo

Aggiunzioni:
&percent



Modificato il 2007-03-28 18:44:23 da DenteDiLupo

Aggiunzioni:
&percent&percent
&percent&percent


Omissioni:
%% %%



Modificato il 2007-03-28 18:36:58 da DenteDiLupo

Aggiunzioni:
%% %%



Modificato il 2007-03-28 18:36:37 da DenteDiLupo

Omissioni:
%%
%%




Modificato il 2007-03-28 18:35:20 da DenteDiLupo

Aggiunzioni:
%option noyywrap
LETTERA		[A-Za-z]
DIGIT		[0-9]
IDENTIFICATORE	{LETTERA}({LETTERA}|{DIGIT})*
NUMERO		{DIGIT}+
RELOP		"<"|"<="|">"|">="|"="|"<>"
OP		"+"|"-"|"/"|"*"
KEYWORD		"program"|"begin"|"write"|"read"|"if"|"then"|"else"|"repeat"|"until"
ASSEGNAZIONE	":="
FINEISTRUZIONE	";"
SPAZI		[ \t\n]*
COMMENTI	"{"[^}]*"}"
""
{KEYWORD} | {IDENTIFICATORE} | {NUMERO} | {RELOP} | {OP} | {FINEISTRUZIONE} | {SPAZI} | {COMMENTI} | {ASSEGNAZIONE} ; . ECHO;
""
main(int argc, char *argv[]){
	--argc;
	if (argc > 0)
		yyin = fopen( argv[1], "r");
	else
		yyin = stdin;
	printf("INZIO PARSER : \n");
	yylex();
	printf("\nFINE PARSER\n");
	
}




Modificato il 2007-03-28 18:31:26 da DenteDiLupo

Aggiunzioni:

Soluzione 1





Modificato il 2007-03-28 18:30:51 da DenteDiLupo [Aggiunto testo esercizi]

Aggiunzioni:
SINTASSI del LINGUAGGIO SIMPLE PAS programma -> program identificatore ";" istruzione
istruzione -> begin istruzione listaistruzioni
istruzione -> write espressione
istruzione -> read identificatore
istruzione -> if test then istruzione else istruzione
istruzione -> if test then istruzione
istruzione -> repeat istruzione until test
istruzione -> identificatore ":=" espressione
listaistruzioni -> end
listaistruzioni -> ";" istruzione listaistruzioni
espressione -> costante
espressione -> costante op espressione
costante -> numero
costante -> identificatore
test -> espressione relop espressione
op -> "+" | "-" | "*" | "/"
relop -> "<" | "<=" | ">" | ">=" | "=" | "<>"
identificatore -> lettera (lettera | cifra)*
numero -> cifra+
lettera -> "A" | ... | "Z" | "a" | ... | "z"
cifra -> "0" | ... | "9"
Non sono previste procedure o funzioni. Tutte le variabili sono intere e sono dichiarate assegnando loro un valore. Sono inoltre previsti i caratteri spazio, nuova linea, e tabulazione come separatori, e commenti racchiusi tra parentesi graffe. Nota che, così come si evince dall’esempio, i commenti possono estendersi su più righe.

Esercizio 1

Scrivere un analizzatore lessicale che stampi solo i caratteri NON riconosciuti dal lessico. Richiamare l’analizzatore lessicale con il comando
simpas nomefileinput

Esercizio 2

Scrivere un analizzatore lessicale che stampi in uscita la lista dei token utilizzati, il numero di linea in cui si trova, il relativo lessema saltando tutti i token non significativi, cioè commenti, blank, tab, newline. Richiamare l’analizzatore lessicale con il comando
simpas2 nomefileinput nomefileoutput

Esercizio 3

Scrivere un analizzatore lessicale che stampi in uscita le informazioni, contenute nei commenti del programma, relative ad autore, data e versione del programma. Precisamente, se nel commento una riga è costituita dalla parola "AUTORE:", allora l'analizzatore restituisce in output la riga successiva, e lo stesso avviene se nei commenti si incontrano le righe costituite dalle stringhe "DATA:" oppure "VERSIONE:".


Omissioni:
Qui potete scrivere quello che volete...



La versione più vecchia di questa pagina è stata modificata il 2007-03-28 18:28:06 da DenteDiLupo []
Vista della pagina:

SIMPLE PAS


Qui potete scrivere quello che volete...



Torna a Teoria e Tecniche di Compilazione
Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by Wikka Wakka Wiki 1.1.6.1
La pagina è stata generata in 0.1524 secondi