summaryrefslogtreecommitdiff
path: root/src/main/java/no/eliashaugsbakk/kompilator/parsing/node
diff options
context:
space:
mode:
authorElias Haugsbakk <[email protected]>2026-09-19 19:38:04 +0200
committerElias Haugsbakk <[email protected]>2026-09-19 19:53:49 +0200
commit6b139769f5ac88221991689ba1917d3e307dc2ef (patch)
treea61b18a8527ed425699708a00617be11f3b3d270 /src/main/java/no/eliashaugsbakk/kompilator/parsing/node
parent52a63a487f9d0102db339419aa392f9cd425c0c4 (diff)
add variable declaration to parser
Diffstat (limited to 'src/main/java/no/eliashaugsbakk/kompilator/parsing/node')
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/parsing/node/expression/Expression.java2
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/parsing/node/expression/Identifier.java12
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/parsing/node/expression/literal/StringLiteral.java (renamed from src/main/java/no/eliashaugsbakk/kompilator/parsing/node/expression/StringLiteral.java)4
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/Assignment.java13
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/ExpressionStatement.java5
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/IdentifierDeclaration.java22
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/Statement.java2
7 files changed, 58 insertions, 2 deletions
diff --git a/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/expression/Expression.java b/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/expression/Expression.java
index 6ca58b2..18fc585 100644
--- a/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/expression/Expression.java
+++ b/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/expression/Expression.java
@@ -4,7 +4,7 @@ import no.eliashaugsbakk.kompilator.parsing.node.ASTNode;
/**
* Base class for all expression nodes.
- * An expression is a piece of code that evaluates to a value.
+ * An expression is a piece of code that evaluates to a value. (i.e., returns a value)
* Expressions cannot stand alone as statements; they must be used within statements.
* <p>
* Examples:
diff --git a/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/expression/Identifier.java b/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/expression/Identifier.java
new file mode 100644
index 0000000..c1f475f
--- /dev/null
+++ b/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/expression/Identifier.java
@@ -0,0 +1,12 @@
+package no.eliashaugsbakk.kompilator.parsing.node.expression;
+
+/**
+ * Resolves to a variable's value
+ */
+public class Identifier extends Expression {
+ final String name;
+
+ public Identifier(String name) {
+ this.name = name;
+ }
+}
diff --git a/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/expression/StringLiteral.java b/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/expression/literal/StringLiteral.java
index 67ce405..82402ed 100644
--- a/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/expression/StringLiteral.java
+++ b/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/expression/literal/StringLiteral.java
@@ -1,4 +1,6 @@
-package no.eliashaugsbakk.kompilator.parsing.node.expression;
+package no.eliashaugsbakk.kompilator.parsing.node.expression.literal;
+
+import no.eliashaugsbakk.kompilator.parsing.node.expression.Expression;
/**
* Represents a string literal expression (e.g., "Hello, World").
diff --git a/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/Assignment.java b/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/Assignment.java
new file mode 100644
index 0000000..a54a891
--- /dev/null
+++ b/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/Assignment.java
@@ -0,0 +1,13 @@
+package no.eliashaugsbakk.kompilator.parsing.node.statement;
+
+import no.eliashaugsbakk.kompilator.parsing.node.expression.Expression;
+
+public class Assignment extends Statement {
+ final String identifier;
+ final Expression expression;
+
+ public Assignment(String identifier, Expression expression) {
+ this.identifier = identifier;
+ this.expression = expression;
+ }
+}
diff --git a/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/ExpressionStatement.java b/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/ExpressionStatement.java
index 64bc0a8..b810a04 100644
--- a/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/ExpressionStatement.java
+++ b/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/ExpressionStatement.java
@@ -2,6 +2,11 @@ package no.eliashaugsbakk.kompilator.parsing.node.statement;
import no.eliashaugsbakk.kompilator.parsing.node.expression.Expression;
+/**
+ * A statement which holds an expression.
+ * print("hello"); does not have a return value; it is a statement, but it is also
+ * function call.
+ */
public class ExpressionStatement extends Statement {
public Expression expression;
public ExpressionStatement(Expression expression) {
diff --git a/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/IdentifierDeclaration.java b/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/IdentifierDeclaration.java
new file mode 100644
index 0000000..e7db477
--- /dev/null
+++ b/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/IdentifierDeclaration.java
@@ -0,0 +1,22 @@
+package no.eliashaugsbakk.kompilator.parsing.node.statement;
+
+import no.eliashaugsbakk.kompilator.parsing.Type;
+import no.eliashaugsbakk.kompilator.parsing.node.expression.Expression;
+
+public class IdentifierDeclaration extends Statement {
+ // identifier name: [my_var]: type = 4;
+ final String identifier;
+
+ // identifier type: my_var: [type] = 4;
+ final Type type;
+
+ // identifier initialization: my_var: type [4];
+ // may be null: my_var: type?;
+ final Expression expression; // may be null: x: int?;
+
+ public IdentifierDeclaration(String identifier, Type type, Expression expression) {
+ this.identifier = identifier;
+ this.type = type;
+ this.expression = expression;
+ }
+}
diff --git a/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/Statement.java b/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/Statement.java
index fc52f9a..aed21ad 100644
--- a/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/Statement.java
+++ b/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/Statement.java
@@ -5,9 +5,11 @@ import no.eliashaugsbakk.kompilator.parsing.node.ASTNode;
/**
* Base class for all statement nodes.
* A statement is a top-level line of code that performs an action.
+ * No return value.
* <p>
* Examples:
* - print("Hello"); (function call statement)
+ * x my_value = my_func("Hello"); (not a statement - it has a return value)
* - var x: int = 5; (variable declaration statement)
* - if (x > 0) { } (conditional statement)
*/