Subido por Daniel Almeida

2.4

Anuncio
Ejercicio 2.4.1: Construya analizadores sintácticos de descenso recursivo, empezando con
las siguientes gramáticas:
a. 𝑺 → +𝑺𝑺 | −𝑺𝑺 | 𝒂
PRIMERO(S) = {+, −, a}
void S( ) {
switch (preanalisis) {
case +:
coincidir(‘+’); S( ); S( );
break;
case −:
coincidir(‘−’); S( ); S( );
break;
case a:
coincidir(‘a’);
break;
default:
reportar(“error de sintaxis”);
}
}
void coincidir(terminal t) {
if (preanalisis == t) preanalisis = siguienteTerminal;
else
reportar(“error de sintaxis”);
}
b. 𝑺 → 𝑺 (𝑺) 𝑺 | 𝝐
PRIMERO(S) = { ( }
void S( ) {
if (preanalisis==‘(‘ ){
coincidir( ‘(‘ ); S( ); coincidir( ‘)’ ); S( );
}
}
void coincidir(terminal t) {
if (preanalisis == t) preanalisis = siguienteTerminal;
else
reportar(“error de sintaxis”);
}
c. 𝑺 → 𝟎 𝑺 𝟏 | 𝟎 𝟏
PRIMERO(S) = { 0 }
void S( ) {
switch (preanalisis) {
case 0:
coincidir(‘0’); S( ); coincidir(‘1’);
break;
case 1:
break;
default:
reportar(“error de sintaxis”);
}
}
void coincidir(terminal t) {
if (preanalisis == t) preanalisis = siguienteTerminal;
else
reportar(“error de sintaxis”);
}
Ejercicio propuesto en clase, página 65
Cadena for ( expropc ; expropc ; expropc ) instr
Iteración
0
1
2
3
4
5
6
7
8
9
10
11
Resultado
instr( )
case for
coincidir(for)
coincidir( ‘(‘ )
expropc( )
coincidir( ‘;‘ )
expropc( )
coincidir( ‘;‘ )
expropc( )
coincidir( ‘)‘ )
instr( )
break
Descargar