Ajout de l'analyse syntaxique des expresion :

- ()
    - +
    - *
This commit is contained in:
2016-01-26 15:41:24 +01:00
parent ae21824d2c
commit e71dc9bae0
7 changed files with 120 additions and 25 deletions

View File

View File

@@ -0,0 +1,20 @@
#ifndef __ANALYSEUR_SYNTAXYQUE__
#define __ANALYSEUR_SYNTAXYQUE__
#include <ctype.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "symboles.h"
#include "util.h"
#include "stdio.h"
#include "analyseur_lexical.h"
void expArith (void);
void expArithBis (void);
void terme (void);
void termeBis (void);
void facteur (void);
#endif

View File

@@ -0,0 +1,74 @@
#include "analyseur_syntaxyque.h"
int uniteCourante;
extern char yytext[100];
void expArith (void) {
affiche_balise_ouvrante("expArith", 1);
terme();
expArithBis();
affiche_balise_fermante("expArith", 1);
}
void expArithBis (void) {
affiche_balise_ouvrante("expArithBis", 1);
if(uniteCourante == PLUS) {
uniteCourante = yylex();
affiche_xml_texte(yytext);
expArith();
}
affiche_balise_fermante("expArithBis", 1);
}
void terme (void) {
affiche_balise_ouvrante("terme", 1);
facteur();
termeBis();
affiche_balise_fermante("terme", 1);
}
void termeBis (void) {
affiche_balise_ouvrante("termeBis", 1);
if(uniteCourante == FOIS) {
uniteCourante = yylex();
affiche_xml_texte(yytext);
terme();
}
affiche_balise_fermante("termeBis", 1);
}
void facteur (void) {
affiche_balise_ouvrante("facteur", 1);
if(uniteCourante == PARENTHESE_OUVRANTE) {
uniteCourante = yylex();
affiche_xml_texte(yytext);
expArith();
if(uniteCourante != PARENTHESE_FERMANTE) {
printf("Erreur de syntaxe");
exit(-1);
}
} else if(uniteCourante == NOMBRE) {
uniteCourante = yylex();
affiche_xml_texte(yytext);
} else {
printf("Erreur de syntaxe");
exit(-1);
}
affiche_balise_fermante("facteur", 1);
}

View File

@@ -1,17 +1,33 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include "analyseur_lexical.h" #include "analyseur_lexical.h"
#include "analyseur_syntaxyque.h"
#include "symboles.h" #include "symboles.h"
extern int uniteCourante;
char yytext[100]; char yytext[100];
FILE *yyin; FILE *yyin;
int main(int argc, char **argv) { int main(int argc, char **argv) {
yyin = fopen(argv[1], "r"); yyin = fopen(argv[1], "r");
if(yyin == NULL){ if(yyin == NULL){
fprintf(stderr, "impossible d'ouvrir le fichier %s\n", argv[1]); fprintf(stderr, "impossible d'ouvrir le fichier %s\n", argv[1]);
exit(1); exit(1);
} }
test_yylex_internal(yyin);
// test_yylex_internal(yyin);
uniteCourante = yylex();
affiche_xml_texte(yytext);
expArith();
uniteCourante = yylex();
if(uniteCourante != FIN) {
printf("Erreur EOF");
}
return 0; return 0;
} }

View File

@@ -1,17 +0,0 @@
#include <stdio.h>
#include <stdlib.h>
#include "analyseur_lexical.h"
#include "symboles.h"
char yytext[100];
FILE *yyin;
int main(int argc, char **argv) {
yyin = fopen(argv[1], "r");
if(yyin == NULL){
fprintf(stderr, "impossible d'ouvrir le fichier %s\n", argv[1]);
exit(1);
}
test_yylex_internal(yyin);
return 0;
}

1
test/expressionFaux Normal file
View File

@@ -0,0 +1 @@
10 * + 5

1
test/expressionVrai Normal file
View File

@@ -0,0 +1 @@
12 + 4 * (5 + 10)