Red de conocimiento informático - Conocimiento del nombre de dominio - Se necesita con urgencia código de análisis léxico

Se necesita con urgencia código de análisis léxico

# incluir & ltiostream & gt

# incluir & ltfstream & gt

# incluir & ltstring& gt

# incluir & ltstring.h & gt

# include & ltctype.h & gt

Usar espacio de nombres std

//Definición de matriz de palabras reservadas

char* ReserveWords[35] = {

" y ", "array", "begin", "case", "const", "div", "do", "downto", "else", "end", "file",

"para", "función", "ir a", "si", "en", "etiqueta", "mod", "nil", "no", "de", "o" , "empaquetado",

"procesar", "programar", "grabar", "repetir", "establecer", "luego", "para", "escribir", "hasta" ", " variable",

"mientras", "con"

};

char flecha[] = " ->;

char enter[]= "\ r \ n";

//Leer canal

char GetChar(if stream & src)

{

char cRet

src . get(cRet);

Devolver cRet

}

// Leer espacios

char GetBC(if stream & src)

{

char cRet

src get(cRet);

mientras. (cRet == ' ')

src . get(cRet);

Devolver cRet

}

//Símbolo de palabra de concatenación

void Concat(char *str, char c)

{

tamaño _ t n = strlen(str);

str[); n++]= c;

str[n]= ' \ 0 ';

}

//Determinar si es una palabra reservada.

Valor reservado booleano (const char* str)

{

bool bRet = false

for(int I = 0; i & lt35;i++)

{

if (_stricmp(ReserveWords[i], str) == 0)

{

bRet = true

Romper;

}

}

Devolver bRet

}

//Carácter de devolución de llamada

Recuperación de carácter (ifstream y ampsrc)

{

src.seekg(-1, IOs::cur); p>

Regresar "\0";

}

//Función de análisis

Analizador de espacios (ifstream y ampsrc, ofstream y amp daylight ahorrando tiempo )

{

char ch

char strToken[1024]= " ";

ch = GetBC(src);

p>

//Juzga el estado del identificador

if (isalpha(ch))

{

mientras (es alfa(ch)| | es dígito(ch)| | ch = = ' _ ')

{

Concat(strToken, ch);

ch = GetChar(fuente);

}

ch = retract(fuente

if(retain(strToken))

dst & lt& ltstrToken & lt& ltArrow& lt& lt"Palabra reservada"& lt& ltEnter;

Otro

dst & lt& ltstrToken & lt& ltArrow& lt& lt"Identificador"& lt& ltEnter;

}

//Juzga el valor numérico

else if (isdigit(ch))

{

while (isdigit(ch))

{

Concat(strToken, ch);

ch = GetChar(src);

}

Retraer(src);

dst & lt& ltstrToken & lt& ltarrow& lt& lt"número" & lt& ltenter;

}

//Determinar la situación de la cadena

else if (ch == '\ ' ')

{

Concat(strToken, ch );

ch = GetChar(src);

Y (ch! = '\'')

{

Concat(strToken, ch);

ch = GetChar(src);

}

if (ch!= '\'')

cerr & lt& lt"Cadena demasiado larga: ¡más de 1024 bytes!"& lt& ltendl

Otros

{

Concat(strToken, ch);

dst & lt& ltstrToken & lt& ltarrow& lt& lt" String " & lt& ltEnter; p>}

}

//Filtrar comentarios

else if (ch == '{ ')

{

blanco

le (GetChar(src)!= '}')

;

}

// Juzgue todos los operadores monoculares inequívocos.

else if (ch == '+')

dst & lt& ltch & lt& ltarrow& lt& lt" Plus " & lt& ltenter;

else if ( ch == '-')

dst & lt& ltch & lt& ltarrow& lt& lt"signo menos" & lt& ltenter;

else if (ch == '* ')

dst & lt& ltch & lt& ltarrow& lt& lt"múltiple" & lt& ltenter;

else if (ch == '/')

dst & lt& ltch & lt& ltarrow& lt& lt"except"& lt& ltenter;

else if (ch == '= ')

dst & lt& ltch & lt& ltarrow& lt& lt"equal"& lt& ltenter ;

else if (ch == '[')

dst & lt& ltch & lt& ltarrow& lt& lt"corchete izquierdo" & lt& ltenter;

else if (ch == ']')

dst & lt& ltch & lt& ltarrow& lt& lt"corchete derecho "& lt& ltenter;

else if (ch == ', ')

dst & lt& ltch & lt& ltarrow& lt& lt"coma"& lt& ltenter;

else if (ch == '^')

dst & lt& ltch & lt& ltarrow& lt& lt"puntero" & lt& ltenter;

else if(ch == ';')

dst & lt& ltch & lt& ltarrow& lt& lt"punto y coma "& lt& ltenter;

else if (ch == ' (')

dst & lt& ltch & lt& ltarrow& lt& lt"corchete izquierdo" & lt& ltenter;

else if (ch == ')')

dst & lt& ltch & lt& ltarrow& lt& lt"corchete derecho"& lt& ltenter;

//Juicio

else if(ch == ' & lt ;')

{

ch = GetChar(src);

if(ch = = ' & gt;')

horario de verano & lt& lt"& lt>& lt& ltarrow& lt& lt"desigual"& lt& ltenter;

else if (ch == '= ')

dst & lt& lt"& lt= " & lt& ltArrow& lt& lt"Menor o igual a"& lt& ltEnter;

Otro

{

dst & lt& lt& lt'& lt& ltarrow& lt& lt"less"& lt& ltenter;

Retraer(src);

}

}

//Juez>y> =

si no (ch == ' >)

{

ch = GetChar( src);

if (ch == '= ')

dst & lt& lt" & gt= " & lt& ltarrow& lt& lt"mayor o igual a"& lt&

ltEnter;

Otro

{

dst & lt& lt& gt'& lt& ltarrow& lt& lt" Mayor " & lt& ltEnter;

Retraer (src);

}

}

//Sentencia. y..

si no (ch == ' . ')

{

ch = GetChar(src);

si (ch == ' . ')

dst & lt& lt".."& lt& ltarrow& lt& lt"bind"& lt& ltenter;

Otro

{

dst & lt& lt'.'& lt& ltarrow& lt& lt"point" & lt& ltenter;

Retraer (src);

}

}

//Juez: y:=

else if (ch == ':')

{

ch = GetChar(src);

if (ch == '= ')

dst & lt& lt":= " & lt& lt flecha<<"distribución"<<enter;

otro

{

dst<<:'<<arrow<<"dos puntos "& lt& ltEnter;

Retraer(src);

}

}

}

int main(int argc, char* argv[])

{

String strSrc

//Soporte de línea de comando

if (argc == 1)

{

cout & lt& lt" Introduzca el nombre del archivo fuente PASCAL:";

getline(cin, str RC);

}

Otros

str src = argv[1];

//Abrir archivo

ifstream src(strsrc . c _ str());

if (src.fail() )

{

cerr & lt& lt" \ a no pudo abrir \ " " & lt& ltstrSrc & lt& lt"\"!"& lt& ltendl

Devuelve 1;

}

of stream dst(" result . txt ");

//Comienza a analizar

Y (! src.eof())

Analizador (src, dst);

//Completa el trabajo

dst close(); p>src . close();

cout & lt& lt"Escribe los resultados del análisis Result.txt. "& lt& ltendl

Devuelve 0;

}