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