|
@@ -226,12 +226,12 @@ public class IvannosysListener extends IvannosysGrammarBaseListener {
|
|
|
|
|
|
protected void DeclVar(ParserRuleContext ctx, Node node) throws Exception {
|
|
|
int i = 0;
|
|
|
- String varname, t;
|
|
|
+ String varname, t, value;
|
|
|
Node variable,
|
|
|
exprs = node.find("exprs"),
|
|
|
type = node.find("type");
|
|
|
-
|
|
|
- ArrayList<String> types = new ArrayList<>();
|
|
|
+ ArrayList<ArrayList<String>> valuesGroup = new ArrayList<>();
|
|
|
+ ArrayList<String> types = new ArrayList<>(), values;
|
|
|
ArrayList<Node> ids = node.find("ids").childrens();
|
|
|
ArrayList<ArrayList<Node>> indexes = new ArrayList<>();
|
|
|
|
|
@@ -241,11 +241,31 @@ public class IvannosysListener extends IvannosysGrammarBaseListener {
|
|
|
for (int k = 0; k < ids.size(); k++) {
|
|
|
types.add(t);
|
|
|
indexes.add(type.childrens());
|
|
|
+ values = new ArrayList<>();
|
|
|
+ if (exprs != null) {
|
|
|
+ Node e = exprs.childrens().get(k);
|
|
|
+// for (Node e : exprs.childrens()) {
|
|
|
+ switch (e.Class()) {
|
|
|
+// case "selector":
|
|
|
+// break;
|
|
|
+ default:
|
|
|
+ value = e.G("value");
|
|
|
+ switch (t) {
|
|
|
+ case "bool":
|
|
|
+ value = value.equals("true") ? "1" : "0";
|
|
|
+ }
|
|
|
+ values.add(value);
|
|
|
+// System.out.println("Ey:" + e);
|
|
|
+ }
|
|
|
+// }
|
|
|
+ }
|
|
|
+ valuesGroup.add(values);
|
|
|
}
|
|
|
} else {
|
|
|
// Quando declarado encurtado
|
|
|
//Todo fazer os tipos inferidos;
|
|
|
for (Node e : exprs.childrens()) {
|
|
|
+ values = new ArrayList<>();
|
|
|
switch (e.Class()) {
|
|
|
case "call":
|
|
|
// System.out.println("Call:" + e.getText());
|
|
@@ -265,6 +285,8 @@ public class IvannosysListener extends IvannosysGrammarBaseListener {
|
|
|
}
|
|
|
break;
|
|
|
case "literal":
|
|
|
+// System.out.println("Lit:" + e);
|
|
|
+
|
|
|
if (e.eq("subclass", "array")) {
|
|
|
ArrayList<Node> indc = new ArrayList<>();
|
|
|
indexes.add(indc);
|
|
@@ -274,6 +296,8 @@ public class IvannosysListener extends IvannosysGrammarBaseListener {
|
|
|
}
|
|
|
break;
|
|
|
case "expr":
|
|
|
+// System.out.println("Exp:" + e);
|
|
|
+
|
|
|
types.add(e.G("type"));
|
|
|
indexes.add(new ArrayList<Node>());
|
|
|
break;
|
|
@@ -283,6 +307,7 @@ public class IvannosysListener extends IvannosysGrammarBaseListener {
|
|
|
indexes.add(e.childrens());
|
|
|
break;
|
|
|
}
|
|
|
+ valuesGroup.add(values);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -303,8 +328,7 @@ public class IvannosysListener extends IvannosysGrammarBaseListener {
|
|
|
.S("subclass", "operand");
|
|
|
|
|
|
variable.copy("type,value,pointer,array,array_size", var);
|
|
|
-
|
|
|
- variable.S("var.value", varname);
|
|
|
+ variable.addList("default.values", valuesGroup.get(i));
|
|
|
|
|
|
astBaseSet(ctx, variable);
|
|
|
|
|
@@ -874,9 +898,12 @@ public class IvannosysListener extends IvannosysGrammarBaseListener {
|
|
|
astReturnLevel();
|
|
|
super.exitDef_function(ctx); //To change body of generated methods, choose Tools | Templates.
|
|
|
}
|
|
|
+
|
|
|
/**
|
|
|
- * Não possui valor padrão. corresponde a variavel da qual é chamado um metodo
|
|
|
- * @param ctx
|
|
|
+ * Não possui valor padrão. corresponde a variavel da qual é chamado um
|
|
|
+ * metodo
|
|
|
+ *
|
|
|
+ * @param ctx
|
|
|
*/
|
|
|
@Override
|
|
|
public void enterReceive_type(IvannosysGrammarParser.Receive_typeContext ctx) {
|