Accueil > > > ANALYSEUR LEXICAL POUR UN COMPILATEUR ALGORITHMIQUE
ANALYSEUR LEXICAL POUR UN COMPILATEUR ALGORITHMIQUE
Information sur la source
Description
Ce programme fait une analyse lexical pour un compilateur algorithmique il détecte les erreurs lexical est toute les unités lexicales fixés au début.
Source
- #include<stdio.h>
- #include<math.h>
- #include<string.h>
- #include <conio.h>
- #include<stdlib.h>
- #include<dos.h>
- int i,j,l,x;
- char code[1000][20];
- char typ[1000];
-
-
-
-
- int tc;/////////////////////ti pour se deplacer dans la table code/////////
- int err=1;
- ///////////////////////////les fonction de l'analyseur syntaxique /////////
- void algo();
- void declaration();
- void type();
- void instruction();
- void inst();
- void instaffectation();
-
-
-
- //////////////////////////////////////////////////////////////////la fonction pour l'analyse lexical
- int f(char sy)
- {
- int s;
- if(sy >= 'a' && sy <= 'z')
- {
- s=0;
- }
- else
- {
- if(sy >= '0' && sy <= '9')
- {
- s=1;
- }
- else
- {
- if(sy=='.')
- {s =2;}
- else
- s=-1;
- }
-
- }
-
-
- return s;
- }
- /////////////////////////////////////////////////////le programme principale ///////////////////////////////////////////
- main()
- {
-
- int v,ec,ind,u; //''ind'' pour l'indice dans le tableau syntaxique
- char tc;
- v=0;
- int mat[10][10];
- mat[0][0]= 1;
- mat[0][1]= 2;
- mat[0][2]= -1;
-
- mat[1][0]= 1;
- mat[1][1]= 1;
- mat[1][2]= -1;
-
- mat[2][0]= -1;
- mat[2][1]= 2;
- mat[2][2]= 3;
-
- mat[3][0]= -1;
- mat[3][1]= 4;
- mat[3][2]= -1;
-
- mat[4][0]= -1;
-
-
-
- mat[4][1]= 4;
- mat[4][2]= -1;
-
- char cs[1000],c1[20],c2[10],c3[10];
- char p;
- char motres[][20]= {"si", "tantque","fair","fait","pour","sinon","alors","var","reel","entier","char","algorithme","debut","fin"};
- char opr[][20]= {"+","*","-","/","et","ou","non","<","<=",">",">=",":=","<>"};
- char separ[][20]={";"," "};
-
- gets(cs);
- //printf("%d",strlen(cs));
- printf("\n");
- c1[0]='#';
- strncat(cs,c1,1);
- //printf("%d",strlen(cs));
- printf("\n");
-
- ind=0;
-
- i=0;
-
- while(cs[i]!='#')
- {
- //getch();
- while((f(cs[i])==-1)&&(cs[i]!='#'))
- {
-
- if(cs [i]=='+')
- {
- printf("\n\n");
- printf("+ est un opérateur\n\n");
- typ[ind]='o';
- code[ind][0]='+';
- ind=ind+1;
- }
-
- if(cs [i]=='*')
- {
- printf("\n\n");
- printf("* est un opérateur\n\n");
- typ[ind]='o';
- code[ind][0]='*';
- ind++;
- }
-
- if(cs [i]=='/')
- {
- printf("\n\n");
- printf("/ est un opérateur\n\n");
- typ[ind]='o';
- code[ind][0]='/';
- ind++;
- }
- if(cs [i]=='-')
- {
- printf("\n\n");
- printf("- est un opérateur\n\n");
- typ[ind]='o';
- code[ind][0]='-';
- ind++;
- }
-
- if(cs [i]=='<')
- {
- if(cs [i+1]=='=')
- {
- printf("\n\n");
- printf("<= est un opérateur\n\n");
- typ[ind]='o';
- code[ind][0]='<';
- code[ind][1]='=';
- ind++;
- i++;
- }
- if(cs [i+1]=='>')
- {
- printf("\n\n");
- printf("<> est un opérateur\n\n");
- typ[ind]='o';
- code[ind][0]='<';
- code[ind][1]='>';
- ind++;
- i++;
- }
- else
- {
- printf("< est un opérateur\n\n");
- typ[ind]='o';
- code[ind][0]='<';
- ind++;
- }
- }
-
- if((cs [i]=='>'))
- {
- if(cs [i+1]=='=')
- {
- printf(">= est un opérateur\n\n");
- typ[ind]='o';
- code[ind][0]='>';
- code[ind][1]='=';
- ind++;
- i++;
- }
- else
- {
- printf("> est un opérateur\n\n");
- typ[ind]='o';
- code[ind][0]='>';
- ind++;
- }
- }
-
- if((cs [i]==':')&&(cs [i+1]=='='))
- {
- printf(":= est un opérateur\n\n");
- typ[ind]='o';
- code[ind][0]=':';
- code[ind][1]='=';
- ind++;
- i++;
- }
- if(cs [i]==';')
- {
- printf("; est un separateur\n\n");
- typ[ind]='s';
- code[ind][0]=';';
- ind++;
- }
-
-
- i++;
- }
- // getch();
- j=i;
- while((f(cs[j])!=-1))
- j++;
-
- ////////////////////////extraction de la chaine a analysé//////////////////////////
-
- //for(u=0;u<20;u++) //pour ecraser la c1
- // c1[u]=' ';
-
- l=i;
- while((l<=j)&&cs[l]!='#')
- {
- p=cs[l];
- c1[l-i]=p;
- l++;
- }
- u=0;
- c1[j-i]='#';
- while(c1[u]!='#')
- {
- code[ind][u]=c1[u];
- u++;
- }
- //ind=ind+1;
-
-
-
- //getch();
- /*printf("\n");
- printf("c1 =%s",c1);
- printf("\n\n");
- printf("code%d=",ind-2,code[ind-2]);
- printf("\n\n");
- printf("code%d =%s",ind-1,code[ind-1]);
- printf("\n");
- //printf("%s",cs);*/
-
-
-
- ////////////////// analyse de la chaine cs(i.j-1)////////////////////////////////
-
- if(c1[0]=='#')
- v=10;
-
- ////////////////////le traitement avec les tableau /////////////////////////////
-
- if (v==0)
- {
- x=0;
- while(c1[x]!='#')
- {
- x++;
- }
- // printf("%d",x);
- for(l=0;l<=13;l++)
- {
- if(strlen(motres[l])==x)
- {
- if(strncmp(c1,motres[l],x)==0) //strlen(motres[l])
- {v=1;}
- }
- }
- //printf("%d",v);
-
- x=0;
- while(c1[x]!='#')
- {
- x++;
- }
- if(v==0)
- {
- for(l=0;l<=11;l++)
- { if(strlen(opr[l])==x)
- {
- if(strncmp(c1,opr[l],strlen(opr[l]))==0)
- v=2;
- }
- }
- }
-
- }
- ///////////////////////////////le traitement avec l'autoamte//////////////////
- if(v==0)
- {
-
-
-
- l=0;
- tc=c1 [l];
- ec=0;
-
- while((ec!=-1)&&(tc!='#'))
- {
- l++;
- ec=mat[ec][f(tc)];
- tc=c1 [l];
- }
-
- if(ec==1)
- {
- printf("\n");
- v=3;
- //printf("c'est un identificateur");
- }
- else
- {
- if(ec==2)
- {
- printf("\n");
- v=4;
- //printf("c'ent une constante entière ");
- }
- else
- {
- if(ec==4)
- {
- printf("\n");
- v=5;
- // printf("c'ent une constante réelle ");
- }
- else
- {
- printf("\n");
- v=6;
- // printf("erreur lexicale");
- }
-
- }
- }
- }
-
- //printf("\n");printf("\n");printf("\n");printf("\n");
- //printf("j=%d",j);
- //printf("\n");printf("\n");
- //printf("cs[j]=%c",cs[j]);
- printf("\n");
- printf("\n");
- l=0;
- while(c1[l]!='#')
- {
- printf("%c",c1[l]);
- l++;
- //getch();
- }
- printf("\n");
- if(v==1)
- {
- printf("c'est un mot réservé");
- typ[ind]='m';
- ind++;
- printf("\n");
- }
- if(v==2)
- {
- printf("c'est un operateur");
- typ[ind]='o';
- ind++;
- printf("\n");
- }
- if(v==3)
- {
- printf("c'est un identificateur");
- typ[ind]='i';
- ind++;
- printf("\n");
- }
- if(v==4)
- {
- printf("c'ent une constante entière ");
- typ[ind]='e';
- ind++;
- printf("\n");
- }
- if(v==5)
- {
- printf("c'ent une constante réelle ");
- typ[ind]='r';
- ind++;
- printf("\n");
- }
- if(v==6)
- {
- printf("erreur lexicale");
- typ[ind]='#';
- ind++;
- printf("\n");
- }
- v=0;
-
- i=j;
- }
-
- /*** le tableau typ contien les types des unité lexicale assosier au meme
- emlasement que dans la table code:
-
- e ----> entier
- r----->reelle
- i----->identificateur
- m----->mot réservé
- o----->operateur
- s----->separateur
- #----->erreur lexicale
-
- ***/
- ///////////////////////////fin de l'analyse lexical/////////////////////////////////////////////////////////////////////
- printf("\n\n");
- printf("les unités lexicales a traité dans l'analyseur syntaxique");
- printf("\n\n");
- //printf("%s",code [0]);
- for(u=0;u<ind;u++)
- {
- printf(" %s",code[u]);
- printf("\n");
-
- }
-
- ///////////////////////////////////debut de l'analyse syntaxique//////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
- getch();
-
-
- }
#include<stdio.h>
#include<math.h>
#include<string.h>
#include <conio.h>
#include<stdlib.h>
#include<dos.h>
int i,j,l,x;
char code[1000][20];
char typ[1000];
int tc;/////////////////////ti pour se deplacer dans la table code/////////
int err=1;
///////////////////////////les fonction de l'analyseur syntaxique /////////
void algo();
void declaration();
void type();
void instruction();
void inst();
void instaffectation();
//////////////////////////////////////////////////////////////////la fonction pour l'analyse lexical
int f(char sy)
{
int s;
if(sy >= 'a' && sy <= 'z')
{
s=0;
}
else
{
if(sy >= '0' && sy <= '9')
{
s=1;
}
else
{
if(sy=='.')
{s =2;}
else
s=-1;
}
}
return s;
}
/////////////////////////////////////////////////////le programme principale ///////////////////////////////////////////
main()
{
int v,ec,ind,u; //''ind'' pour l'indice dans le tableau syntaxique
char tc;
v=0;
int mat[10][10];
mat[0][0]= 1;
mat[0][1]= 2;
mat[0][2]= -1;
mat[1][0]= 1;
mat[1][1]= 1;
mat[1][2]= -1;
mat[2][0]= -1;
mat[2][1]= 2;
mat[2][2]= 3;
mat[3][0]= -1;
mat[3][1]= 4;
mat[3][2]= -1;
mat[4][0]= -1;
mat[4][1]= 4;
mat[4][2]= -1;
char cs[1000],c1[20],c2[10],c3[10];
char p;
char motres[][20]= {"si", "tantque","fair","fait","pour","sinon","alors","var","reel","entier","char","algorithme","debut","fin"};
char opr[][20]= {"+","*","-","/","et","ou","non","<","<=",">",">=",":=","<>"};
char separ[][20]={";"," "};
gets(cs);
//printf("%d",strlen(cs));
printf("\n");
c1[0]='#';
strncat(cs,c1,1);
//printf("%d",strlen(cs));
printf("\n");
ind=0;
i=0;
while(cs[i]!='#')
{
//getch();
while((f(cs[i])==-1)&&(cs[i]!='#'))
{
if(cs [i]=='+')
{
printf("\n\n");
printf("+ est un opérateur\n\n");
typ[ind]='o';
code[ind][0]='+';
ind=ind+1;
}
if(cs [i]=='*')
{
printf("\n\n");
printf("* est un opérateur\n\n");
typ[ind]='o';
code[ind][0]='*';
ind++;
}
if(cs [i]=='/')
{
printf("\n\n");
printf("/ est un opérateur\n\n");
typ[ind]='o';
code[ind][0]='/';
ind++;
}
if(cs [i]=='-')
{
printf("\n\n");
printf("- est un opérateur\n\n");
typ[ind]='o';
code[ind][0]='-';
ind++;
}
if(cs [i]=='<')
{
if(cs [i+1]=='=')
{
printf("\n\n");
printf("<= est un opérateur\n\n");
typ[ind]='o';
code[ind][0]='<';
code[ind][1]='=';
ind++;
i++;
}
if(cs [i+1]=='>')
{
printf("\n\n");
printf("<> est un opérateur\n\n");
typ[ind]='o';
code[ind][0]='<';
code[ind][1]='>';
ind++;
i++;
}
else
{
printf("< est un opérateur\n\n");
typ[ind]='o';
code[ind][0]='<';
ind++;
}
}
if((cs [i]=='>'))
{
if(cs [i+1]=='=')
{
printf(">= est un opérateur\n\n");
typ[ind]='o';
code[ind][0]='>';
code[ind][1]='=';
ind++;
i++;
}
else
{
printf("> est un opérateur\n\n");
typ[ind]='o';
code[ind][0]='>';
ind++;
}
}
if((cs [i]==':')&&(cs [i+1]=='='))
{
printf(":= est un opérateur\n\n");
typ[ind]='o';
code[ind][0]=':';
code[ind][1]='=';
ind++;
i++;
}
if(cs [i]==';')
{
printf("; est un separateur\n\n");
typ[ind]='s';
code[ind][0]=';';
ind++;
}
i++;
}
// getch();
j=i;
while((f(cs[j])!=-1))
j++;
////////////////////////extraction de la chaine a analysé//////////////////////////
//for(u=0;u<20;u++) //pour ecraser la c1
// c1[u]=' ';
l=i;
while((l<=j)&&cs[l]!='#')
{
p=cs[l];
c1[l-i]=p;
l++;
}
u=0;
c1[j-i]='#';
while(c1[u]!='#')
{
code[ind][u]=c1[u];
u++;
}
//ind=ind+1;
//getch();
/*printf("\n");
printf("c1 =%s",c1);
printf("\n\n");
printf("code%d=",ind-2,code[ind-2]);
printf("\n\n");
printf("code%d =%s",ind-1,code[ind-1]);
printf("\n");
//printf("%s",cs);*/
////////////////// analyse de la chaine cs(i.j-1)////////////////////////////////
if(c1[0]=='#')
v=10;
////////////////////le traitement avec les tableau /////////////////////////////
if (v==0)
{
x=0;
while(c1[x]!='#')
{
x++;
}
// printf("%d",x);
for(l=0;l<=13;l++)
{
if(strlen(motres[l])==x)
{
if(strncmp(c1,motres[l],x)==0) //strlen(motres[l])
{v=1;}
}
}
//printf("%d",v);
x=0;
while(c1[x]!='#')
{
x++;
}
if(v==0)
{
for(l=0;l<=11;l++)
{ if(strlen(opr[l])==x)
{
if(strncmp(c1,opr[l],strlen(opr[l]))==0)
v=2;
}
}
}
}
///////////////////////////////le traitement avec l'autoamte//////////////////
if(v==0)
{
l=0;
tc=c1 [l];
ec=0;
while((ec!=-1)&&(tc!='#'))
{
l++;
ec=mat[ec][f(tc)];
tc=c1 [l];
}
if(ec==1)
{
printf("\n");
v=3;
//printf("c'est un identificateur");
}
else
{
if(ec==2)
{
printf("\n");
v=4;
//printf("c'ent une constante entière ");
}
else
{
if(ec==4)
{
printf("\n");
v=5;
// printf("c'ent une constante réelle ");
}
else
{
printf("\n");
v=6;
// printf("erreur lexicale");
}
}
}
}
//printf("\n");printf("\n");printf("\n");printf("\n");
//printf("j=%d",j);
//printf("\n");printf("\n");
//printf("cs[j]=%c",cs[j]);
printf("\n");
printf("\n");
l=0;
while(c1[l]!='#')
{
printf("%c",c1[l]);
l++;
//getch();
}
printf("\n");
if(v==1)
{
printf("c'est un mot réservé");
typ[ind]='m';
ind++;
printf("\n");
}
if(v==2)
{
printf("c'est un operateur");
typ[ind]='o';
ind++;
printf("\n");
}
if(v==3)
{
printf("c'est un identificateur");
typ[ind]='i';
ind++;
printf("\n");
}
if(v==4)
{
printf("c'ent une constante entière ");
typ[ind]='e';
ind++;
printf("\n");
}
if(v==5)
{
printf("c'ent une constante réelle ");
typ[ind]='r';
ind++;
printf("\n");
}
if(v==6)
{
printf("erreur lexicale");
typ[ind]='#';
ind++;
printf("\n");
}
v=0;
i=j;
}
/*** le tableau typ contien les types des unité lexicale assosier au meme
emlasement que dans la table code:
e ----> entier
r----->reelle
i----->identificateur
m----->mot réservé
o----->operateur
s----->separateur
#----->erreur lexicale
***/
///////////////////////////fin de l'analyse lexical/////////////////////////////////////////////////////////////////////
printf("\n\n");
printf("les unités lexicales a traité dans l'analyseur syntaxique");
printf("\n\n");
//printf("%s",code [0]);
for(u=0;u<ind;u++)
{
printf(" %s",code[u]);
printf("\n");
}
///////////////////////////////////debut de l'analyse syntaxique//////////////////////////////////
getch();
}
Conclusion
Ce programme donne une idée général sur les technique algorithmique traduit en langage c
Historique
- 24 juillet 2008 22:04:28 :
- lexical pas syntaxique exusé
- 24 juillet 2008 22:12:33 :
- modification d'un commentaire
- 24 juillet 2008 22:25:32 :
- le est cours de développement pour prévoir une éventuelle lecture en fichier.algo
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
COMPILATION AVEC VISUAL C++ [ par neuro ]
SAlut,g des problemes ed compilation avec vc++ des que je vx compiler en c ou en c++.....ais je oublie des options,...Merci de me rendre moins aggress
compilation d'apache 1.3.xx [ par Sephir ]
Je suis à la recherche de quelqu'un qui pourrait m'expliquer comment compiler Apache 1.3.XX, j'utilise Visual Studio 6 entrepriseJe ne parviens pas à
Pb de compilation [ par Cyberboy2054 ]
Salut J' ai un piti problème de compilation en C++Quand j' ai terminé mon programme (un aplication console)je teste mon programme depuis le compilateu
erreur de compilation avec l'install shield c++ [ par tsii ]
une fois fini mon logiciel de programmation qui permet l'envoi d'email et autre fonctionpour mettre les executable sur disquettes en utilisant l'insta
Compilation avec G++ [ par merlin ]
voila je bosse sous beos linux bref sous unix et n'arrive pas a creer un fichier binaire mais pas elf ni a.out un binaire ( code machine ) y a t'il kk
prob de compilation [ par jacky66 ]
salutje debute dans la prog c++pour mon 1 er prog quand je compile il me sort un message fatal error C1083: Cannot open include file: 'idoctidm.h': No
Problème de compilation de librairie... [ par ditch ]
je me retrouve face à un énorme problème, en fait je dois compiler les librairies de imageMagick pour implémenter les fonctions de celles-ci dans une
Creer un objet apres compilation en Borland c++ BUilder [ par lnvincible ]
J'aimerais savoir la commande qui permet de creer un objet apres la compilation c'est a dire on clique sur un bouton et y'en a un deuxieme qui se cree
compilation sous g++ avec des fichier module [ par bidules ]
bonjour,voila j'ai un projet a realiser.Ce projet contiendra une class dans un fichier .h et les fonctions menbres dans un fichier cpp (le truc normal
Thread [ par Vince007 ]
Bonjour, je vous laisse se message pour savoir si qqu'un qui connait bien les thread et les sémaphores sous Linux pourrait m'indiquer la méthode de co
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : WIN APIRE : WIN API par racpp
Cliquez pour lire la suite par racpp WIN APIWIN API par omarino_007
Cliquez pour lire la suite par omarino_007
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|