This commit is contained in:
nub31
2026-02-09 20:49:09 +01:00
parent 96670b1201
commit ab9bd6fd05
9 changed files with 300 additions and 176 deletions

View File

@@ -28,7 +28,7 @@ public sealed class Parser(string fileName, List<Token> tokens)
diagnostics.Add(e.Diagnostic);
}
return new Ast(definitions);
return new Ast(definitions, fileName);
}
private NodeDefinition ParseDefinition()
@@ -82,12 +82,6 @@ public sealed class Parser(string fileName, List<Token> tokens)
return new NodeDefinitionModule(TokensFrom(startIndex), name);
}
if (TryExpectKeyword(Keyword.Import))
{
var name = ExpectIdent();
return new NodeDefinitionImport(TokensFrom(startIndex), name);
}
throw new CompileException(Diagnostic.Error("Not a valid definition").At(fileName, Peek()).Build());
}
@@ -244,7 +238,15 @@ public sealed class Parser(string fileName, List<Token> tokens)
}
else if (TryExpectIdent(out var ident))
{
expr = new NodeExpressionIdent(TokensFrom(startIndex), ident);
if (TryExpectSymbol(Symbol.ColonColon))
{
var name = ExpectIdent();
expr = new NodeExpressionModuleIdent(TokensFrom(startIndex), ident, name);
}
else
{
expr = new NodeExpressionLocalIdent(TokensFrom(startIndex), ident);
}
}
else if (TryExpectKeyword(Keyword.Struct))
{
@@ -532,8 +534,9 @@ public sealed class Parser(string fileName, List<Token> tokens)
}
}
public sealed class Ast(List<NodeDefinition> definitions)
public sealed class Ast(List<NodeDefinition> definitions, string fileName)
{
public string FileName = fileName;
public readonly List<NodeDefinition> Definitions = definitions;
}
@@ -549,11 +552,6 @@ public sealed class NodeDefinitionModule(List<Token> tokens, TokenIdent name) :
public readonly TokenIdent Name = name;
}
public sealed class NodeDefinitionImport(List<Token> tokens, TokenIdent name) : NodeDefinition(tokens)
{
public readonly TokenIdent Name = name;
}
public sealed class NodeDefinitionFunc(List<Token> tokens, TokenIdent name, List<NodeDefinitionFunc.Param> parameters, NodeStatement body, NodeType returnType) : NodeDefinition(tokens)
{
public readonly TokenIdent Name = name;
@@ -660,11 +658,17 @@ public sealed class NodeExpressionMemberAccess(List<Token> tokens, NodeExpressio
public readonly TokenIdent Name = name;
}
public sealed class NodeExpressionIdent(List<Token> tokens, TokenIdent value) : NodeExpression(tokens)
public sealed class NodeExpressionLocalIdent(List<Token> tokens, TokenIdent value) : NodeExpression(tokens)
{
public readonly TokenIdent Value = value;
}
public sealed class NodeExpressionModuleIdent(List<Token> tokens, TokenIdent module, TokenIdent value) : NodeExpression(tokens)
{
public readonly TokenIdent Module = module;
public readonly TokenIdent Value = value;
}
public sealed class NodeExpressionBinary(List<Token> tokens, NodeExpression left, NodeExpressionBinary.Op operation, NodeExpression right) : NodeExpression(tokens)
{
public readonly NodeExpression Left = left;