Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Analizador semántico
Integrantes de equipo:
Semestre: Sexto
Página|2
INDICE
Índice de figuras………………………….…………………………………..………... 3
Introducción…………………………...………………………………………………...4
Analizador léxico……………………………………………………………..………... 5
Funciones ……………………………………………………………..………………..6
Análisis sintácticos……………………………………………………………..……... 7
Funcionamiento……………………………………………………………..………… 7
Tipos de analizadores……………………………………………………………..……8
Aplicaciones……………………………………………………………..……………. 9
Requisitos de software……………………………………………………………...… 14
Requisitos de hardware…………………………………………………………….… 15
Código fuente……………………………………………………………..…….……. 16
Conclusión……………………………………………………………..…………..…. 63
Bibliografías…………………………………………………………..…………..… 64
Página|3
INDICE DE FIGURA
Desarrollo de la práctica
INTRODUCCIÓN
resultado, estos debes ser correcto ya que este análisis detecta los errores que pueda contener
intermedios, comprobar que los argumentos que tiene un operador pertenecen al conjunto de
los operadores posibles, y si son compatibles ente si, comprobará que el significado do lo
que se va leyendo es válido. Podremos apreciar en cada fase del proceso de compilación se
pueden encontrar errores pero el análisis semántico detecta el error, la fase puede tratar el
error, de manera que el compilador pueda continuar, permitiendo así que se puedan detectar
muy eficaz.
puede decir que estos errores son de tipo sintáctico-semántico, pero no pueden ser
detectados por el analizador sintáctico, ya que se relacionan con interdependencias entre las
analizador semántico recibe la información resultado del análisis sintáctico que puede ser un
ANALIZADOR LÉXICO
Un analizador léxico es un módulo destinado a leer caracteres del archivo de entrada, donde
Las técnicas utilizadas para construir analizadores léxicos también se pueden aplicar a otras
programas que ejecuten las acciones activadas por patrones dentro de las cadenas.
de entrada y dar como resultado una secuencia de componentes léxicos que utiliza el
FUNCIONES
y tratarlos correctamente con respecto a la tabla de símbolos (solo en los casos que
Llevar la cuenta del número de línea por la que va leyendo, por si se produce algún
error.
El analizador léxico puede realizar tareas secundarias en la interfaz del usuario, como
En algunas ocasiones, los analizadores léxicos se dividen en una cascada de dos fases: la
realizar tareas sencillas, mientras que el analizador léxico es el que realiza las operaciones
más complejas.
ANÁLISIS SINTÁCTICO
La tarea del analizador es, en este caso, la descomposición y transformación de las entradas
individuales.
FUNCIONAMIENTO
Para analizar un texto, los analizadores suelen utilizar un analizador léxico separado
(llamado lexer), que descompone los datos de entrada en fichas (símbolos de entrada como
palabras). Los Lexers son por lo general máquinas de finitas, que siguen la gramática
regular y por lo tanto aseguran un desglose adecuado. Los tokens obtenidos de esta manera
sintáctico de éstos y como regla general crea un árbol de sintaxis (árbol de análisis). Esto se
Página|8
puede utilizar para el procesamiento posterior de los datos, por ejemplo, la generación de
analizador es el software que comprueba, procesa y reenvía las instrucciones del código
fuente.
TIPOS DE ANALIZADORES
Hay básicamente dos métodos de análisis diferentes, análisis de arriba hacia abajo (top-
down) y análisis de abajo hacia arriba (bottom-up). Éstos difieren generalmente en el orden
De arriba a abajo:
significa que busca a partir del símbolo de inicio de la sintaxis y busca una derivación
sintáctica adecuada. Por lo tanto, el árbol de análisis se desarrolla de arriba hacia abajo en
establecer relaciones sintácticas cada vez mayores. Esto se hace hasta que el símbolo de
APLICACIONES
Un analizador sintáctico se utiliza a menudo para convertir texto en una nueva estructura,
por ejemplo, un árbol sintáctico, que expresa la disposición jerárquica de los elementos. En
Proporciona una descripción de la página web como una estructura de datos que
posterior.
P á g i n a | 10
siguiente:
Análisis: Distinción y separación de las partes de un todo hasta llegar a conocer sus
principios o elementos. En el caso del análisis gramática, examen de los componentes del
Léxico: Vocabulario, conjunto de las palabras de un idioma, o de las que pertenecen al uso
Entonces a partir de estas definiciones se puede afirmar que el análisis léxico es el proceso de
lenguaje. Por su parte el analizador léxico es un instrumento (programa) que nos ayuda a examinar
cada elemento de una cadena de entrada, para agruparlo en conjuntos homogéneos y asignarle una
El analizador léxico es un programa que toma como entrada el contenido de un archivo escrito en
archivo de salida escrito en TOKENS, listo para la siguiente fase del compilador.
• Patrón: Es la regla que establece el lenguaje de programación para cada uno de los
componentes.
• Componente léxico: Cada uno de los caracteres que componen los patrones.
Una constante es un elemento de datos con nombre con un valor predefinido, mientras que
una variable es un elemento de datos con nombre cuyo valor puede cambiar durante el
Por ejemplo:
y se utiliza de forma habitual en programación para guardar distintos tipos de datos para
Las variables pueden utilizarse en programación para guardar datos temporales que son
encargan de almacenar valores que pueden irse incrementando a lo largo del tiempo.
Por ejemplo:
char p = 57, n = 'a', rango = '\x18'; double raiz = 2.21, valor = 217.56;
P á g i n a | 13
¿QUÉ ES UN OPERANDO?
LLL ...
L(E).ç
¿QUÉ ES UN OPERADOR?
Operando se define como: Si E es una expresión recular, entonces L (E) denota el lenguaje
Tipos de datos
Requisitos de Software:
Windows 7 SP1.
Requisitos de Hardware:
Espacio en disco: 124 MB para JRE; 2 MB para Java Update. • Procesador: Mínimo
Formulario Principal
o Código fuente
package analizadorsintactico;
import java.awt.Color;
import javax.swing.JOptionPane;
public InterfazCodigo() {
getContentPane().setBackground(Color.orange);
initComponents();
@SuppressWarnings("unchecked")
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
Lugar_Codigo.setColumns(20);
Lugar_Codigo.setRows(5);
jScrollPane1.setViewportView(Lugar_Codigo);
EjecutarAD.setText("Analizar");
EjecutarAD.addActionListener(new java.awt.event.ActionListener() {
EjecutarADActionPerformed(evt);
});
Mostar_Operaciones.setColumns(20);
Mostar_Operaciones.setRows(5);
Mostar_Operaciones.setEnabled(false);
jScrollPane2.setViewportView(Mostar_Operaciones);
EjecutarOperaciones.setText("Ejecutar");
P á g i n a | 18
EjecutarOperaciones.setEnabled(false);
EjecutarOperaciones.addActionListener(new java.awt.event.ActionListener() {
EjecutarOperacionesActionPerformed(evt);
});
jLabel1.setText("Analizador Semántico");
jLabel2.setText("Declaración de variables");
jLabel4.setText("Ingresar expresión");
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(EjecutarOperaciones,
javax.swing.GroupLayout.PREFERRED_SIZE, 161,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
javax.swing.GroupLayout.PREFERRED_SIZE)
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(25, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
P á g i n a | 20
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
.addComponent(jLabel3)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
.addComponent(jLabel4)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(2, 2, 2)
.addComponent(jLabel3))
.addGroup(layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(jLabel4))))
P á g i n a | 21
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,
false)
.addComponent(jScrollPane2)
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELIN
E)
.addComponent(EjecutarAD)
.addComponent(EjecutarOperaciones))
.addContainerGap(36, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
if (Operaciones.separarCodigo(Lugar_Codigo.getText()) == "") {
Mostar_Operaciones.setEnabled(true);
EjecutarOperaciones.setEnabled(true);
Lugar_Codigo.setEnabled(false);
EjecutarAD.setEnabled(false);
} else {
JOptionPane.showMessageDialog(null,
Operaciones.separarCodigo(Lugar_Codigo.getText()));
}
P á g i n a | 22
}
Operaciones.separarOperaciones(Mostar_Operaciones.getText());
Mostar_Operaciones.setEnabled(false);
EjecutarOperaciones.setEnabled(false);
Lugar_Codigo.setEnabled(true);
EjecutarAD.setEnabled(true);
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
*/
try {
javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
} }
java.util.logging.Logger.getLogger(InterfazCodigo.class.getName()).log(java.util.logging.Level.S
java.util.logging.Logger.getLogger(InterfazCodigo.class.getName()).log(java.util.logging.Level.S
java.util.logging.Logger.getLogger(InterfazCodigo.class.getName()).log(java.util.logging.Level.S
java.awt.EventQueue.invokeLater(new Runnable() {
new InterfazCodigo().setVisible(true);
});
package analizadorsintactico;
import java.util.ArrayList;
import javax.swing.JOptionPane;
codigoParte.clear();
errores.clear();
operacionesCodigo.clear();
varsInt.clear();
varsString.clear();
varsChar.clear();
varsDouble.clear();
varsFloat.clear();
varsBoolean.clear();
stringTipo.clear();
intTipo.clear();
charTipo.clear();
doubleTipo.clear();
floatTipo.clear();
booleanTipo.clear();
Reset();
case "int":
break;
case "string":
break;
case "char":
break;
case "boolean":
break;
case "float":
break;
case "double":
break;
default:
if (caracter == 59) {
bandera = true;
}}
P á g i n a | 27
if (bandera) {
Codigo += LineasCodigo[i];
codigoParte.add(Codigo);
Codigo = "";
bandera = false;
} else {
}break;
}}
validarLinea(codigoParte.get(i)); }
if (varsInt.size() > 0) {
if (varsString.contains(varsInt.get(j))) {
if (varsBoolean.contains(varsInt.get(j))) {
n");
if (varsChar.contains(varsInt.get(j))) {
if (varsFloat.contains(varsInt.get(j))) {
if (varsDouble.contains(varsInt.get(j))) {
} }}
auxiliar += errores.get(j);
return auxiliar;
if (LineaCodigo[i].equals("int") && i == 0) {
if (LineaCodigo[j].equals("string")) {
LineaCodigo[j] + "\n");
Bandera = false;
} else if (LineaCodigo[j].equals("char")) {
LineaCodigo[j] + "\n");
P á g i n a | 29
Bandera = false;
} else if (LineaCodigo[j].equals("boolena")) {
LineaCodigo[j] + "\n");
Bandera = false;
} else if (LineaCodigo[j].equals("float")) {
LineaCodigo[j] + "\n");
Bandera = false;
} else if (LineaCodigo[j].equals("double")) {
LineaCodigo[j] + "\n");
Bandera = false;
} else {
} }
if (Variable == "") {
Bandera = false;
} else {
varsInt.add(Variable);
P á g i n a | 30
intTipo.add(0);
} }}
if (LineaCodigo[j].equals("int")) {
LineaCodigo[j] + "\n");
Bandera = false;
} else if (LineaCodigo[j].equals("char")) {
LineaCodigo[j] + "\n");
Bandera = false;
} else if (LineaCodigo[j].equals("boolena")) {
LineaCodigo[j] + "\n");
Bandera = false;
} else if (LineaCodigo[j].equals("float")) {
LineaCodigo[j] + "\n");
Bandera = false;
} else if (LineaCodigo[j].equals("double")) {
LineaCodigo[j] + "\n");
Bandera = false;
P á g i n a | 31
} else {
} }
if (Variable == "") {
Bandera = false;
} else {
varsString.add(Variable);
stringTipo.add("");
}} }
if (LineaCodigo[j].equals("int")) {
LineaCodigo[j] + "\n");
Bandera = false;
} else if (LineaCodigo[j].equals("string")) {
LineaCodigo[j] + "\n");
Bandera = false;
P á g i n a | 32
} else if (LineaCodigo[j].equals("boolena")) {
LineaCodigo[j] + "\n");
Bandera = false;
} else if (LineaCodigo[j].equals("float")) {
LineaCodigo[j] + "\n");
Bandera = false;
} else if (LineaCodigo[j].equals("double")) {
LineaCodigo[j] + "\n");
Bandera = false;
} else {
} }
if (Variable == "") {
Bandera = false;
} else {
varsChar.add(Variable);
P á g i n a | 33
//TipoChar.add('s','2');
} } }
if (LineaCodigo[j].equals("int")) {
LineaCodigo[j] + "\n");
Bandera = false;
} else if (LineaCodigo[j].equals("char")) {
LineaCodigo[j] + "\n");
Bandera = false;
} else if (LineaCodigo[j].equals("string")) {
LineaCodigo[j] + "\n");
Bandera = false;
} else if (LineaCodigo[j].equals("float")) {
LineaCodigo[j] + "\n");
Bandera = false;
} else if (LineaCodigo[j].equals("double")) {
LineaCodigo[j] + "\n");
Bandera = false;
P á g i n a | 34
} else {
} }
if (Variable == "") {
Bandera = false;
} else {
varsBoolean.add(Variable);
booleanTipo.add(true);
} } }
if (LineaCodigo[j].equals("int")) {
LineaCodigo[j] + "\n");
Bandera = false;
} else if (LineaCodigo[j].equals("char")) {
LineaCodigo[j] + "\n");
Bandera = false;
P á g i n a | 35
} else if (LineaCodigo[j].equals("boolena")) {
LineaCodigo[j] + "\n");
Bandera = false;
} else if (LineaCodigo[j].equals("string")) {
LineaCodigo[j] + "\n");
Bandera = false;
} else if (LineaCodigo[j].equals("double")) {
errores.add("Error, dos tipo de datos juntos: " + LineaCodigo[i] + " y " + LineaCodigo[j] +
"\n");
Bandera = false;
} else {
} }
if (Variable == "") {
Bandera = false;
} else {
varsFloat.add(Variable);
floatTipo.add(0.0f);
P á g i n a | 36
}} }
if (LineaCodigo[j].equals("int")) {
LineaCodigo[j] + "\n");
Bandera = false;
} else if (LineaCodigo[j].equals("char")) {
LineaCodigo[j] + "\n");
Bandera = false;
} else if (LineaCodigo[j].equals("boolena")) {
LineaCodigo[j] + "\n");
Bandera = false;
} else if (LineaCodigo[j].equals("float")) {
LineaCodigo[j] + "\n");
Bandera = false;
} else if (LineaCodigo[j].equals("string")) {
LineaCodigo[j] + "\n");
Bandera = false;
P á g i n a | 37
} else {
} }
if (Variable == "") {
Bandera = false;
} else {
varsDouble.add(Variable);
doubleTipo.add(0.0d);
}}}
} else if (i == 0) {
if (varsInt.contains(LineaCodigo[0])) {
int indice = 0;
if (varsInt.get(j).equals(LineaCodigo[0])) {
indice = j;
}}
if (caracter != 59) {
try {
intTipo.set(indice, Integer.parseInt(valor));
Bandera = false;
} else if (varsString.contains(LineaCodigo[0])) {
int indice = 0;
if (varsString.get(j).equals(LineaCodigo[0])) {
indice = j;
if (caracter != 59) {
try {
stringTipo.set(indice, valor);
Bandera = false;
} else if (varsChar.contains(LineaCodigo[0])) {
int indice = 0;
if (varsChar.get(j).equals(LineaCodigo[0])) {
indice = j;
if (caracter != 59) {
try {
Bandera = false;
} else if (varsBoolean.contains(LineaCodigo[0])) {
int indice = 0;
if (varsBoolean.get(j).equals(LineaCodigo[0])) {
indice = j;
if (caracter != 59) {
try {
booleanTipo.set(indice, Boolean.valueOf(valor));
Bandera = false;
}
P á g i n a | 41
} else if (varsDouble.contains(LineaCodigo[0])) {
int indice = 0;
if (varsDouble.get(j).equals(LineaCodigo[0])) {
indice = j;
if (caracter != 59) {
try {
doubleTipo.set(indice, Double.parseDouble(valor));
Bandera = false;
} else if (varsFloat.contains(LineaCodigo[0])) {
int indice = 0;
if (varsFloat.get(j).equals(LineaCodigo[0])) {
indice = j;
if (caracter != 59) {
try {
floatTipo.set(indice, Float.parseFloat(valor));
Bandera = false;
} else {
Bandera = false;
} else if (LineaCodigo[2].equals(";")) {
n");
P á g i n a | 43
Bandera = false;
} else {
Bandera = false;
if (caracter == 59) {
operacionesCodigo.add(Codigo);
Codigo = "";
} else {
if (Auxiliar) {
Auxiliar = false;
} else {
if (i + 1 < LineasCodigo.length) {
if (caracter == 59) {
Auxiliar = true; }
} } }
validarVariable(operacionesCodigo.get(i));
if (errores.isEmpty()) {
Operar(operacionesCodigo.get(i));
if (errores.isEmpty()) {
mostrarOperaciones(operacionesCodigo.get(i));
} else {
auxiliar += errores.get(j);
JOptionPane.showMessageDialog(null, auxiliar);
}
P á g i n a | 45
} else {
auxiliar += errores.get(j);
JOptionPane.showMessageDialog(null, auxiliar);
if (varsInt.contains(LineaCodigo[i])) {
} else if (varsString.contains(LineaCodigo[i])) {
} else if (varsChar.contains(LineaCodigo[i])) {
} else if (varsBoolean.contains(LineaCodigo[i])) {
} else if (varsDouble.contains(LineaCodigo[i])) {
} else if (varsFloat.contains(LineaCodigo[i])) {
} else {
P á g i n a | 46
if (LineaCodigo[0].equals("print")) {
if (varsInt.contains(LineaCodigo[1])) {
JOptionPane.showMessageDialog(null, intTipo.get(varsInt.indexOf(LineaCodigo[1])));
} else if (varsString.contains(LineaCodigo[1])) {
JOptionPane.showMessageDialog(null,
stringTipo.get(varsString.indexOf(LineaCodigo[1])));
} else if (varsChar.contains(LineaCodigo[1])) {
JOptionPane.showMessageDialog(null,
charTipo.get(varsChar.indexOf(LineaCodigo[1])));
} else if (varsBoolean.contains(LineaCodigo[1])) {
JOptionPane.showMessageDialog(null,
booleanTipo.get(varsBoolean.indexOf(LineaCodigo[1])));
} else if (varsDouble.contains(LineaCodigo[1])) {
JOptionPane.showMessageDialog(null,
doubleTipo.get(varsDouble.indexOf(LineaCodigo[1])));
} else if (varsFloat.contains(LineaCodigo[1])) {
P á g i n a | 47
JOptionPane.showMessageDialog(null, floatTipo.get(varsFloat.indexOf(LineaCodigo[1])));
if (!LineaCodigo[0].equals("print")) {
if (varsInt.contains(LineaCodigo[0])) {
if (LineaCodigo[3].equals("+")) {
try {
int Total = 0;
if (i % 2 == 0) {
Total += intTipo.get(varsInt.indexOf(LineaCodigo[i]));
System.out.println("*");
intTipo.set(varsInt.indexOf(LineaCodigo[0]), Total);
} else if (LineaCodigo[3].equals("-")) {
P á g i n a | 48
try {
int Total = 0;
if (i % 2 == 0) {
if (i == 2) {
Total = intTipo.get(varsInt.indexOf(LineaCodigo[i]));
} else {
Total -= intTipo.get(varsInt.indexOf(LineaCodigo[i]));
intTipo.set(varsInt.indexOf(LineaCodigo[0]), Total);
} else if (LineaCodigo[3].equals("*")) {
try {
int Total = 0;
if (i % 2 == 0) {
if (i == 2) {
Total = intTipo.get(varsInt.indexOf(LineaCodigo[i]));
} else {
Total *= intTipo.get(varsInt.indexOf(LineaCodigo[i]));
}
P á g i n a | 49
}
intTipo.set(varsInt.indexOf(LineaCodigo[0]), Total);
} else if (LineaCodigo[3].equals("/")) {
try {
int Total = 0;
if (i % 2 == 0) {
if (i == 2) {
Total = intTipo.get(varsInt.indexOf(LineaCodigo[i]));
} else {
Total /= intTipo.get(varsInt.indexOf(LineaCodigo[i]));
intTipo.set(varsInt.indexOf(LineaCodigo[0]), Total);
} else if (LineaCodigo[3].equals("^")) {
try {
int Total = 0;
P á g i n a | 50
for (int i = 2; i < LineaCodigo.length; i++) {
if (i % 2 == 0) {
if (i == 2) {
Total = intTipo.get(varsInt.indexOf(LineaCodigo[i]));
} else {
intTipo.get(varsInt.indexOf(LineaCodigo[i])));
intTipo.set(varsInt.indexOf(LineaCodigo[0]), Total);
} else if (varsString.contains(LineaCodigo[0])) {
if (LineaCodigo[3].equals("+")) {
try {
if (i % 2 == 0) {
stringTipo.set(varsString.indexOf(LineaCodigo[0]), Total);
P á g i n a | 51
} catch (Exception ex) {
} else if (varsChar.contains(LineaCodigo[0])) {
System.out.println("l");
} else if (varsBoolean.contains(LineaCodigo[0])) {
System.out.println("s");
} else if (varsDouble.contains(LineaCodigo[0])) {
if (LineaCodigo[3].equals("+")) {
try {
double Total = 0;
if (i % 2 == 0) {
Total += doubleTipo.get(varsDouble.indexOf(LineaCodigo[i]));
doubleTipo.set(varsDouble.indexOf(LineaCodigo[0]), Total);
} else if (LineaCodigo[3].equals("-")) {
try {
double Total = 0;
if (i == 2) {
Total = doubleTipo.get(varsDouble.indexOf(LineaCodigo[i]));
} else {
Total -= doubleTipo.get(varsDouble.indexOf(LineaCodigo[i]));
doubleTipo.set(varsDouble.indexOf(LineaCodigo[0]), Total);
} else if (LineaCodigo[3].equals("*")) {
try {
double Total = 0;
if (i % 2 == 0) {
if (i == 2) {
Total = doubleTipo.get(varsDouble.indexOf(LineaCodigo[i]));
} else {
Total *= doubleTipo.get(varsDouble.indexOf(LineaCodigo[i]));
doubleTipo.set(varsDouble.indexOf(LineaCodigo[0]), Total);
P á g i n a | 53
} catch (Exception ex) {
} else if (LineaCodigo[3].equals("/")) {
try {
double Total = 0;
if (i % 2 == 0) {
if (i == 2) {
Total = doubleTipo.get(varsDouble.indexOf(LineaCodigo[i]));
} else {
Total /= doubleTipo.get(varsDouble.indexOf(LineaCodigo[i]));
doubleTipo.set(varsDouble.indexOf(LineaCodigo[0]), Total);
} else if (LineaCodigo[3].equals("^")) {
try {
double Total = 0;
if (i % 2 == 0) {
P á g i n a | 54
if (i == 2) {
Total = doubleTipo.get(varsDouble.indexOf(LineaCodigo[i]));
} else {
Total = Math.pow(Total,
doubleTipo.get(varsDouble.indexOf(LineaCodigo[i])));
doubleTipo.set(varsDouble.indexOf(LineaCodigo[0]), Total);
if (LineaCodigo[3].equals("+")) {
try {
float Total = 0;
if (i % 2 == 0) {
Total += floatTipo.get(varsFloat.indexOf(LineaCodigo[i]));
floatTipo.set(varsFloat.indexOf(LineaCodigo[0]), Total);
} else if (LineaCodigo[3].equals("-")) {
try {
float Total = 0;
if (i % 2 == 0) {
if (i == 2) {
Total = floatTipo.get(varsFloat.indexOf(LineaCodigo[i]));
} else {
Total -= floatTipo.get(varsFloat.indexOf(LineaCodigo[i]));
floatTipo.set(varsFloat.indexOf(LineaCodigo[0]), Total);
} else if (LineaCodigo[3].equals("*")) {
try {
float Total = 0;
if (i % 2 == 0) {
if (i == 2) {
Total = floatTipo.get(varsFloat.indexOf(LineaCodigo[i]));
P á g i n a | 56
} else {
Total *= floatTipo.get(varsFloat.indexOf(LineaCodigo[i]));
floatTipo.set(varsFloat.indexOf(LineaCodigo[0]), Total);
} else if (LineaCodigo[3].equals("/")) {
try {
float Total = 0;
if (i % 2 == 0) {
if (i == 2) {
Total = floatTipo.get(varsFloat.indexOf(LineaCodigo[i]));
} else {
Total /= floatTipo.get(varsFloat.indexOf(LineaCodigo[i]));
floatTipo.set(varsFloat.indexOf(LineaCodigo[0]), Total);
}
P á g i n a | 57
} else if (LineaCodigo[3].equals("^")) {
try {
float Total = 0;
if (i % 2 == 0) {
if (i == 2) {
Total = floatTipo.get(varsFloat.indexOf(LineaCodigo[i]));
} else {
floatTipo.get(varsFloat.indexOf(LineaCodigo[i])));
floatTipo.set(varsFloat.indexOf(LineaCodigo[0]), Total);
}
P á g i n a | 58
EJEMPLO 1
EJEMPLO 2
P á g i n a | 59
EJEMPLO 3
EJEMPLO 4
P á g i n a | 60
EJEMPLO 5
P á g i n a | 61
CONCLUSIÓN
investigativo, tiene una gran importancia dentro del proceso de la compilación de códigos en
semánticos en dicho código y de esta manera se asegura una coherencia y un sentido valido
Además de esto, forma parte de un conjunto complejo de piezas que conforman el sistema de
un intérprete de códigos o compilador, donde las tareas de cada pieza son de suma
Como bien pudimos ver que el analizador semántico se compone de un conjunto de rutinas
semántico utiliza como entrada el árbol sintáctico detectado por el análisis sintáctico para
código. En compiladores de un solo paso, las llamadas a las rutinas semánticas se realizan
directamente desde el analizador sintáctico y son dichas rutinas las que llaman al generador
se utiliza la estructura jerárquica determinada por la fase de análisis sintáctico para identificar
BIBLIOGRAFIAS
John E. Hopcroft, Rajeev Motwani and Jeffrey D. Ullman (2001). Automata Theory,
https://www.ibm.com/docs/es/tivoli-monitoring/6.3.0?topic=languageoperators-
expressions
americanos). Con las notas de Rufino José Cuervo. Estudio y edición de R. Trujillo (2
https://es.wikipedia.org/wiki/An%C3%A1lisis_sint%C3%A1ctico_(ling%C3%BC%
C3%ADstica)
John E. Hopcroft, Rajeev Motwani and Jeffrey D. Ullman (2001). Automata Theory,
https://www.ibm.com/docs/es/tivoli-monitoring/6.3.0?topic=languageoperators-
expressions