You are on page 1of 3

Prctica #4

Construye una aplicacin windows que realice un anlisis lxico que reconozca los
tokens: delimitadores, identificadores, palabras reservadas, nmeros, operadores
aritmticos, relacionales, lgicos, de asignacin, de incremento, de decremento, constante
cadena, constante carcter, terminador de instruccin, parntesis circulares,
rectangulares, la coma.
-------------------------------------------------
Agrega a tu aplicacin las consideraciones hechas en clase.
-------------------------------------------------
Cambia el tipo de retorno del mtodo Analiza() de manera que se detenga el anlisis
lxico cuando se encuentre un primer error. Visualiza que existe un lexical error cuando
suceda lo anterior.



//Mtodo Analiza
public bool Analiza(string texto)
{
bool recAuto;
int noAuto;
while (_i < texto.Length)
{
recAuto = false;
noAuto = 0;
for (; noAuto < TOKREC && !recAuto; )
if (oAFD.Reconoce(texto, _iniToken, ref _i, noAuto))
recAuto = true;
else
noAuto++;
if (recAuto)
{
_lexema = texto.Substring(_iniToken, _i - _iniToken);
switch (noAuto)
{
//-------------- Automata delim--------------
case 0:// _tokens[_noTokens] = "Delim";
break;
//-------------- Automata id--------------
case 1:
if (PalRes())
_tokens[_noTokens] = "Id";
else
_tokens[_noTokens] = "PalRes";
break;
//-------------- Automata caracter--------------
case 2: _tokens[_noTokens] = "Char";
break;
//-------------- Automata cadena--------------
case 3:
if (Escadena() == true)
_tokens[_noTokens] = "String";
else
_tokens[_noTokens] = "String Null";
break;
//-------------- Automata incre--------------
case 4: _tokens[_noTokens] = "OpIncr";
break;
//-------------- Automata decre--------------
case 5: _tokens[_noTokens] = "OpDecr";
break;
//-------------- Automata notC1--------------
case 6: _tokens[_noTokens] = "Num";
break;
//-------------- Automata notC2--------------
case 7: _tokens[_noTokens] = "Num";
break;
//-------------- Automata notC3--------------
case 8: _tokens[_noTokens] = "Num";
break;
//-------------- Automata real1--------------
case 9: _tokens[_noTokens] = "Num";
break;
//-------------- Automata Real2--------------
case 10: _tokens[_noTokens] = "Num";
break;
//-------------- Automata Real3--------------
case 11: _tokens[_noTokens] = "Num";
break;
//-------------- Automata entero--------------
case 12: _tokens[_noTokens] = "Num";
break;
//-------------- Automata terminst--------------
case 13: _tokens[_noTokens] = "terminst";
break;
//-------------- Automata opRE2--------------
case 14: _tokens[_noTokens] = "OpRel";
break;
//-------------- Automata opRE1--------------
case 15: _tokens[_noTokens] = "OpRel";
break;
//-------------- Automata opasig--------------
case 16: _tokens[_noTokens] = "OpAsig";
break;
//-------------- Automata oparit--------------
case 17: _tokens[_noTokens] = "OpArit";
break;
//-------------- Automata oplogico--------------
case 18: _tokens[_noTokens] = "OpLog";
break;
//-------------- Automata parCir--------------
case 19: _tokens[_noTokens] = "ParCir";
break;
//-------------- Automata parRect--------------
case 20: _tokens[_noTokens] = "ParRect";
break;
//-------------- Automata coma--------------
case 21: _tokens[_noTokens] = "Coma";
break;
}
if (noAuto != 0)
{
_lexemas[_noTokens++] = _lexema;
}
}
else
{
_i++;
return true;
}
_iniToken = _i;
}
return false;
}





//Botn Analiza
private void button1_Click(object sender, EventArgs e)
{
AnaLex.Inicia();
if (AnaLex.Analiza(textBox1.Text))
{
MessageBox.Show("Error! Introduzca carcteres vlidos");
}
else
{
dataGridView1.Rows.Clear();
if (AnaLex.NoTokens == 0)
MessageBox.Show("Error! No hay tokens conocidos...");
else
{
dataGridView1.Rows.Add(AnaLex.NoTokens);
for (int i = 0; i < AnaLex.NoTokens; i++)
{
dataGridView1[0, i].Value = AnaLex.Tokens[i];
dataGridView1[1, i].Value = AnaLex.Lexemas[i];
}
}
}
}








Sanjuana Gpe. Dimas Lozano 11130510