Add Analyse lexycale pour :
- OP & Symbole simple
- Constante numérique
- Blanc retour à la ligne
This commit is contained in:
@@ -14,12 +14,27 @@
|
|||||||
|
|
||||||
extern FILE *yyin;
|
extern FILE *yyin;
|
||||||
|
|
||||||
|
char tableSymbole[] = {
|
||||||
|
';', ',', '(', ')', '[', ']', '{', '}', // Code
|
||||||
|
'+', '-', '*', '/', // Arithmetique
|
||||||
|
'<', '=', // Comparaison
|
||||||
|
'&','|', '!' , // Logique
|
||||||
|
'\0'
|
||||||
|
};
|
||||||
|
|
||||||
|
int codeSymbole[] = {
|
||||||
|
POINT_VIRGULE, VIRGULE, PARENTHESE_OUVRANTE, PARENTHESE_FERMANTE, CROCHET_OUVRANT, CROCHET_FERMANT, ACCOLADE_OUVRANTE, ACCOLADE_FERMANTE,
|
||||||
|
PLUS, MOINS, FOIS, DIVISE,
|
||||||
|
INFERIEUR, EGAL,
|
||||||
|
ET, OU, NON
|
||||||
|
};
|
||||||
|
|
||||||
char *tableMotsClefs[] = {
|
char *tableMotsClefs[] = {
|
||||||
"si",
|
"si", "alors", "sinon", "tantque", "faire", "entier", "retour", "lire", "ecrire", '\0'
|
||||||
};
|
};
|
||||||
|
|
||||||
int codeMotClefs[] = {
|
int codeMotClefs[] = {
|
||||||
SI,
|
SI, ALORS, SINON, TANTQUE, FAIRE, ENTIER, RETOUR, LIRE, ECRIRE
|
||||||
};
|
};
|
||||||
|
|
||||||
char yytext[YYTEXT_MAX];
|
char yytext[YYTEXT_MAX];
|
||||||
@@ -85,7 +100,54 @@ int yylex(void)
|
|||||||
char c;
|
char c;
|
||||||
int i;
|
int i;
|
||||||
yytext[yyleng = 0] = '\0';
|
yytext[yyleng = 0] = '\0';
|
||||||
// COMPLÉTER
|
|
||||||
|
if (mangeEspaces() == -1)
|
||||||
|
return FIN;
|
||||||
|
|
||||||
|
c = lireCar();
|
||||||
|
|
||||||
|
// Nombre
|
||||||
|
if( isdigit( c ) )
|
||||||
|
{
|
||||||
|
while( isdigit( lireCar() ) );
|
||||||
|
delireCar();
|
||||||
|
|
||||||
|
affiche_element( "nombre", yytext, 1 );
|
||||||
|
return NOMBRE;
|
||||||
|
}
|
||||||
|
|
||||||
|
//id_var
|
||||||
|
if( c == '$' ) {
|
||||||
|
int compteur = 1; // 1 pour $
|
||||||
|
|
||||||
|
while( is_alphanum( lireCar() )){
|
||||||
|
compteur++;
|
||||||
|
}
|
||||||
|
delireCar();
|
||||||
|
|
||||||
|
if(compteur > 99) {
|
||||||
|
erreur("Nom variable > 99 character");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
affiche_element( "id_variable", yytext, 1 );
|
||||||
|
return ID_VAR;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Symbole simple
|
||||||
|
for( int i = 0; tableSymbole[i] != '\0'; ++i ) {
|
||||||
|
if( c == tableSymbole[i] ) {
|
||||||
|
char tmp[1];
|
||||||
|
tmp[0] = c;
|
||||||
|
affiche_element( "symbole", tmp, 1 );
|
||||||
|
return codeSymbole[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
|
|||||||
Reference in New Issue
Block a user