Added support for variable assignments

parser_exception_before
Tristan B. V. Kildaire 2021-04-01 15:49:02 +02:00
parent 07c0eb3718
commit 87e4cd2fe6
4 changed files with 50 additions and 1 deletions

View File

@ -216,6 +216,30 @@ public final class Parser
tokenPtr--;
}
public Assignment parseAssignment()
{
/* Generated Assignment statement */
Assignment assignment;
/* The identifier being assigned to */
string identifier = getCurrentToken().getToken();
nextToken();
nextToken();
/* Expression */
Expression assignmentExpression = parseExpression();
assignment = new Assignment(identifier, assignmentExpression);
/* TODO: Support for (a=1)? */
/* Expect a semicolon */
expect(SymbolType.SEMICOLON, getCurrentToken());
nextToken();
return assignment;
}
public Statement parseName()
{
Statement ret;
@ -246,6 +270,12 @@ public final class Parser
previousToken();
ret = parseTypedDeclaration();
}
/* Assignment */
else if(type == SymbolType.ASSIGN)
{
previousToken();
ret = parseAssignment();
}
/* Any other case */
else
{

View File

@ -92,6 +92,18 @@ public enum FunctionType
STATIC, VIRTUAL
}
public class Assignment : Statement
{
private string identifier;
private Expression assignmentExpression;
this(string identifier, Expression assignmentExpression)
{
this.identifier = identifier;
this.assignmentExpression = assignmentExpression;
}
}
/* Declared variables, defined classes and fucntions */
public class Entity : Statement
{

View File

@ -91,7 +91,7 @@ public final class TypeChecker
* Classes being declared before Functions and
* Functions before Variables
*/
checkContainer(modulle);
checkContainer(modulle); /* TODO: Rename checkContainerCollision */
checkIt(modulle);
}
@ -401,6 +401,11 @@ public final class TypeChecker
}
/**
* Finds the first occurring Entity with the provided
* name based on Classes being searched, then Functions
* and lastly Variables
*/
public Entity findPrecedence(Container c, string name)
{
foreach(Entity entity; getContainerMembers(c))

View File

@ -9,6 +9,8 @@ int b = a;
int c = myModule.x;
int l;
l=2;
int o = myModule.l;