Skip to content

Commit 2acf035

Browse files
committed
Almost finished
1 parent 6672319 commit 2acf035

File tree

11 files changed

+175
-131
lines changed

11 files changed

+175
-131
lines changed

sintaxExp.png

-165 KB
Binary file not shown.

src/main/java/ParserOperations/Assignments.java

Lines changed: 33 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,17 @@ public boolean isAssignExpression() {
2727
tool.incrementIndex();
2828
if (isExpression()) {
2929
flag = true;
30+
if (tool.verifyToken(TokenType.PUNTO_Y_COMA)) {
31+
tool.incrementIndex();
32+
}
3033
} else {
3134
if (tool.isValueToken(tool.getCurrentToken())) {
3235
flag = true;
3336
// System.out.println("VARIABLE DECLARADA");
3437
tool.incrementIndex();
38+
if (tool.verifyToken(TokenType.PUNTO_Y_COMA)) {
39+
tool.incrementIndex();
40+
}
3541
} else {
3642
tool.showError("[NORMAL] Se esperaba valor");
3743
}
@@ -40,11 +46,17 @@ public boolean isAssignExpression() {
4046
tool.incrementIndex();
4147
if (isExpression()) {
4248
flag = true;
49+
if (tool.verifyToken(TokenType.PUNTO_Y_COMA)) {
50+
tool.incrementIndex();
51+
}
4352
} else {
4453
if (tool.isValueToken(tool.getCurrentToken())) {
4554
flag = true;
4655
// System.out.println("VARIABLE AUGGASING");
4756
tool.incrementIndex();
57+
if (tool.verifyToken(TokenType.PUNTO_Y_COMA)) {
58+
tool.incrementIndex();
59+
}
4860
} else {
4961
tool.showError("[AUG] Se esperaba valor");
5062
}
@@ -54,23 +66,6 @@ public boolean isAssignExpression() {
5466
}
5567
}
5668

57-
for (Token tkn : tool.getTokenList()) {
58-
if (tkn.getRow() == tool.getCurrentToken().getRow()
59-
&& tkn.getColumn() <= tool.getCurrentToken().getColumn()) {
60-
if (tkn.getToken() == TokenType.PARENTESIS_APERTURA) {
61-
openParent.add(tkn.getColumn());
62-
} else if (tkn.getToken() == TokenType.PARENTESIS_CIERRE) {
63-
closeParent.add(tkn.getColumn());
64-
}
65-
}
66-
}
67-
68-
if (openParent.size() < closeParent.size()) {
69-
tool.showError("Se esperaba '('");
70-
} else if (openParent.size() > closeParent.size()) {
71-
tool.showError("Se esperaba ')'");
72-
}
73-
7469
return flag;
7570
}
7671

@@ -114,9 +109,27 @@ public boolean isExpression() {
114109
break;
115110
}
116111
}
117-
} else {
118-
tool.showError("[EXP] Se esperaba un término");
119112
}
113+
114+
if (flag) {
115+
for (Token tkn : tool.getTokenList()) {
116+
if (tkn.getRow() == tool.getCurrentToken().getRow()
117+
&& tkn.getColumn() <= tool.getCurrentToken().getColumn()) {
118+
if (tkn.getToken() == TokenType.PARENTESIS_APERTURA) {
119+
openParent.add(tkn.getColumn());
120+
} else if (tkn.getToken() == TokenType.PARENTESIS_CIERRE) {
121+
closeParent.add(tkn.getColumn());
122+
}
123+
}
124+
}
125+
126+
if (openParent.size() < closeParent.size()) {
127+
tool.showError("Se esperaba '('");
128+
} else if (openParent.size() > closeParent.size()) {
129+
tool.showError("Se esperaba ')'");
130+
}
131+
}
132+
120133
return flag;
121134
}
122135

@@ -129,13 +142,11 @@ public boolean isTerm() {
129142
while (tool.verifyToken(TokenType.MULTIPLICACION) || tool.verifyToken(TokenType.DIVISION)) {
130143
tool.incrementIndex(); // Avanzar el operador
131144
if (!isFactor()) {
132-
tool.showError("[TERM] Se esperaba valor después del operador aritmético");
145+
// tool.showError("[TERM] Se esperaba valor después del operador aritmético");
133146
flag = false;
134147
break;
135148
}
136149
}
137-
} else {
138-
tool.showError("[TERM] Se esperaba un valor");
139150
}
140151
return flag;
141152
}

src/main/java/ParserOperations/IndentationParser.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,7 @@ protected void checkIndent() {
6060
expectedIndent += 4;
6161
} else {
6262
tool.getConsole().setText(tool.getConsole().getText() +
63-
"Declaracion de 'CASE' no valida en la linea " + token.getRow()
64-
+ ". Falta sentencia 'MATCH'\n");
63+
"Instruccion 'MATCH/CASE' no valida en la linea " + token.getRow() + "\n");
6564
}
6665
break;
6766
case IDENTIFICADOR:
@@ -138,6 +137,24 @@ private void checkIndentation(Token token) {
138137
}
139138
}
140139
}
140+
141+
for (int i = 0; i < listIndent.size(); i++) {
142+
if (token == listIndent.get(i)) {
143+
Token lastToken = tool.getTokenList().get(tool.getTokenList().size() - 1);
144+
145+
if (token.getToken() == TokenType.CLASS || token.getToken() == TokenType.WHILE
146+
|| token.getToken() == TokenType.FOR || token.getToken() == TokenType.IF
147+
|| token.getToken() == TokenType.ELSE || token.getToken() == TokenType.ELIF
148+
|| token.getToken() == TokenType.CASE) {
149+
if (token.getRow() == lastToken.getRow()) {
150+
tool.getConsole().setText(tool.getConsole().getText()
151+
+ "Se esperaba bloque de codigo en la linea " + token.getRow() + "\n");
152+
} else {
153+
break;
154+
}
155+
}
156+
}
157+
}
141158
}
142159

143160
private void checkClassDeclaration(Token token, int classCount) {
Lines changed: 47 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package ParserOperations;
22

3+
import Tokens.Constants;
34
import Tokens.Token;
45
import Tokens.TokenType;
56

67
import java.util.ArrayList;
8+
import java.util.Map;
9+
710
import javax.swing.JTextArea;
811

912
public class Parser {
@@ -29,49 +32,60 @@ public Parser(ArrayList<Token> tokenList, JTextArea console) {
2932
}
3033

3134
public void parseCode() {
32-
System.out.println("\nInicio Ejecución");
35+
// System.out.println("\nInicio Ejecución");
3336
statements();
3437
ip.checkIndent();
35-
System.out.println("Fin Ejecución");
38+
// System.out.println("Fin Ejecución");
3639
}
3740

3841
public void statements() {
39-
if (tool.getIndex() != tool.getTokenList().size() - 1) {
40-
// System.out.println(tool.getCurrentToken());
41-
listIndent.add(tool.getCurrentToken());
42-
if (cs.isCompoundStatement()) {
43-
// CompoundStatement correcto
44-
if (tool.getCurrentToken().getRow() != 1
45-
&& tool.getTokenList().get(tool.getIndex() - 1).getRow() != tool.getCurrentToken().getRow()) {
46-
statements();
47-
} else {
48-
if (tool.getCurrentToken().getRow() != tool.getTokenList().get(tool.getTokenList().size() - 1)
49-
.getRow()) {
50-
tool.showError("Se esperaba un salto de linea");
51-
}
52-
}
5342

54-
} else if (ss.isSimpleStatement()) {
55-
// SimpleStatement correcto
56-
if (tool.getCurrentToken().getRow() != 1
57-
&& tool.getTokenList().get(tool.getIndex() - 1).getRow() != tool.getCurrentToken().getRow()) {
58-
statements();
59-
} else {
60-
if (tool.getCurrentToken().getRow() != tool.getTokenList().get(tool.getTokenList().size() - 1)
61-
.getRow()) {
62-
tool.showError("Se esperaba un salto de linea");
63-
}
43+
// System.out.println(tool.getCurrentToken());
44+
listIndent.add(tool.getCurrentToken());
45+
if (cs.isCompoundStatement()) {
46+
// CompoundStatement correcto
47+
if (tool.getCurrentToken().getRow() != 1
48+
&& tool.getTokenList().get(tool.getIndex() - 1).getRow() != tool.getCurrentToken().getRow()) {
49+
statements();
50+
} else {
51+
if (tool.verifyToken(TokenType.DESCONOCIDO)) {
52+
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");
6456
}
57+
}
6558

66-
} else if (tool.verifyToken(TokenType.DESCONOCIDO)) {
67-
tool.showError("No se reconoce '" + tool.getCurrentToken().getLexeme() + "'");
68-
} else if (tool.isAssignment(tool.getCurrentToken()) || tool.isOperator(tool.getCurrentToken())
69-
|| tool.isRelationalOperator(tool.getCurrentToken())) {
70-
tool.showError("Se encontró '" + tool.getCurrentToken().getLexeme() + "' fuera de lugar");
71-
} else if (tool.verifyToken(TokenType.DOS_PUNTOS)) {
72-
tool.showError("Se esperaba instruccion antes de ':'");
59+
} else if (ss.isSimpleStatement()) {
60+
// SimpleStatement correcto
61+
if (tool.getCurrentToken().getRow() != 1
62+
&& tool.getTokenList().get(tool.getIndex() - 1).getRow() != tool.getCurrentToken().getRow()) {
63+
statements();
64+
} else {
65+
if (tool.verifyToken(TokenType.DESCONOCIDO)) {
66+
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+
}
7371
}
7472

73+
} else if (tool.verifyToken(TokenType.DESCONOCIDO)) {
74+
tool.showError("No se reconoce '" + tool.getCurrentToken().getLexeme() + "'");
75+
} else if (!tool.verifyToken(TokenType.PUNTO_Y_COMA)) {
76+
checkTokensUnfound(Constants.DELIMITERS);
77+
checkTokensUnfound(Constants.OPERATORS);
78+
checkTokensUnfound(Constants.RESERVED_WORDS);
79+
}
80+
}
81+
82+
private void checkTokensUnfound(Map<String, TokenType> tokenMap) {
83+
for (TokenType tkn : tokenMap.values()) {
84+
if (tkn == tool.getCurrentToken().getToken()) {
85+
tool.showError("Se encontró '" + tool.getCurrentToken().getLexeme()
86+
+ "' fuera de un bloque de codigo");
87+
tool.incrementIndex();
88+
}
7589
}
7690
}
7791
}

src/main/java/ParserOperations/SimpleStatements.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,25 @@ public boolean isPrint() {
3838
if (tool.verifyToken(TokenType.PARENTESIS_CIERRE)) {
3939
flag = true;
4040
tool.incrementIndex();
41+
if (tool.verifyToken(TokenType.PUNTO_Y_COMA)) {
42+
tool.incrementIndex();
43+
}
4144
} else if (tool.verifyToken(TokenType.COMA)) {
4245
tool.incrementIndex();
4346
if (tool.isValueToken(tool.getCurrentToken())) {
4447
tool.incrementIndex();
4548
if (tool.verifyToken(TokenType.PARENTESIS_CIERRE)) {
4649
tool.incrementIndex();
4750
flag = true;
51+
if (tool.verifyToken(TokenType.PUNTO_Y_COMA)) {
52+
tool.incrementIndex();
53+
}
4854
} else {
4955
tool.showError("Se esperaba ')'");
5056
flag = false;
5157
}
5258
} else {
53-
tool.showError("Se esperaba ','");
59+
tool.showError("Se esperaba valor despues de ','");
5460
flag = false;
5561
}
5662
} else {

0 commit comments

Comments
 (0)