Skip to content

Commit c00543b

Browse files
committed
FOR variables assignment
1 parent 34b92dc commit c00543b

File tree

23 files changed

+170
-55
lines changed

23 files changed

+170
-55
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
class for_statement:
2-
for i in range(150):
2+
for i in range(12):
33
print("El valor es: ", i)
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
class if_statement:
22
num = 1
3-
if (num > 0 and num < 10) or (num == 100):
3+
if (num > 0 and num < 10) or (num == 100):
44
print("Correcto")
55
else:
66
print("Incorrecto")
Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
1-
a = 100
2-
b = 99
3-
c = 123 * (a - 45 + (b - 32))
4-
d = True
5-
e = ":D"
6-
f = "hola" + "mundo" + e
1+
class semantic:
2+
a = 100
3+
b = 99
4+
c = 5.5
5+
d = 123 * (a - 45 + (b - 32))
6+
e = True
7+
f = ":D"
8+
g = "hola" + " mundo " + f
9+
10+
if (a > 0 and c < 10) or (a == 100 and f == "hola") or e != False:
11+
print("Correcto")
12+
13+
for i in range(6, 12):
14+
print(i)

src/main/java/GUI/MainFrame.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -417,8 +417,6 @@ private void btnAnalizeActionPerformed(java.awt.event.ActionEvent evt) {// GEN-F
417417
parser.parseCode();
418418

419419
// ANALIZADOR SEMANTICO
420-
// var = new VariableCheck(lexer.getTokenList(), txtConsole);
421-
// var.check();
422420
semantic = new VariableAssignment(txtConsole, lexer.getTokenList());
423421
semantic.analizeSemantic();
424422
fillVar();

src/main/java/ParserOperations/Assignments.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ public boolean isAssignExpression() {
3737
else {
3838
if (tool.isValueToken(tool.getCurrentToken())) {
3939
flag = true;
40-
// System.out.println("VARIABLE DECLARADA");
4140
tool.incrementIndex();
4241
if (tool.verifyToken(TokenType.PUNTO_Y_COMA)) {
4342
tool.incrementIndex();

src/main/java/ParserOperations/CompoundStatements.java

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -123,57 +123,86 @@ public boolean isWhileStatement() {
123123

124124
public boolean isForStatement() {
125125
boolean flag = false;
126+
126127
if (tool.verifyToken(TokenType.FOR)) {
127128
tool.incrementIndex();
129+
128130
if (tool.verifyToken(TokenType.IDENTIFICADOR)) {
129131
tool.incrementIndex();
132+
130133
if (tool.verifyToken(TokenType.IN)) {
131134
tool.incrementIndex();
135+
132136
if (tool.verifyToken(TokenType.RANGE)) {
133137
tool.incrementIndex();
138+
134139
if (tool.verifyToken(TokenType.PARENTESIS_APERTURA)) {
135140
tool.incrementIndex();
141+
136142
if (tool.verifyToken(TokenType.ENTERO)) {
137143
tool.incrementIndex();
144+
145+
if (tool.verifyToken(TokenType.COMA)) {
146+
tool.incrementIndex();
147+
148+
if (tool.verifyToken(TokenType.ENTERO)) {
149+
tool.incrementIndex();
150+
} else {
151+
tool.showError("Se esperaba un segundo valor entero");
152+
return false;
153+
}
154+
}
155+
138156
if (tool.verifyToken(TokenType.PARENTESIS_CIERRE)) {
139157
tool.incrementIndex();
158+
140159
if (tool.verifyToken(TokenType.DOS_PUNTOS)) {
141-
// FIN DEL ARBOL SINTACTICO
142160
flag = true;
143161
tool.incrementIndex();
144-
// System.out.println("FOR CORRECTO");
145162
} else {
146-
tool.showError("Se esperaban ':'");
163+
tool.showError("Se esperaba ':'");
164+
return false;
147165
}
148166
} else {
149-
tool.showError("Se esperaban ')'");
167+
tool.showError("Se esperaba ')'");
168+
return false;
150169
}
151170
} else {
152-
tool.showError("Se esperaban valor iterable");
171+
tool.showError("Se esperaba un valor entero");
172+
return false;
153173
}
154174
} else {
155-
tool.showError("Se esperaban '('");
175+
tool.showError("Se esperaba '('");
176+
return false;
156177
}
157-
} else if (tool.verifyToken(TokenType.CADENA) || tool.verifyToken(TokenType.IDENTIFICADOR_CONJUNTO)
158-
|| tool.verifyToken(TokenType.IDENTIFICADOR_LISTA)
159-
|| tool.verifyToken(TokenType.IDENTIFICADOR_TUPLA)) {
178+
} else if (tool.verifyToken(TokenType.CADENA) ||
179+
tool.verifyToken(TokenType.IDENTIFICADOR_CONJUNTO) ||
180+
tool.verifyToken(TokenType.IDENTIFICADOR_LISTA) ||
181+
tool.verifyToken(TokenType.IDENTIFICADOR_TUPLA)) {
160182
tool.incrementIndex();
183+
161184
if (tool.verifyToken(TokenType.DOS_PUNTOS)) {
162-
// FIN DEL ARBOL SINTACTICO
163185
flag = true;
164186
tool.incrementIndex();
165187
System.out.println("FOR (LISTA, TUPLA, CADENA, CONJUNTO) CORRECTO");
188+
} else {
189+
tool.showError("Se esperaba ':'");
190+
return false;
166191
}
167192
} else {
168-
tool.showError("Se esperaban expresión");
193+
tool.showError("Se esperaba una expresión válida");
194+
return false;
169195
}
170196
} else {
171-
tool.showError("Se esperaban palabra reservada");
197+
tool.showError("Se esperaba 'IN'");
198+
return false;
172199
}
173200
} else {
174-
tool.showError("Se esperaban iterador");
201+
tool.showError("Se esperaba un iterador");
202+
return false;
175203
}
176204
}
205+
177206
return flag;
178207
}
179208

src/main/java/ParserOperations/Parser.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public void statements() {
5252
tool.showError("[SEMANTICO] No se reconoce '" + tool.getCurrentToken().getLexeme() + "'");
5353
} else if (tool.getCurrentToken().getRow() != tool.getTokenList().get(tool.getTokenList().size() - 1)
5454
.getRow()) {
55-
tool.showError("Se esperaba un salto de linea");
55+
tool.showError("Se esperaba un salto de linea " + tool.getCurrentToken().getLexeme());
5656
}
5757
}
5858

@@ -66,7 +66,7 @@ public void statements() {
6666
tool.showError("[SEMANTICO] No se reconoce '" + tool.getCurrentToken().getLexeme() + "'");
6767
} else if (tool.getCurrentToken().getRow() != tool.getTokenList().get(tool.getTokenList().size() - 1)
6868
.getRow()) {
69-
tool.showError("Se esperaba un salto de linea");
69+
tool.showError("Se esperaba un salto de linea " + tool.getCurrentToken().getLexeme());
7070
}
7171
}
7272

src/main/java/SemanticOperations/ConditionalCheck.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public void check() {
4040
int row = Integer.parseInt(String.valueOf(entry.getKey().toCharArray()[0]));
4141
TokenType tkn1 = entry.getValue().get(0).getToken();
4242
TokenType tkn2 = entry.getValue().get(2).getToken();
43-
43+
4444
if (tkn1.equals(TokenType.IDENTIFICADOR)) {
4545
for (Variable var : VariableAssignment.variables) {
4646
if (var.getVarName().equals(entry.getValue().get(0).getLexeme())) {
@@ -49,7 +49,7 @@ public void check() {
4949
}
5050
}
5151
}
52-
52+
5353
if (tkn2.equals(TokenType.IDENTIFICADOR)) {
5454
for (Variable var : VariableAssignment.variables) {
5555
if (var.getVarName().equals(entry.getValue().get(2).getLexeme())) {
@@ -58,11 +58,14 @@ public void check() {
5858
}
5959
}
6060
}
61-
62-
if (!tkn1.equals(tkn2)) {
61+
62+
if ((tkn1 == TokenType.ENTERO || tkn1 == TokenType.DECIMAL) &&
63+
(tkn2 == TokenType.ENTERO || tkn2 == TokenType.DECIMAL)) {
64+
} else if (!tkn1.equals(tkn2)) {
6365
showError("[SEMANTICO] Comparación entre diferentes tipos", row);
6466
}
65-
}
67+
68+
}
6669
}
6770

6871
private void showError(String errorMessage, int row) {

src/main/java/SemanticOperations/ExpressionEval.java

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,33 +27,37 @@ public static double eval(String expresion) {
2727
}
2828

2929
if (Character.isDigit(c) || c == '.') {
30-
// Leer el número completo (incluyendo decimales)
30+
// Leer el número
3131
StringBuilder numero = new StringBuilder();
3232
while (i < expresion.length() &&
3333
(Character.isDigit(expresion.charAt(i)) || expresion.charAt(i) == '.')) {
3434
numero.append(expresion.charAt(i));
3535
i++;
3636
}
37-
operandos.push(Double.parseDouble(numero.toString())); // Empujar el número completo
37+
// Agregar el número
38+
operandos.push(Double.parseDouble(numero.toString()));
3839
continue; // Saltar al siguiente carácter
3940
}
4041

4142
if (c == '(') {
42-
operadores.push(c); // Empujar paréntesis de apertura
43+
// Agregar paréntesis de apertura
44+
operadores.push(c);
4345
} else if (c == ')') {
4446
// Evaluar todo hasta encontrar el paréntesis de apertura
4547
while (operadores.peek() != '(') {
4648
aplicarOperacion(operandos, operadores.pop());
4749
}
48-
operadores.pop(); // Eliminar '('
50+
// Eliminar '('
51+
operadores.pop();
4952
} else if (esOperador(c)) {
5053
// Procesar operadores con mayor o igual precedencia
5154
while (!operadores.isEmpty() &&
5255
operadores.peek() != '(' &&
5356
precedencia(operadores.peek()) >= precedencia(c)) {
5457
aplicarOperacion(operandos, operadores.pop());
5558
}
56-
operadores.push(c); // Empujar el operador actual
59+
// Agregar el operador actual
60+
operadores.push(c);
5761
}
5862
i++;
5963
}
@@ -63,7 +67,8 @@ public static double eval(String expresion) {
6367
aplicarOperacion(operandos, operadores.pop());
6468
}
6569

66-
return operandos.pop(); // El resultado final
70+
// El resultado final
71+
return operandos.pop();
6772
}
6873

6974
// Aplica una operación usando los operandos de la pila
@@ -76,15 +81,15 @@ private static void aplicarOperacion(Stack<Double> operandos, char operador) {
7681
case '*' -> operandos.push(a * b);
7782
case '/' -> {
7883
if (b == 0) {
79-
showError("División por cero"); // Muestra el error
80-
throw new IllegalArgumentException("División por cero"); // Lanza la excepción
84+
showError("[SEMANTICO] División por cero");
85+
throw new IllegalArgumentException("División por cero");
8186
}
8287
operandos.push(a / b); // Solo se ejecuta si b no es 0
8388

8489
}
8590
default -> {
86-
showError("Operador no soportado: " + operador); // Muestra el mensaje de error
87-
throw new IllegalArgumentException("Operador no soportado: " + operador); // Lanza la excepción
91+
showError("[SEMANTICO] Operador no soportado: " + operador);
92+
throw new IllegalArgumentException("Operador no soportado: " + operador);
8893
}
8994

9095
}

src/main/java/SemanticOperations/State.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,5 @@
22

33
public enum State{
44
ASIGNADO,
5-
NO_ASIGNADO,
65
INDEFINIDO
76
}

0 commit comments

Comments
 (0)