for in syntax

This commit is contained in:
nub31
2025-10-22 18:32:45 +02:00
parent 420c990731
commit 1fb88f2073
8 changed files with 172 additions and 25 deletions

View File

@@ -241,6 +241,8 @@ public sealed class Parser
return ParseIf(startIndex);
case Symbol.While:
return ParseWhile(startIndex);
case Symbol.For:
return ParseFor(startIndex);
case Symbol.Let:
return ParseVariableDeclaration(startIndex);
case Symbol.Defer:
@@ -330,6 +332,23 @@ public sealed class Parser
return new WhileSyntax(GetTokens(startIndex), condition, body);
}
private ForSyntax ParseFor(int startIndex)
{
var itemName = ExpectIdentifier().Value;
string? indexName = null;
if (TryExpectSymbol(Symbol.Comma))
{
indexName = ExpectIdentifier().Value;
}
ExpectSymbol(Symbol.In);
var target = ParseExpression();
var body = ParseBlock();
return new ForSyntax(GetTokens(startIndex), itemName, indexName, target, body);
}
private ExpressionSyntax ParseExpression(int precedence = 0)
{
var startIndex = _tokenIndex;