Skip to content

Commit d73cd5f

Browse files
committed
List are almacened in stack
1 parent 2065381 commit d73cd5f

File tree

4 files changed

+61
-5
lines changed

4 files changed

+61
-5
lines changed

.idea/libraries/jni4net_bin_0_8_8_0.xml

+26
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Proyecto Compi.iml

+1
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,6 @@
1010
<orderEntry type="library" name="antlr-4.8-complete" level="project" />
1111
<orderEntry type="library" name="rsyntaxtextarea-3.1.1" level="project" />
1212
<orderEntry type="library" name="antlr-4.8-complete (2)" level="project" />
13+
<orderEntry type="library" name="jni4net-bin-0.8.8.0" level="project" />
1314
</component>
1415
</module>
Binary file not shown.

src/codeGeneration/CodeVM.java

+34-5
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import java.util.ArrayList;
88

9+
910
public class CodeVM extends MonkeyParserBaseVisitor<Object> {
1011

1112
//private int letmain;
@@ -104,10 +105,12 @@ public Object visitLetStatementAST(MonkeyParser.LetStatementASTContext ctx) {
104105
forgetType();
105106
ctxLet = ctx; //save the ctx as aux
106107

108+
this.tablaIDS.insertar(ctx.IDENT().getSymbol(),0,ctx);
109+
107110
// If is function
108111
if(ctx.getText().split("\\=")[1].startsWith("fn(")){
109112
isFunct = true;
110-
this.tablaIDS.insertar(ctx.IDENT().getSymbol(),0,ctx);
113+
//this.tablaIDS.insertar(ctx.IDENT().getSymbol(),0,ctx);
111114

112115
if(ctx.IDENT().getText().toLowerCase().equals("main") && level == 0){
113116
letmain = true;
@@ -126,8 +129,17 @@ public Object visitLetStatementAST(MonkeyParser.LetStatementASTContext ctx) {
126129
// if is List
127130
else if(ctx.getText().split("\\=")[1].startsWith("[")){
128131
isList = true;
129-
visit(ctx.expression());
130-
//System.out.println("IDENT: " +ctx.IDENT() +" Level: " + level +" => []");
132+
if(level == 0 | letmain){
133+
this.generate(this.index,"PUSH_GLOBAL_I",ctx.IDENT().getText());
134+
visit(ctx.expression());
135+
this.generate(this.index,"STORE_GLOBAL",ctx.IDENT().getText());
136+
}else{
137+
this.generate(this.index,"PUSH_LOCAL_I",ctx.IDENT().getText());
138+
visit(ctx.expression());
139+
this.generate(this.index,"STORE_FAST",ctx.IDENT().getText());
140+
}
141+
142+
131143
}
132144
// if is hash
133145
else if(ctx.getText().split("\\=")[1].startsWith("{")){
@@ -429,6 +441,8 @@ public Object visitArrayFunctions_restAST(MonkeyParser.ArrayFunctions_restASTCon
429441

430442
@Override
431443
public Object visitArrayFunctions_pushAST(MonkeyParser.ArrayFunctions_pushASTContext ctx) {
444+
// Este el profe dijo que no habia que implementarlo por el chat de Whatsapp, 9/12/2020, 09:28 am
445+
432446
return null;
433447
}
434448

@@ -487,15 +501,30 @@ public Object visitHashLiteralAST(MonkeyParser.HashLiteralASTContext ctx) {
487501

488502
@Override
489503
public Object visitHashContentAST(MonkeyParser.HashContentASTContext ctx) {
504+
if(!ctx.expression().isEmpty()){
505+
for (int i = 0; i < ctx.expression().size(); i++) {
506+
visit(ctx.expression(i));
507+
}
508+
}
509+
//System.err.println(ctx.getText());
490510
return ctx.getText();
491511
}
492512

493513
@Override
494514
public Object visitExpressionList_expressionAST(MonkeyParser.ExpressionList_expressionASTContext ctx) {
495515
//System.out.println("Array size: " + ctx.expression().size());
496-
for (int i = 0; i < ctx.expression().size(); i++) {
497-
//System.out.println("Data array, index " + i + " : " + visit(ctx.expression(i)));
516+
if(!ctx.expression().isEmpty()){
517+
for (int i = 0; i < ctx.expression().size(); i++) {
518+
visit(ctx.expression(i));
519+
}
498520
}
521+
522+
// if is let & list
523+
if(isList && isLet){
524+
System.out.println("Size: " + ctx.expression().size());
525+
this.generate(this.index, "BUILD_LIST", ctx.expression().size());
526+
}
527+
499528
return null;
500529
}
501530

0 commit comments

Comments
 (0)