Bueno como siempre en la mayoria de veces nesesitamos conocer como realizar el analizardor de firerentes maneras, esta vez les mostrare uno con c++ con clases, resulta que asi es mucho mas facil su entendimiento al final agregare el grafo de como se resuelve.
Que hace el programa solo voy a explicar lo esencial:
leer una porcion de codigo escrito en c++, y indica cuantas palabras reservadas, delimitaroes, identificadores tiene.
archivo c++:
/*
podemos ver tokes sin errores de sintaxi:
void main(){int i;char c=’d’;for(i=0,i<2;i++)}
podemos ver que es sencible a mayuscula con este ejemplo:
VOID MAIN(){INT i;CHAR c='d';FOR(i=0,i<2;i++)}
esto tiene errores de sixtaxis:
int main(){int i; int x;x +=i;cout << x;if(x>=0);else cout << " "; return 0;}
*/
#include
#include
#include
using namespace std;
class LChocCac
{
public :
int i,j,k,ti,oprfl,delfl,keyfl,Litfl,cLitfl,ptfl,tfl,mxIdeni,Liti,mxIdenj,mxOpri,mxOprj,mxDeli,Erri;
int uqIdi,uqOpi,uqDei,defOpi,TamReser,cLiti;
char VerifiCador[50],mxIden[20][20],mxOpr[20][20],mxDel[20],tmpStr[50];
char MatDeliAsig[20][20],defOpr[15],defDel[15],TokenReser[20][20];
char uqOpr[20][20],uqIden[20][20],uqIdfl[20],uqOpfl[20],uqDefl[20],uqDel[20];
char Opr[20][20],invalTok[20][20],Con[20][20],Iden[20][20],
Key[20][20],inTok[20],Lit[20][20],Err[20][20],cLit[20][20];
int Opri,invToki,Coni,Ideni,Keyi,Deli,inToki;
LChocCac(char *str)
{
strcpy(VerifiCador,str);
TamReser=14;
strcpy(TokenReser[0],»int»);
strcpy(TokenReser[1],»float»);
strcpy(TokenReser[2],»double»);
strcpy(TokenReser[3],»for»);
strcpy(TokenReser[4],»if»);
strcpy(TokenReser[5],»else»);
strcpy(TokenReser[6],»while»);
strcpy(TokenReser[7],»do»);
strcpy(TokenReser[8],»return»);
strcpy(TokenReser[9],»char»);
strcpy(TokenReser[10],»break»);
strcpy(TokenReser[11],»goto»);
strcpy(TokenReser[12],»void»);
strcpy(TokenReser[13],»main»);
defOpi=18;
strcpy(MatDeliAsig[0],»+»);
strcpy(MatDeliAsig[1],»-«);
strcpy(MatDeliAsig[2],»*»);
strcpy(MatDeliAsig[3],»/»);
strcpy(MatDeliAsig[4],»%»);
strcpy(MatDeliAsig[5],»=»);
strcpy(MatDeliAsig[6],»<");
strcpy(MatDeliAsig[7],">«);
strcpy(MatDeliAsig[8],»<=");
strcpy(MatDeliAsig[9],">=»);
strcpy(MatDeliAsig[10],»==»);
strcpy(MatDeliAsig[11],»=+»);
strcpy(MatDeliAsig[12],»=-«);
strcpy(MatDeliAsig[13],»=*»);
strcpy(MatDeliAsig[14],»=/»);
strcpy(MatDeliAsig[15],»=%»);
strcpy(MatDeliAsig[16],»++»);
strcpy(MatDeliAsig[17],»–«);
strcpy(defOpr,»+-/*%=<>«);
strcpy(defDel,»;,:{}[]()»);
}
int IsMxIden(char ch)
{
return((IsIden(ch)||IsFloat(ch))?1:0);
}
int IsIden(char ch)
{
return((isalpha(ch)||ch==’_’)?1:0);
}
int IsFloat(char ch)
{
return((isdigit(ch)||ch==’.’)?1:0);
}
int IsOpr(char ch)
{
oprfl=0;
for(ti=0;ti
hola, como te va?? Excelente el código. Me lo podrías enviar a mi correo?
que tal se ve bueno el codigo pero deberias de compartirlo al final los que investigan les va bien y me serviria tu codigo para fines academicos!
por favor enviarme el codigo completo del analizador lexico
Hola en algunas lineas al parecer esta incompletas algunas expresiones como por ejemplo estas:
while(VerifiCador[i]!=”)
{
o esta :
mxIden[mxIdeni++][mxIdenj]=”;
podrias facilitarme tu cod por correo pues no lo puedo hacer funcionar
Gracias
no es fumada, es solo un pequeño analizador, espero pronto terminar uno sobre Analizador en Bibliotecas Qt y lo pondré en blog para compartirlo.
wau…q fumada d codigo…mga interesant!!!