Analizador Sintáctico
Enviado por • 27 de Noviembre de 2013 • 9.282 Palabras (38 Páginas) • 607 Visitas
Programación de Sistemas
Grupo: 5551
“Analizador Sintáctico”
Integrante:
Islas López Sandy Paulina
Profesora Xóchitl Raquel Wong Cohen
Periodo 2013-2
Introducción al trabajo
En este documento se conocerán las características y principales funciones de un analizador sintáctico.
Analizaremos e interpretaremos como un compilador realiza el análisis sintáctico de un programa.
Índice
Introducción al trabajo 2
Introducción al tema 3
Análisis sintáctico 3
Desarrollo 5
Código 5
Captura de pantallas 12
Conclusiones Individuales 13
Arteaga Islas Esmeralda 13
Bravo Aguilar Josué Benjamín 13
García Contreras Eunice Sinaí 13
Islas López Sandy Paulina 13
Martínez Diosdado Carlos Adolfo 13
Conclusiones General 14
Referencias. 14
Introducción al tema
Todo lenguaje de programación tiene reglas que describen la estructura sintáctica de programas bien formados. En Pascal, por ejemplo, un programa se compone de bloques, un bloque de proposiciones, una proposición de expresiones, una expresión de componentes léxicos, y así sucesivamente. Se puede describir la sintaxis de las construcciones de los lenguajes de programación por medio de gramáticas de contexto libre o notación BNF ( Backus-Naur Form).
Las gramáticas ofrecen ventajas significativas a los diseñadores de lenguajes y a los desarrolladores de compiladores.
Las gramáticas son especificaciones sintácticas y precisas de lenguajes de programación.
A partir de una gramática se puede generar automáticamente un analizador sintáctico.
El proceso de construcción puede llevar a descubrir ambigüedades.
Una gramática proporciona una estructura a un lenguaje de programación, siendo más fácil generar código y detectar errores.
Es más fácil ampliar/modificar el lenguaje si está descrito con una gramática.
La mayor parte de este tema está dedicada a los métodos de análisis sintáctico de uso típico en compiladores. Primero se introducen los conceptos básicos, después las técnicas adecuadas para la aplicación manual. Además como los programas pueden contener errores sintácticos, los métodos de análisis sintáctico se pueden ampliar para que se recuperen de los errores sintácticos más frecuentes.
Análisis sintáctico
El análisis sintáctico es un análisis a nivel de sentencias, y es mucho más complejo que el análisis léxico. Su función es tomar el programa fuente en forma de tokens, que recibe del analizador léxico, y determinar la estructura de las sentencias del programa. Este proceso es similar a determinar la estructura de una frase en Castellano, determinando quien es el sujeto, predicado, el verbo y los complementos.
El análisis sintáctico agrupa a los tokens en clases sintácticas (denominadas no terminales en la definición de la gramática), tales como expresiones, procedimientos, etc.
El analizador sintáctico o parser obtiene un árbol sintáctico (u otra estructura equivalente) en la cual las hojas son los tokens, y cualquier nodo que no sea una hoja, representa un tipo de clase sintáctica (operaciones). Por ejemplo el análisis sintáctico de la siguiente expresión:
(A+B)*(C+D)
Con las reglas de la gramática que se presenta a continuación dará lugar al árbol sintáctico de la figura 3:
o <expresión> ::= <término> <más términos>
o <más términos>::= +<término> <más términos>| - <término> <más términos> | <vacío>
o <término> ::= <factor> <más factores>
o <más factores>::= * <factor> <más factores>|/ <factor> <más factores> | <vacío>
o <factor> ::= ( <expresión> ) | <variable> | <constante>
La estructura de la gramática anterior refleja la prioridad de los operadores, así los operadores “+” y “-” tienen la prioridad más baja, mientras que “*” y “/” tienen una prioridad superior. Se evaluaran en primer lugar las constantes, variables y expresiones entre paréntesis.
Los árboles sintácticos se construyen con un conjunto de reglas conocidas como gramática, y que definen con total precisión el lenguaje fuente.
Al proceso de reconocer la estructura del lenguaje fuente se conoce con el nombre de análisis sintáctico (parsing). Hay distintas clases de analizadores o reconocedores sintácticos, pero en general se clasifican en 2 grandes grupos: A.S.
Ascendentes y A.S. Descendentes.
La principal tarea del analizador sintáctico no es comprobar que la sintaxis del programa fuente sea correcta, sino construir una representación interna de ese programa y en el caso en que sea un programa incorrecto, dar un mensaje de error.
Para ello, el analizador sintáctico (A.S.) comprueba que el orden en que el analizador léxico le va entregando los tokens es válido. Si esto es así significará que la sucesión de símbolos que representan dichos tokens puede ser generada por la gramática correspondiente al lenguaje del código fuente.
Desarrollo
Código
package cadenas;
import javax.swing.JOptionPane;
public class Main {
public static void main(String[] args) {
}
}
-----------------------------------------------------------------------------------------------------------------------------------
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import javax.swing.*;
import javax.swing.JOptionPane;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;
public class Cadenas extends javax.swing.JFrame {
String cadena=""; /*Declaracion de cadenas*/
String cadenas="";/*Declaracion de cadenas*/
public Cadenas() {/*declaracion de la clase*/
initComponents();
pontab();
}
Object[] rows = new Object[2];/* creacion de
...