Ambigüedad colgante

Los compiladores e intérpretes usan la gramática para construir la estructura de datos para procesar los programas. Entonces, idealmente, un programa debería tener un árbol de derivación. Un árbol de análisis o un árbol de derivación es una representación gráfica que muestra cómo se derivan strings de la gramática utilizando reglas de producción. Pero existen algunas strings que son ambiguas. 

Se dice que una gramática es ambigua si existe más de una derivación más a la izquierda o más de una derivación más a la derecha o más de un árbol de análisis sintáctico para una string de entrada. Una gramática o string ambigua puede tener múltiples significados. La ambigüedad a menudo se trata como un error gramatical, en los lenguajes de programación, esto es en su mayoría no intencionado. 

Ambigüedad pendiente

El problema pendiente del else en la ambigüedad sintáctica. Ocurre cuando usamos nested if . Cuando hay varias declaraciones «if» , la parte «else» no tiene una visión clara con qué » if » debe combinarse. 

Por ejemplo:

if (condition) {
}
if (condition 1) {
}
 if (condition 2) {
}
   else
   {
       }

En el ejemplo anterior, hay múltiples » si» con múltiples condiciones y aquí queremos emparejar el si más externo con la parte más. Pero la parte else no obtiene una visión clara con qué condición » si» debe emparejarse. Esto conduce a resultados inadecuados en la programación. 

El problema de colgar-otra cosa:

Colgar más puede conducir a problemas serios. Puede dar lugar a interpretaciones erróneas por parte del compilador y, en última instancia, a resultados erróneos. 

Por ejemplo:

Initialize k=0 and o=0
if(ch>=3) 
if(ch<=10) 
k++;
else
o++;

En este caso, no sabemos cuándo se incrementará la variable “ o ”. La primera condición » si » podría no cumplirse o la segunda condición » si » podría no cumplirse. Incluso la primera condición » si » se cumple, la segunda condición » si» puede fallar, lo que puede conducir a la ejecución de la parte » si no» . Por lo tanto, conduce a resultados erróneos. 

Para resolver el problema, los lenguajes de programación como C, C++, Java combinan la parte «si no» con la declaración » si» más interna  . Pero a veces queremos que la declaración » si» más externa  se combine con la parte » si no»

Resolviendo el problema de colgar-else

La primera forma es diseñar lenguajes de programación no ambiguos. 

En segundo lugar , podemos resolver los problemas colgantes en los lenguajes de programación mediante el uso de llaves y sangría. 

Por ejemplo:

if (condition) {
     if (condition 1) {
          if (condition 2) {}
}
}
 else {
 }

En el ejemplo anterior, usamos llaves y sangría para evitar confusiones. 

En tercer lugar , también podemos utilizar el formato “si – si no si – si no” para indicar específicamente qué “ si no” pertenece a qué “ si”

Por ejemplo :

if(condition) {
}
else if(condition-1) {
}
else if(condition-2){
}
else{
}

Publicación traducida automáticamente

Artículo escrito por jhimlic1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *