Skip to content

Commit 67d1574

Browse files
committed
Split chars from expressions
1 parent ce3e968 commit 67d1574

22 files changed

+370
-307
lines changed

src/main/java/GUI/MainFrame.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import ParserOperations.Parser;
77
import SemanticOperations.Variable;
88
import SemanticOperations.VariableAssignment;
9-
import SemanticOperations.VariableCheck;
109
import Tokens.Token;
1110
import java.awt.Component;
1211
import java.awt.Toolkit;
@@ -393,7 +392,7 @@ private void btnAnalizeActionPerformed(java.awt.event.ActionEvent evt) {// GEN-F
393392
// var = new VariableCheck(lexer.getTokenList(), txtConsole);
394393
// var.check();
395394
semantic = new VariableAssignment(lexer.getTokenList());
396-
semantic.checkVars();
395+
semantic.analizeSemantic();
397396
fillVar();
398397
} else {
399398
jLabel1.setText("Output");
@@ -494,7 +493,7 @@ public void fillVar() {
494493
tbModel.addColumn("Fila");
495494

496495
for (Variable var : semantic.getVariables()) {
497-
tbModel.addRow(new Object[] { var.getName(), var.getType(), var.getValue(), var.getState(), var.getRow() });
496+
tbModel.addRow(new Object[] { var.getVarName(), var.getType(), var.getValue(), var.getState(), var.getRow() });
498497
}
499498

500499
DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();

src/main/java/ParserOperations/Parser.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,11 @@ public void statements() {
5050
} else {
5151
if (tool.verifyToken(TokenType.DESCONOCIDO)) {
5252
tool.showError("No se reconoce '" + tool.getCurrentToken().getLexeme() + "'");
53-
} else if (tool.getCurrentToken().getRow() != tool.getTokenList().get(tool.getTokenList().size() - 1)
54-
.getRow()) {
55-
tool.showError("Se esperaba un salto de linea");
56-
}
53+
}
54+
// else if (tool.getCurrentToken().getRow() != tool.getTokenList().get(tool.getTokenList().size() - 1)
55+
// .getRow()) {
56+
// tool.showError("Se esperaba un salto de linea");
57+
// }
5758
}
5859

5960
} else if (ss.isSimpleStatement()) {
@@ -64,10 +65,11 @@ public void statements() {
6465
} else {
6566
if (tool.verifyToken(TokenType.DESCONOCIDO)) {
6667
tool.showError("No se reconoce '" + tool.getCurrentToken().getLexeme() + "'");
67-
} else if (tool.getCurrentToken().getRow() != tool.getTokenList().get(tool.getTokenList().size() - 1)
68-
.getRow()) {
69-
tool.showError("Se esperaba un salto de linea");
70-
}
68+
}
69+
// else if (tool.getCurrentToken().getRow() != tool.getTokenList().get(tool.getTokenList().size() - 1)
70+
// .getRow()) {
71+
// tool.showError("Se esperaba un salto de linea");
72+
// }
7173
}
7274

7375
} else if (tool.verifyToken(TokenType.DESCONOCIDO)) {
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package SemanticOperations;
2+
3+
public enum State{
4+
ASIGNADO,
5+
NO_ASIGNADO,
6+
INDEFINIDO
7+
}

src/main/java/SemanticOperations/Variable.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ public class Variable {
77
private TokenType type;
88
private String value;
99
private int row;
10-
private String state;
10+
private State state;
1111

12-
public Variable(String name, TokenType type, String value, int row, String state) {
12+
public Variable(String name, TokenType type, String value, int row, State state) {
1313
this.name = name;
1414
this.type = type;
1515
this.value = value;
@@ -23,11 +23,11 @@ public String toString() {
2323
+ "]";
2424
}
2525

26-
public String getName() {
26+
public String getVarName() {
2727
return name;
2828
}
2929

30-
public void setName(String name) {
30+
public void setVarName(String name) {
3131
this.name = name;
3232
}
3333

@@ -55,11 +55,11 @@ public void setRow(int row) {
5555
this.row = row;
5656
}
5757

58-
public String getState() {
58+
public State getState() {
5959
return state;
6060
}
6161

62-
public void setState(String state) {
62+
public void setState(State state) {
6363
this.state = state;
6464
}
6565

src/main/java/SemanticOperations/VariableAssignment.java

Lines changed: 67 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,89 @@
11
package SemanticOperations;
22

33
import java.util.ArrayList;
4+
import java.util.HashMap;
5+
import java.util.List;
6+
import java.util.Map;
47

58
import Tokens.Token;
69
import Tokens.TokenType;
710

811
public class VariableAssignment {
12+
private static List<Character> especialChars = List.of('+', '-', '*', '/', '(', ')');
913
private ArrayList<Token> tokenList;
1014
private ArrayList<Variable> variables;
1115

1216
public VariableAssignment(ArrayList<Token> tokenList) {
1317
this.tokenList = tokenList;
1418
}
1519

16-
public void checkVars() {
20+
public void analizeSemantic() {
21+
checkVars();
22+
evalExpressions();
23+
}
24+
25+
private void evalExpressions() {
26+
Map<Integer, ArrayList<String>> expressions = new HashMap<>();
27+
for (Variable var : variables) {
28+
expressions.put(var.getRow(), splitExpression(var.getValue()));
29+
}
30+
31+
for (var entry : expressions.entrySet()) {
32+
System.out.println(
33+
entry.getKey() + " - " + entry.getValue().toString() + " - Size: " + entry.getValue().size());
34+
}
35+
}
36+
37+
private ArrayList<String> splitExpression(String value) {
38+
ArrayList<String> exp = new ArrayList<>();
39+
String aux = "";
40+
41+
for (char c : value.toCharArray()) {
42+
if (!Character.isWhitespace(c)) {
43+
if (especialChars.contains(c)) {
44+
if (aux.length() > 0) {
45+
exp.add(aux.toString());
46+
aux = "";
47+
}
48+
exp.add(String.valueOf(c));
49+
} else {
50+
aux += c;
51+
}
52+
}
53+
}
54+
55+
if (aux.length() > 0) {
56+
exp.add(aux);
57+
}
58+
59+
return exp;
60+
}
61+
62+
63+
64+
private void checkVars() {
1765
variables = new ArrayList<>();
18-
int currentVarRow = 0;
66+
String expression = "";
1967
for (int i = 0; i < tokenList.size(); i++) {
20-
String expression = "";
21-
Token currentToken = tokenList.get(i);
22-
if (currentToken.getToken() == TokenType.IDENTIFICADOR
23-
&& tokenList.get(i).getToken() == TokenType.ASIGNACION) {
24-
currentVarRow = currentToken.getRow();
25-
for (Token token : tokenList) {
26-
if (token.getRow() == currentVarRow) {
27-
expression += token.getLexeme();
68+
try {
69+
Token currentToken = tokenList.get(i);
70+
Token nextToken = tokenList.get(i + 1);
71+
if (currentToken.getToken() == TokenType.IDENTIFICADOR
72+
&& nextToken.getToken() == TokenType.ASIGNACION) {
73+
for (Token token : tokenList) {
74+
if (token.getRow() == currentToken.getRow()) {
75+
if (token.getLexeme() != currentToken.getLexeme()
76+
&& token.getLexeme() != nextToken.getLexeme()) {
77+
expression += token.getLexeme();
78+
}
79+
}
2880
}
81+
State state = (!expression.isBlank()) ? State.ASIGNADO : State.NO_ASIGNADO;
82+
variables.add(new Variable(currentToken.getLexeme(), TokenType.NONE, expression,
83+
currentToken.getRow(), state));
84+
expression = "";
2985
}
30-
variables.add(
31-
new Variable(currentToken.getLexeme(), TokenType.NONE, expression, currentVarRow, "DECLARADA"));
86+
} catch (IndexOutOfBoundsException e) {
3287
}
3388
}
3489
}

0 commit comments

Comments
 (0)