Un simple compilateur pascal(analyse lexical?
Résolu/Fermé
A voir également:
- Un simple compilateur pascal(analyse lexical?
- Turbo pascal download - Télécharger - Édition & Programmation
- Codeblocks avec compilateur - Télécharger - Langages
- Simple ocr - Télécharger - Bureautique
- My pascal - Télécharger - Édition & Programmation
- Iphone 14 simple - Guide
9 réponses
kab_mina
Messages postés
1
Date d'inscription
dimanche 20 décembre 2009
Statut
Membre
Dernière intervention
20 décembre 2009
7
20 déc. 2009 à 21:06
20 déc. 2009 à 21:06
comment construire un compilateur pascal en langage 'c'? svp
je vous donne un debut , pour votre compilateur pascal p
int alpha(char c)
{
if(((c>='a') &&(c<='z'))||((c>='A')&&(c<='Z')))
return(1);
else
return(0);
}
/***************************est_num******************************************/
int num(char c)
{
if((c>='0')&&(c<='9'))
return(1);
else
return(0);
}
/*****************************init_motcle***********************************/
void initmc()
{
Motcle[0]="program";
Motcle[1]="procedure";
Motcle[2]="begin";
Motcle[3]="end";
Motcle[4]= "type";
Motcle[5]="var";
Motcle[6]="char";
Motcle[7]="integer";
Motcle[8]="while";
Motcle[9]="do";
Motcle[10]="if";
Motcle[11]="then";
Motcle[12]="else";
Motcle[13]="read";
Motcle[14]="readln";
Motcle[15]="write";
Motcle[16]="writeln";
}
/*****************************exist*******************************/
int exist()
{
TABLE **Q;
if((*T)==NULL)
{
(*T)=(TABLE*) malloc(sizeof(TABLE));
L=(TABLE*)malloc(sizeof(TABLE));
L->entree=cdid;
L->next=NULL;
L->est_dcl=0;
strcpy(L->lexeme,motlu);
(*T)=L;
symbole->est_declare=0;
return(0);
}
else
{
(*Q)=(*T);
while((*Q)!=NULL&&(strcmp(motlu,(*Q)->lexeme)))
{
printf("\n %s",(*Q)->lexeme);
(*Q)=(*Q)->next;
}
if ((*Q)==NULL)
{
cdid++;
L=(TABLE*)malloc(sizeof(TABLE));
L->entree=cdid;
strcpy(L->lexeme,motlu);
L->next=(*T);
L->est_dcl=0;
(*T)=L;
symbole->est_declare=0;
return(cdid);
}
else
{
return((*Q)->entree);
}
}
}
int alpha(char c)
{
if(((c>='a') &&(c<='z'))||((c>='A')&&(c<='Z')))
return(1);
else
return(0);
}
/***************************est_num******************************************/
int num(char c)
{
if((c>='0')&&(c<='9'))
return(1);
else
return(0);
}
/*****************************init_motcle***********************************/
void initmc()
{
Motcle[0]="program";
Motcle[1]="procedure";
Motcle[2]="begin";
Motcle[3]="end";
Motcle[4]= "type";
Motcle[5]="var";
Motcle[6]="char";
Motcle[7]="integer";
Motcle[8]="while";
Motcle[9]="do";
Motcle[10]="if";
Motcle[11]="then";
Motcle[12]="else";
Motcle[13]="read";
Motcle[14]="readln";
Motcle[15]="write";
Motcle[16]="writeln";
}
/*****************************exist*******************************/
int exist()
{
TABLE **Q;
if((*T)==NULL)
{
(*T)=(TABLE*) malloc(sizeof(TABLE));
L=(TABLE*)malloc(sizeof(TABLE));
L->entree=cdid;
L->next=NULL;
L->est_dcl=0;
strcpy(L->lexeme,motlu);
(*T)=L;
symbole->est_declare=0;
return(0);
}
else
{
(*Q)=(*T);
while((*Q)!=NULL&&(strcmp(motlu,(*Q)->lexeme)))
{
printf("\n %s",(*Q)->lexeme);
(*Q)=(*Q)->next;
}
if ((*Q)==NULL)
{
cdid++;
L=(TABLE*)malloc(sizeof(TABLE));
L->entree=cdid;
strcpy(L->lexeme,motlu);
L->next=(*T);
L->est_dcl=0;
(*T)=L;
symbole->est_declare=0;
return(cdid);
}
else
{
return((*Q)->entree);
}
}
}
en étant sur que tin automate est fini et déterministe ,tu n'as qu'a
lire une lettre de ton texte d'entrée
se diriger vers l'etat correspodant (utilises une variable etat)
une fois le lexeme reconnu , mets le dans ta table de symboles
ton automate doit reconnaitre le lexeme le plus long
apparement tu n'auras pas de problème , les mots sont tous différents les uns des autres
PROGRAM , BEGIN ,VAR ,INTEGER , WRITE ,READ ,IF ,THEN ,FOR
sinon
Google est ton amis il y a des cours assez intéressents sur le net sachant que l'analyse lexicale est la plus facile
il existe un livre que tout le monde cite comme étant une sorte de bible de compilation compilers:principles,techniques and tools
il peut t'aider (en anglais)
http://rapidshare.com/files/58730499/0321486811.zip
lire une lettre de ton texte d'entrée
se diriger vers l'etat correspodant (utilises une variable etat)
une fois le lexeme reconnu , mets le dans ta table de symboles
ton automate doit reconnaitre le lexeme le plus long
apparement tu n'auras pas de problème , les mots sont tous différents les uns des autres
PROGRAM , BEGIN ,VAR ,INTEGER , WRITE ,READ ,IF ,THEN ,FOR
sinon
Google est ton amis il y a des cours assez intéressents sur le net sachant que l'analyse lexicale est la plus facile
il existe un livre que tout le monde cite comme étant une sorte de bible de compilation compilers:principles,techniques and tools
il peut t'aider (en anglais)
http://rapidshare.com/files/58730499/0321486811.zip
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ecrire un programme qui permet de lire une chaine ch puis changer et afficher ch en mettant le premier mot de ch à la fin
ex :pour ch"troisiéme scienses informatique
ex :pour ch"troisiéme scienses informatique
donnez un compilateur lexical et synyaxique en pascal
bonjour
dans la partie d'analyse syntaxique j'ai réussi a trouver la grammaire correspondante a ce mini compilateur pascal et j'ai fais une analyse selon la methode acsendante SLR mais j'arrive pas a implémenter la table d'analyse ( j'ai aucune idée sur ça )
veillez m'aidez svp
dans la partie d'analyse syntaxique j'ai réussi a trouver la grammaire correspondante a ce mini compilateur pascal et j'ai fais une analyse selon la methode acsendante SLR mais j'arrive pas a implémenter la table d'analyse ( j'ai aucune idée sur ça )
veillez m'aidez svp
bjr, pourriez vs maider!!
g un probleme avec ecrire
ds ecrire j pe mettre nimorte koi com j pe metrre aussi des %d %f %e mais le nombre de % doit etre le mem ke des var exemple
ecrire(" bonjour lfhnjkrfnjke %d jefbj %f kjbj%e kjbfj",var1,var2,var3);
comment le resoudre lexicalement et syntaxiquement.
merci mon mail est naida03@hotmail.com
merci bien
g un probleme avec ecrire
ds ecrire j pe mettre nimorte koi com j pe metrre aussi des %d %f %e mais le nombre de % doit etre le mem ke des var exemple
ecrire(" bonjour lfhnjkrfnjke %d jefbj %f kjbj%e kjbfj",var1,var2,var3);
comment le resoudre lexicalement et syntaxiquement.
merci mon mail est naida03@hotmail.com
merci bien
voici un petit analyseur lexical pascal , il est ecrit en langage c
http://ch-zaki.blogspot.com/2009/02/analyseur-lexical-pascal-en-c.html
http://ch-zaki.blogspot.com/2009/02/analyseur-lexical-pascal-en-c.html
22 janv. 2009 à 15:10