diff options
| author | Elias Haugsbakk <[email protected]> | 2026-09-19 19:38:04 +0200 |
|---|---|---|
| committer | Elias Haugsbakk <[email protected]> | 2026-09-19 19:53:49 +0200 |
| commit | 6b139769f5ac88221991689ba1917d3e307dc2ef (patch) | |
| tree | a61b18a8527ed425699708a00617be11f3b3d270 /src/main/java/no/eliashaugsbakk/kompilator/parsing/node | |
| parent | 52a63a487f9d0102db339419aa392f9cd425c0c4 (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.java | 2 | ||||
| -rw-r--r-- | src/main/java/no/eliashaugsbakk/kompilator/parsing/node/expression/Identifier.java | 12 | ||||
| -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.java | 13 | ||||
| -rw-r--r-- | src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/ExpressionStatement.java | 5 | ||||
| -rw-r--r-- | src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/IdentifierDeclaration.java | 22 | ||||
| -rw-r--r-- | src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/Statement.java | 2 |
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) */ |
