summaryrefslogtreecommitdiffstats
path: root/src/ast/types
diff options
context:
space:
mode:
authorSanto Cariotti <santo@dcariotti.me>2024-06-30 11:45:57 +0000
committerGitHub <noreply@github.com>2024-06-30 11:45:57 +0000
commit8aa8b5834953cab15c0687608f4fafea2e6c61be (patch)
tree1835ae7c789136b4a6c44c12efd4247a0b96d893 /src/ast/types
parent7125bb27fedaafd5a56b5122e4251b182448ddac (diff)
parent06d7c8dee25c065b1a569337f34d3cd5e892a31d (diff)
Merge pull request #10 from boozec/check-semantics
Co-Authored-By: geno <gabriele.genovese2@studio.unibo.it> Co-Authored-By: L0P0P <grassoemanuele@live.com>
Diffstat (limited to 'src/ast/types')
-rw-r--r--src/ast/types/AtomType.java3
-rw-r--r--src/ast/types/BoolType.java2
-rw-r--r--src/ast/types/ErrorType.java2
-rw-r--r--src/ast/types/FunctionType.java29
-rw-r--r--src/ast/types/ImportType.java12
-rw-r--r--src/ast/types/IntType.java2
-rw-r--r--src/ast/types/NoneType.java17
-rw-r--r--src/ast/types/ReservedWordsType.java12
-rw-r--r--src/ast/types/Type.java11
-rw-r--r--src/ast/types/VoidType.java7
10 files changed, 90 insertions, 7 deletions
diff --git a/src/ast/types/AtomType.java b/src/ast/types/AtomType.java
index 0387ec1..fc1c69e 100644
--- a/src/ast/types/AtomType.java
+++ b/src/ast/types/AtomType.java
@@ -2,9 +2,10 @@ package ast.types;
/**
* An tom type.
- * TODO: do I need to use this one?
*/
public class AtomType extends Type {
+
+ @Override
public String toPrint(String prefix) {
return prefix + "Atom\n";
}
diff --git a/src/ast/types/BoolType.java b/src/ast/types/BoolType.java
index 20c2750..01e2cd5 100644
--- a/src/ast/types/BoolType.java
+++ b/src/ast/types/BoolType.java
@@ -4,6 +4,8 @@ package ast.types;
* A boolean type. A bool is True or False.
*/
public class BoolType extends Type {
+
+ @Override
public String toPrint(String prefix) {
return prefix + "Bool\n";
}
diff --git a/src/ast/types/ErrorType.java b/src/ast/types/ErrorType.java
index 4a7a0cf..71176d1 100644
--- a/src/ast/types/ErrorType.java
+++ b/src/ast/types/ErrorType.java
@@ -4,6 +4,8 @@ package ast.types;
* Error type.
*/
public class ErrorType extends Type {
+
+ @Override
public String toPrint(String prefix) {
return prefix + "Error\n";
}
diff --git a/src/ast/types/FunctionType.java b/src/ast/types/FunctionType.java
new file mode 100644
index 0000000..5e6adaa
--- /dev/null
+++ b/src/ast/types/FunctionType.java
@@ -0,0 +1,29 @@
+package ast.types;
+
+/**
+ * A Function type.
+ */
+public class FunctionType extends Type {
+
+ private final int paramNumber;
+ private final Type returnType;
+
+ public FunctionType(int paramNumber, Type returnType) {
+ this.paramNumber = paramNumber;
+ this.returnType = returnType;
+ }
+
+ // Return the length of the parameters
+ public int getParamNumber() {
+ return paramNumber;
+ }
+
+ public Type getReturnType() {
+ return returnType;
+ }
+
+ @Override
+ public String toPrint(String prefix) {
+ return prefix + "Function\n";
+ }
+}
diff --git a/src/ast/types/ImportType.java b/src/ast/types/ImportType.java
new file mode 100644
index 0000000..892de10
--- /dev/null
+++ b/src/ast/types/ImportType.java
@@ -0,0 +1,12 @@
+package ast.types;
+
+/**
+ * A type for the imported names.
+ */
+public class ImportType extends Type {
+
+ @Override
+ public String toPrint(String prefix) {
+ return prefix + "Import\n";
+ }
+}
diff --git a/src/ast/types/IntType.java b/src/ast/types/IntType.java
index a29518b..6483d93 100644
--- a/src/ast/types/IntType.java
+++ b/src/ast/types/IntType.java
@@ -4,6 +4,8 @@ package ast.types;
* An integer type.
*/
public class IntType extends Type {
+
+ @Override
public String toPrint(String prefix) {
return prefix + "Int\n";
}
diff --git a/src/ast/types/NoneType.java b/src/ast/types/NoneType.java
new file mode 100644
index 0000000..730add9
--- /dev/null
+++ b/src/ast/types/NoneType.java
@@ -0,0 +1,17 @@
+package ast.types;
+
+/**
+ * A none type. None return unit.
+ */
+public class NoneType extends Type {
+
+ @Override
+ public String toPrint(String prefix) {
+ return prefix + "None\n";
+ }
+
+ @Override
+ public String toString() {
+ return "None";
+ }
+}
diff --git a/src/ast/types/ReservedWordsType.java b/src/ast/types/ReservedWordsType.java
new file mode 100644
index 0000000..da72890
--- /dev/null
+++ b/src/ast/types/ReservedWordsType.java
@@ -0,0 +1,12 @@
+package ast.types;
+
+/**
+ * A type for the continue and break statements.
+ */
+public class ReservedWordsType extends Type {
+
+ @Override
+ public String toPrint(String prefix) {
+ return prefix + "ReservedWords\n";
+ }
+}
diff --git a/src/ast/types/Type.java b/src/ast/types/Type.java
index 6bff8b9..6190106 100644
--- a/src/ast/types/Type.java
+++ b/src/ast/types/Type.java
@@ -1,26 +1,25 @@
package ast.types;
+import ast.nodes.*;
import java.util.ArrayList;
-
import semanticanalysis.SemanticError;
import semanticanalysis.SymbolTable;
-import ast.nodes.*;
/**
* A node which represents a type class.
*/
public class Type implements Node {
+
public boolean isEqual(Type A, Type B) {
- if (A.getClass().equals(B.getClass()))
- return true;
- else
- return false;
+ return A.getClass().equals(B.getClass());
}
+ @Override
public String toPrint(String s) {
return s;
}
+ @Override
public ArrayList<SemanticError> checkSemantics(SymbolTable ST, int _nesting) {
// It is never invoked
return null;
diff --git a/src/ast/types/VoidType.java b/src/ast/types/VoidType.java
index d15933f..2d21da6 100644
--- a/src/ast/types/VoidType.java
+++ b/src/ast/types/VoidType.java
@@ -4,7 +4,14 @@ package ast.types;
* A void type. Voids return nothing.
*/
public class VoidType extends Type {
+
+ @Override
public String toPrint(String prefix) {
return prefix + "Void\n";
}
+
+ @Override
+ public String toString() {
+ return "Void";
+ }
}