Skip to content

Commit 5a06ed0

Browse files
author
estudiante
committed
Fix the second problem
1 parent 17a1f0a commit 5a06ed0

34 files changed

Lines changed: 1247 additions & 79 deletions

.idea/workspace.xml

Lines changed: 36 additions & 27 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package ko.carbonel.compiler.exception;
2+
3+
import ko.carbonel.compiler.stream.reader.FileLocation;
4+
5+
public class FloatingMethodError extends SyntaxError {
6+
public FloatingMethodError(FileLocation start) {
7+
super(start, "Non-main method declared outside of a class");
8+
}
9+
}

src/main/java/ko/carbonel/compiler/generated/AttrTinyRustParser.java

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ protected void matchToken_program(){
3131
if (peek(TinyRustTokenType.FN)){
3232
st.setMainActive();
3333
TinyRustLexerToken v_1 = match(TinyRustTokenType.FN);
34-
TinyRustLexerToken v_2 = match(TinyRustTokenType.MAIN);
35-
st.activeMethod.setName(v_2);
34+
TinyRustLexerToken v_2 = match(TinyRustTokenType.ATTR_ID);
35+
st.activeMethod.setMainName(v_2);
3636
TinyRustLexerToken v_4 = match(TinyRustTokenType.OPN_PAREN);
3737
TinyRustLexerToken v_5 = match(TinyRustTokenType.CLS_PAREN);
3838
TinyRustLexerToken v_6 = match(TinyRustTokenType.OPN_BRACE);
@@ -43,8 +43,8 @@ protected void matchToken_program(){
4343
List<TinyRustLexerToken> v_0 = matchToken_Class_star();
4444
st.setMainActive();
4545
TinyRustLexerToken v_2 = match(TinyRustTokenType.FN);
46-
TinyRustLexerToken v_3 = match(TinyRustTokenType.MAIN);
47-
st.activeMethod.setName(v_3);
46+
TinyRustLexerToken v_3 = match(TinyRustTokenType.ATTR_ID);
47+
st.activeMethod.setMainName(v_3);
4848
TinyRustLexerToken v_5 = match(TinyRustTokenType.OPN_PAREN);
4949
TinyRustLexerToken v_6 = match(TinyRustTokenType.CLS_PAREN);
5050
TinyRustLexerToken v_7 = match(TinyRustTokenType.OPN_BRACE);
@@ -1207,31 +1207,13 @@ private List<TinyRustLexerToken> matchToken_Stmt_star(){
12071207
private List<TinyRustLexerToken> matchToken_Stmt(){
12081208
enter("matchToken_Stmt");
12091209
List<TinyRustLexerToken> result = null;
1210-
if (peek(TinyRustTokenType.RETURN)){
1211-
st.newReturn();
1212-
TinyRustLexerToken v_1 = match(TinyRustTokenType.RETURN);
1213-
List<TinyRustLexerToken> v_2 = matchToken_Stmt_factored();
1214-
st.endReturn();
1215-
} else if (peek(TinyRustTokenType.OPN_PAREN)){
1210+
if (peek(TinyRustTokenType.OPN_PAREN)){
12161211
st.newExpr();
12171212
TinyRustLexerToken v_1 = match(TinyRustTokenType.OPN_PAREN);
12181213
List<TinyRustLexerToken> v_2 = matchToken_ExpOr();
12191214
TinyRustLexerToken v_3 = match(TinyRustTokenType.CLS_PAREN);
12201215
TinyRustLexerToken v_4 = match(TinyRustTokenType.SEMI_COLON);
12211216
st.endExpr();
1222-
} else if (peek(TinyRustTokenType.IF)){
1223-
st.newIf();
1224-
TinyRustLexerToken v_1 = match(TinyRustTokenType.IF);
1225-
TinyRustLexerToken v_2 = match(TinyRustTokenType.OPN_PAREN);
1226-
List<TinyRustLexerToken> v_3 = matchToken_ExpOr();
1227-
TinyRustLexerToken v_4 = match(TinyRustTokenType.CLS_PAREN);
1228-
st.ifBlock();
1229-
List<TinyRustLexerToken> v_6 = matchToken_Stmt();
1230-
List<TinyRustLexerToken> v_7 = matchToken_Stmt_factored_factored_factored();
1231-
st.ifEnd();
1232-
} else if (peek(TinyRustTokenType.SEMI_COLON)){
1233-
st.newEmpty();
1234-
TinyRustLexerToken v_1 = match(TinyRustTokenType.SEMI_COLON);
12351217
} else if (peek(TinyRustTokenType.WHILE)){
12361218
st.newWhile();
12371219
TinyRustLexerToken v_1 = match(TinyRustTokenType.WHILE);
@@ -1245,10 +1227,28 @@ private List<TinyRustLexerToken> matchToken_Stmt(){
12451227
st.newAssign();
12461228
List<TinyRustLexerToken> v_1 = matchToken_Assign();
12471229
TinyRustLexerToken v_2 = match(TinyRustTokenType.SEMI_COLON);
1230+
} else if (peek(TinyRustTokenType.RETURN)){
1231+
st.newReturn();
1232+
TinyRustLexerToken v_1 = match(TinyRustTokenType.RETURN);
1233+
List<TinyRustLexerToken> v_2 = matchToken_Stmt_factored();
1234+
st.endReturn();
1235+
} else if (peek(TinyRustTokenType.SEMI_COLON)){
1236+
st.newEmpty();
1237+
TinyRustLexerToken v_1 = match(TinyRustTokenType.SEMI_COLON);
12481238
} else if (peek(TinyRustTokenType.OPN_BRACE)){
12491239
st.newBlock();
12501240
TinyRustLexerToken v_1 = match(TinyRustTokenType.OPN_BRACE);
12511241
List<TinyRustLexerToken> v_2 = matchToken_Method_factored();
1242+
} else if (peek(TinyRustTokenType.IF)){
1243+
st.newIf();
1244+
TinyRustLexerToken v_1 = match(TinyRustTokenType.IF);
1245+
TinyRustLexerToken v_2 = match(TinyRustTokenType.OPN_PAREN);
1246+
List<TinyRustLexerToken> v_3 = matchToken_ExpOr();
1247+
TinyRustLexerToken v_4 = match(TinyRustTokenType.CLS_PAREN);
1248+
st.ifBlock();
1249+
List<TinyRustLexerToken> v_6 = matchToken_Stmt();
1250+
List<TinyRustLexerToken> v_7 = matchToken_Stmt_factored_factored_factored();
1251+
st.ifEnd();
12521252
} else {
12531253
handleUnexpectedToken("Stmt", Set.of(TinyRustTokenType.ATTR_ID, TinyRustTokenType.IF, TinyRustTokenType.OPN_BRACE, TinyRustTokenType.OPN_PAREN, TinyRustTokenType.RETURN, TinyRustTokenType.SELF, TinyRustTokenType.SEMI_COLON, TinyRustTokenType.WHILE));
12541254
}
@@ -1346,4 +1346,4 @@ private List<TinyRustLexerToken> matchToken_program_factored_factored_factored_f
13461346
exit("matchToken_program_factored_factored_factored_factored");
13471347
return result;
13481348
}
1349-
}
1349+
}

src/main/java/ko/carbonel/compiler/generated/TinyRustParser.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -571,14 +571,14 @@ protected void matchToken_program(){
571571
if (peek(TinyRustTokenType.CLASS)){
572572
matchToken_Class_0orMore();
573573
match(TinyRustTokenType.FN);
574-
match(TinyRustTokenType.MAIN);
574+
match(TinyRustTokenType.ATTR_ID);
575575
match(TinyRustTokenType.OPN_PAREN);
576576
match(TinyRustTokenType.CLS_PAREN);
577577
match(TinyRustTokenType.OPN_BRACE);
578578
matchToken_program_factored_factored_factored_factored();
579579
} else if (peek(TinyRustTokenType.FN)){
580580
match(TinyRustTokenType.FN);
581-
match(TinyRustTokenType.MAIN);
581+
match(TinyRustTokenType.ATTR_ID);
582582
match(TinyRustTokenType.OPN_PAREN);
583583
match(TinyRustTokenType.CLS_PAREN);
584584
match(TinyRustTokenType.OPN_BRACE);
@@ -1063,4 +1063,4 @@ private void matchToken__primeeturnType(){
10631063
}
10641064
exit("matchToken__primeeturnType");
10651065
}
1066-
}
1066+
}

src/main/java/ko/carbonel/compiler/intermediate/tinyRust/ts/ChainResolver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public static Object resolveChaining(ClassEntry classEntry, List<TinyRustLexerTo
2323
public static Object resolveChaining(TinyRustSymbolTable tinyRustSymbolTable, List<TinyRustLexerToken> tokens) {
2424
if (tokens.isEmpty()) return null;
2525
if (tokens.get(0).type() != TinyRustTokenType.CLASS_ID) {
26-
if (tokens.get(0).type() == TinyRustTokenType.MAIN) {
26+
if (TinyRustTokenType.isMain(tokens.get(0))) {
2727
return tinyRustSymbolTable.main;
2828
}
2929
throw new ClassNotFoundError(tokens.get(0));

src/main/java/ko/carbonel/compiler/intermediate/tinyRust/ts/MethodEntry.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package ko.carbonel.compiler.intermediate.tinyRust.ts;
22

33
import ko.carbonel.Utils;
4+
import ko.carbonel.compiler.exception.FloatingMethodError;
45
import ko.carbonel.compiler.exception.semantic.*;
56
import ko.carbonel.compiler.intermediate.SymbolTable;
67
import ko.carbonel.compiler.intermediate.tinyRust.CalledByParser;
@@ -103,6 +104,14 @@ public void setName(TinyRustLexerToken name) {
103104
this.name = name;
104105
}
105106

107+
@CalledByParser
108+
public void setMainName(TinyRustLexerToken name) {
109+
this.name = name;
110+
if (!TinyRustTokenType.isMain(name)){
111+
throw new FloatingMethodError(name.location());
112+
}
113+
}
114+
106115
public void consolidate() {
107116
List<VariableEntry> repeatedVariables = Utils.getRepeatedAttributeNames(variables);
108117
List<VariableEntry> repeatedParameters = Utils.getRepeatedAttributeNames(parameters);

src/main/java/ko/carbonel/compiler/runner/language/ENLanguage.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,6 @@ public String translate(TinyRustTokenType t) {
139139
case STR_DATA -> "String";
140140
case CHR_DATA -> "Character";
141141
case EOF -> "End self file";
142-
case MAIN -> "Main function";
143142
case CREATE -> "Constructor";
144143
case ATTR_ID -> "Attribute ID";
145144
case CLASS_ID -> "Class ID";

src/main/java/ko/carbonel/compiler/runner/language/TeacherLanguage.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,6 @@ public String translate(TinyRustTokenType t) {
139139
case STR_DATA -> "Cadena";
140140
case CHR_DATA -> a() ? "Caracter" : "Caráctér";
141141
case EOF -> "Fin de archivo";
142-
case MAIN -> a() ? "Funcion main" : "Función main";
143142
case CREATE -> "Constructor";
144143
case ATTR_ID -> "Identificador de atributo";
145144
case CLASS_ID -> "Identificador de clase";

src/main/java/ko/carbonel/compiler/stream/lexer/tinyRust/TinyRustLexer.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ private TinyRustTokenType getTokenTypeForID(String s) {
7979
case "false" -> TinyRustTokenType.FALSE;
8080
case "new" -> TinyRustTokenType.NEW;
8181
case "create" -> TinyRustTokenType.CREATE;
82-
case "main" -> TinyRustTokenType.MAIN;
8382
default -> TinyRustTokenType.ATTR_ID;
8483
};
8584
}

0 commit comments

Comments
 (0)