MOISES_QUISPE_ROJAS

Estructura Datos 2021 - TP02 P06 (Version Beta - Need to improve )

Sep 29th, 2021 (edited)
1,179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.93 KB | None | 0 0
  1. /* Estructura de Datos - Facultad de Ingenieria - Universidad Nacional de Jujuy
  2.  *
  3.  * @Autor: Equipo 4.1
  4.  */
  5.  /*      @integrantes:                  |    @Carrera:             |   @LU:
  6.    Quispe Rojas, Moises Esteban Nicolas | Ing. Informatica         | 7286
  7.  
  8. El código de un analizador de lenguaje de marcado es semejante al que se presenta en el caso ejemplo que
  9. controla la parentización simple o un ejercicio de parentización múltiple. El lenguaje de marcado más
  10. conocido es HTML - Hyper Text Markup Language; en ese lenguaje el principio de una marca se encuentra
  11. entre los símbolos “<” y “>” y el final de la marca también se encuentra entre esos símbolos sólo que
  12. después del símbolo “<” se encuentra el símbolo “/”; de este modo tenemos <H1>algún texto</H1> o
  13. <p>otro texto </p>, las “marcas” tienen significado para los programas que presentan o muestran en
  14. pantalla el texto HTML.
  15. Codifique lo que haga falta para obtener un analizador de lenguaje de marcado de hipertexto de manera
  16. que pueda procesar una cadena de caracteres en ese formato que esté incorporada en el programa y por
  17. supuesto se pueda cambiar por otra; el texto debe contener marcas anidadas.
  18. El código debe facilitar un mecanismo para incorporar nuevas marcas con facilidad.
  19. Se debe considerar el caso particular de ciertas marcas que no necesitan de la marca de cierre, como ser
  20. <br/>.
  21.  
  22.  */
  23. package Stack;
  24.  
  25. import java.util.ArrayList;
  26.  
  27. public class ED_E6 {
  28.            
  29.     public static void main(String[] args) {    
  30.         (new ED_E6()).open();
  31.     }
  32.  
  33.     public void open() {
  34.         System.out.println("Se analizara el siguiente HTML: ");
  35.         System.out.println("------------------------------");
  36.         System.out.println(html);
  37.         System.out.println("------------------------------");
  38.         if (validateFinalStartMark()) {
  39.             System.out.println("html BIEN escrito");
  40.         }else{
  41.             System.out.println("html MAL escrito");
  42.         }
  43.         System.out.println("Se obtubieron los siguientes Tags: ");
  44.         ArrayList<String> tags = getTangs();
  45.         System.out.println(tags);
  46.         // validateTags
  47.         String salida;
  48.         Stack<String> stack = new Stack<String>();
  49.         for(int i=0;i<tags.size();i++){
  50.             if(tags.get(i).charAt(1)=='/'){
  51.                 System.out.println(stack.peek()+" - "+tags.get(i));
  52.                 stack.pop();
  53.             }else{
  54.                 if(!tags.get(i).contains("/")){
  55.                     stack.push(tags.get(i));
  56.                 }
  57.             }
  58.         }
  59.         if(stack.empty()){
  60.             System.out.println("Cierre correcto");
  61.         }else{
  62.             System.out.println("ERROR Cierre incorrecto");
  63.         }
  64.     }
  65.    
  66.     public void validateTags(){
  67.        
  68.     }
  69.    
  70.     public ArrayList<String> getTangs(){
  71.         ArrayList<String> tagsObtained = new ArrayList<String>();
  72.         char letter;
  73.         int beginIndex=0, endIndex=0;        
  74.         boolean bandBegin=false,bandEnd=false;
  75.         for(int i=0;i<html.length();i++){
  76.             letter=html.charAt(i);
  77.             if(letter=='<'){
  78.                 beginIndex=i;
  79.                 bandBegin=true;
  80.             }else{
  81.                 if(letter=='>'){
  82.                     endIndex=i;
  83.                     bandEnd=true;
  84.                 }                
  85.             }
  86.             if(bandBegin && bandEnd){
  87.                 tagsObtained.add(html.substring(beginIndex, endIndex+1));
  88.                 bandBegin=false;
  89.                 bandEnd=false;
  90.             }
  91.         }
  92.         return tagsObtained;
  93.     }
  94.  
  95.     public boolean validateFinalStartMark() {
  96.         Stack<Character> stack = new Stack<Character>();
  97.         char c;        
  98.         for (int i = 0; i < html.length(); i++) {  
  99.             c = html.charAt(i);
  100.             if ((c == '<') && (html.charAt(i + 1) == '/')) {
  101.                 stack.push(c);
  102.             } else {
  103.                 if (c == '<') {
  104.                     stack.push(c);
  105.                 }
  106.             }
  107.             if (c == '>') {
  108.                 if (!stack.empty()) {
  109.                     stack.pop();
  110.                 } else {
  111.                     return false;
  112.                 }
  113.             }
  114.         }
  115.         return stack.size() == 0;
  116.     }
  117.  
  118.     // texto en HTML a analizar
  119. //    private String html
  120. //            = "<html>\n"
  121. //            + "<head>\n"
  122. //            + "<title>Mi pagina de ejemplo</title>\n"
  123. //            + "</head>\n"
  124. //            + "<body>\n"
  125. //            + "Aqui va otro contenido <br/>\n"
  126. //            + "</body>\n"
  127. //            + "</html>";
  128.    
  129.     private String html
  130.             ="<html>\n"
  131.             + "<head>\n"
  132.             + "<title>Title of tje document</title>\n"
  133.             + "</head>\n"
  134.             + "<body>\n"
  135.             + "<h1>This is a heading</h1>\n"
  136.             + "<p>This if a <br/> paragraph.</p>\n"
  137.             + "</body>\n"
  138.             + "</html>";
  139.  
  140. }
  141.  
  142.  
Add Comment
Please, Sign In to add comment