Add Analyse lexycale pour :

- OP & Symbole simple
    - Constante numérique
    - Blanc retour à la ligne
This commit is contained in:
2016-01-19 15:51:24 +01:00
parent c05b4aa211
commit 60d19eea05

View File

@@ -11,15 +11,30 @@
#define is_min(c)(('a' <= (c)) && ((c) <= 'z')) #define is_min(c)(('a' <= (c)) && ((c) <= 'z'))
#define is_alpha(c)(is_maj(c) || is_min(c) || (c) == '_' || (c) == '$') #define is_alpha(c)(is_maj(c) || is_min(c) || (c) == '_' || (c) == '$')
#define is_alphanum(c)(is_num((c)) || is_alpha((c))) #define is_alphanum(c)(is_num((c)) || is_alpha((c)))
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;
} }
/******************************************************************************* /*******************************************************************************