Skip to content

Commit ab1739e

Browse files
committed
Semantic Operations
1 parent c8c5273 commit ab1739e

39 files changed

+644
-205
lines changed

src/main/java/GUI/MainFrame.form

Lines changed: 167 additions & 89 deletions
Large diffs are not rendered by default.

src/main/java/GUI/MainFrame.java

Lines changed: 107 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import GUI.CustomComponents.NumeroLinea;
55
import LexerOperations.Lexer;
66
import ParserOperations.Parser;
7+
import SemanticOperations.Variable;
8+
import SemanticOperations.VariableCheck;
79
import Tokens.Token;
810
import java.awt.Component;
911
import java.awt.Toolkit;
@@ -24,6 +26,7 @@ public class MainFrame extends javax.swing.JFrame {
2426
private DefaultTableModel tbModel;
2527
private Lexer lexer;
2628
private Parser parser;
29+
private VariableCheck var;
2730

2831
public MainFrame() {
2932
initComponents();
@@ -58,16 +61,20 @@ private void initComponents() {
5861
btnFOR = new GUI.CustomComponents.Button();
5962
btnWHILE = new GUI.CustomComponents.Button();
6063
btnSWITCH = new GUI.CustomComponents.Button();
61-
pnlCodeArea = new GUI.CustomComponents.PanelRound();
62-
scrollCode = new javax.swing.JScrollPane();
63-
txtCode = new javax.swing.JTextArea();
64+
jPanel3 = new javax.swing.JPanel();
6465
pnlLexer = new GUI.CustomComponents.PanelRound();
6566
scrollTokens = new javax.swing.JScrollPane();
6667
tableTokens = new javax.swing.JTable();
68+
pnlSemantic = new GUI.CustomComponents.PanelRound();
69+
scrollVariables = new javax.swing.JScrollPane();
70+
tableVariables = new javax.swing.JTable();
6771
pnlParser = new GUI.CustomComponents.PanelRound();
6872
scrollCode1 = new javax.swing.JScrollPane();
6973
txtConsole = new javax.swing.JTextArea();
7074
jLabel1 = new javax.swing.JLabel();
75+
pnlCodeArea = new GUI.CustomComponents.PanelRound();
76+
scrollCode = new javax.swing.JScrollPane();
77+
txtCode = new javax.swing.JTextArea();
7178

7279
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
7380

@@ -233,26 +240,8 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
233240

234241
pnlMain.add(pnlNavBar, java.awt.BorderLayout.NORTH);
235242

236-
pnlCodeArea.setBackground(new java.awt.Color(23, 21, 23));
237-
pnlCodeArea.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10));
238-
pnlCodeArea.setRound(10);
239-
pnlCodeArea.setLayout(new java.awt.GridLayout(1, 0));
240-
241-
scrollCode.setBackground(new java.awt.Color(23, 21, 23));
242-
scrollCode.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(40, 137, 199)));
243-
scrollCode.setPreferredSize(new java.awt.Dimension(800, 400));
244-
245-
txtCode.setBackground(new java.awt.Color(23, 21, 23));
246-
txtCode.setColumns(20);
247-
txtCode.setFont(new java.awt.Font("Monospaced", 0, 16)); // NOI18N
248-
txtCode.setRows(5);
249-
txtCode.setTabSize(4);
250-
txtCode.setBorder(javax.swing.BorderFactory.createEmptyBorder(2, 2, 2, 2));
251-
scrollCode.setViewportView(txtCode);
252-
253-
pnlCodeArea.add(scrollCode);
254-
255-
pnlMain.add(pnlCodeArea, java.awt.BorderLayout.CENTER);
243+
jPanel3.setOpaque(false);
244+
jPanel3.setLayout(new java.awt.GridLayout(2, 1, 5, 5));
256245

257246
pnlLexer.setBackground(new java.awt.Color(23, 21, 23));
258247
pnlLexer.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10));
@@ -277,7 +266,35 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
277266

278267
pnlLexer.add(scrollTokens);
279268

280-
pnlMain.add(pnlLexer, java.awt.BorderLayout.EAST);
269+
jPanel3.add(pnlLexer);
270+
271+
pnlSemantic.setBackground(new java.awt.Color(23, 21, 23));
272+
pnlSemantic.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10));
273+
pnlSemantic.setPreferredSize(new java.awt.Dimension(200, 220));
274+
pnlSemantic.setRound(10);
275+
pnlSemantic.setLayout(new java.awt.GridLayout());
276+
277+
scrollVariables.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(40, 137, 199)));
278+
scrollVariables.setPreferredSize(new java.awt.Dimension(452, 200));
279+
280+
tableVariables.setBackground(new java.awt.Color(23, 21, 23));
281+
tableVariables.setFont(new java.awt.Font("Roboto", 0, 14)); // NOI18N
282+
tableVariables.setModel(new javax.swing.table.DefaultTableModel(
283+
new Object [][] {
284+
{null, null, null, null, null}
285+
},
286+
new String [] {
287+
"Variable", "Tipo", "Valor", "Estado", "Fila"
288+
}
289+
));
290+
tableVariables.setEnabled(false);
291+
scrollVariables.setViewportView(tableVariables);
292+
293+
pnlSemantic.add(scrollVariables);
294+
295+
jPanel3.add(pnlSemantic);
296+
297+
pnlMain.add(jPanel3, java.awt.BorderLayout.EAST);
281298

282299
pnlParser.setBackground(new java.awt.Color(23, 21, 23));
283300
pnlParser.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10));
@@ -308,11 +325,32 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
308325

309326
pnlMain.add(pnlParser, java.awt.BorderLayout.PAGE_END);
310327

328+
pnlCodeArea.setBackground(new java.awt.Color(23, 21, 23));
329+
pnlCodeArea.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10));
330+
pnlCodeArea.setRound(10);
331+
pnlCodeArea.setLayout(new java.awt.GridLayout(1, 0));
332+
333+
scrollCode.setBackground(new java.awt.Color(23, 21, 23));
334+
scrollCode.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(40, 137, 199)));
335+
scrollCode.setPreferredSize(new java.awt.Dimension(800, 400));
336+
337+
txtCode.setBackground(new java.awt.Color(23, 21, 23));
338+
txtCode.setColumns(20);
339+
txtCode.setFont(new java.awt.Font("Monospaced", 0, 16)); // NOI18N
340+
txtCode.setRows(5);
341+
txtCode.setTabSize(4);
342+
txtCode.setBorder(javax.swing.BorderFactory.createEmptyBorder(2, 2, 2, 2));
343+
scrollCode.setViewportView(txtCode);
344+
345+
pnlCodeArea.add(scrollCode);
346+
347+
pnlMain.add(pnlCodeArea, java.awt.BorderLayout.CENTER);
348+
311349
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
312350
getContentPane().setLayout(layout);
313351
layout.setHorizontalGroup(
314352
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
315-
.addComponent(pnlMain, javax.swing.GroupLayout.DEFAULT_SIZE, 1000, Short.MAX_VALUE)
353+
.addComponent(pnlMain, javax.swing.GroupLayout.DEFAULT_SIZE, 950, Short.MAX_VALUE)
316354
);
317355
layout.setVerticalGroup(
318356
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
@@ -350,6 +388,11 @@ private void btnAnalizeActionPerformed(java.awt.event.ActionEvent evt) {// GEN-F
350388
// ANALIZADOR SINTACTICO
351389
parser = new Parser(lexer.getTokenList(), txtConsole);
352390
parser.parseCode();
391+
392+
// ANALIZADOR SEMANTICO
393+
var = new VariableCheck(lexer.getTokenList(), txtConsole);
394+
var.check();
395+
fillVar();
353396
} else {
354397
jLabel1.setText("Output");
355398
JOptionPane.showMessageDialog(null, "No hay código en el editor", "Atención!",
@@ -438,6 +481,41 @@ public void fillTable() {
438481
tableColumn.setPreferredWidth(preferredWidth);
439482
}
440483
}
484+
485+
public void fillVar() {
486+
tbModel = new DefaultTableModel();
487+
tbModel.setRowCount(0);
488+
tbModel.addColumn("Variable");
489+
tbModel.addColumn("Tipo");
490+
tbModel.addColumn("Valor");
491+
tbModel.addColumn("Estado");
492+
tbModel.addColumn("Fila");
493+
494+
for (Variable var : var.getVariables()) {
495+
tbModel.addRow(new Object[]{var.getName(), var.getType(), var.getValue(), var.getState(), var.getRow()});
496+
}
497+
498+
DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
499+
centerRenderer.setHorizontalAlignment(JLabel.CENTER);
500+
tableVariables.setDefaultRenderer(Object.class, centerRenderer);
501+
502+
tableVariables.setModel(tbModel);
503+
504+
TableColumnModel columnModel = tableVariables.getColumnModel();
505+
for (int column = 0; column < tableVariables.getColumnCount(); column++) {
506+
TableColumn tableColumn = columnModel.getColumn(column);
507+
int preferredWidth = 0;
508+
509+
for (int i = 0; i < tableVariables.getRowCount(); i++) {
510+
TableCellRenderer cellRenderer = tableVariables.getCellRenderer(i, column);
511+
Component c = tableVariables.prepareRenderer(cellRenderer, i, column);
512+
int width = c.getPreferredSize().width + tableVariables.getIntercellSpacing().width;
513+
preferredWidth = Math.max(preferredWidth, width);
514+
}
515+
516+
tableColumn.setPreferredWidth(preferredWidth);
517+
}
518+
}
441519

442520
/**
443521
* @param args the command line arguments
@@ -491,15 +569,19 @@ public void run() {
491569
private javax.swing.JLabel jLabel1;
492570
private javax.swing.JPanel jPanel1;
493571
private javax.swing.JPanel jPanel2;
572+
private javax.swing.JPanel jPanel3;
494573
private GUI.CustomComponents.PanelRound pnlCodeArea;
495574
private GUI.CustomComponents.PanelRound pnlLexer;
496575
private javax.swing.JPanel pnlMain;
497576
private GUI.CustomComponents.PanelRound pnlNavBar;
498577
private GUI.CustomComponents.PanelRound pnlParser;
578+
private GUI.CustomComponents.PanelRound pnlSemantic;
499579
private javax.swing.JScrollPane scrollCode;
500580
private javax.swing.JScrollPane scrollCode1;
501581
private javax.swing.JScrollPane scrollTokens;
582+
private javax.swing.JScrollPane scrollVariables;
502583
private javax.swing.JTable tableTokens;
584+
private javax.swing.JTable tableVariables;
503585
private javax.swing.JTextArea txtCode;
504586
private javax.swing.JTextArea txtConsole;
505587
// End of variables declaration//GEN-END:variables

src/main/java/LexerOperations/Lexer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,8 @@ private boolean isIdentifier(String lexeme, int tknIndex) {
216216
if (tknIndex < tokenList.size() - 2 && tokenList.get(tknIndex + 2).getLexeme().equals("{")) {
217217
tokenType = TokenType.IDENTIFICADOR_CONJUNTO;
218218
} else if (tknIndex < tokenList.size() - 2 && tokenList.get(tknIndex + 2).getLexeme().equals("(")) {
219-
tokenType = TokenType.IDENTIFICADOR_TUPLA;
219+
// tokenType = TokenType.IDENTIFICADOR_TUPLA;
220+
tokenType = TokenType.IDENTIFICADOR;
220221
} else if (tknIndex < tokenList.size() - 2 && tokenList.get(tknIndex + 2).getLexeme().equals("[")) {
221222
tokenType = TokenType.IDENTIFICADOR_LISTA;
222223
} else {
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package SemanticOperations;
2+
3+
import Tokens.TokenType;
4+
5+
public class Variable {
6+
private String name;
7+
private TokenType type;
8+
private String value;
9+
private int row;
10+
private String state;
11+
12+
public Variable(String name, TokenType type, String value, int row, String state) {
13+
this.name = name;
14+
this.type = type;
15+
this.value = value;
16+
this.row = row;
17+
this.state = state;
18+
}
19+
20+
@Override
21+
public String toString() {
22+
return "Variable [name=" + name + ", type=" + type + ", value=" + value + ", row=" + row + ", state=" + state
23+
+ "]";
24+
}
25+
26+
public String getName() {
27+
return name;
28+
}
29+
30+
public void setName(String name) {
31+
this.name = name;
32+
}
33+
34+
public TokenType getType() {
35+
return type;
36+
}
37+
38+
public void setType(TokenType type) {
39+
this.type = type;
40+
}
41+
42+
public String getValue() {
43+
return value;
44+
}
45+
46+
public void setValue(String value) {
47+
this.value = value;
48+
}
49+
50+
public int getRow() {
51+
return row;
52+
}
53+
54+
public void setRow(int row) {
55+
this.row = row;
56+
}
57+
58+
public String getState() {
59+
return state;
60+
}
61+
62+
public void setState(String state) {
63+
this.state = state;
64+
}
65+
66+
}

0 commit comments

Comments
 (0)