This commit is contained in:
nub31
2025-10-31 15:18:18 +01:00
parent 7c7624b1bc
commit 40d500fddd
8 changed files with 231 additions and 188 deletions

View File

@@ -105,8 +105,8 @@ public class Diagnostic
sb.AppendLine();
var text = File.ReadAllText(Span.Value.FilePath);
var tokenizer = new Tokenizer(Span.Value.FilePath, text);
tokenizer.Tokenize();
var tokenizer = new Tokenizer();
tokenizer.Tokenize(Span.Value.FilePath, text);
var lines = text.Split('\n');

View File

@@ -161,6 +161,12 @@ public sealed class ModuleRepository
return module;
}
public bool TryGet(IdentifierToken ident, [NotNullWhen(true)] out Module? module)
{
module = _modules.GetValueOrDefault(ident.Value);
return module != null;
}
public sealed class Module
{
public required string Name { get; init; }

View File

@@ -11,14 +11,15 @@ public sealed class Parser
private Token? CurrentToken => _tokenIndex < _tokens.Count ? _tokens[_tokenIndex] : null;
private bool HasToken => CurrentToken != null;
public List<Diagnostic> Diagnostics { get; } = [];
public List<Diagnostic> Diagnostics { get; set; } = [];
public SyntaxTree Parse(List<Token> tokens)
{
Diagnostics.Clear();
_tokens = tokens;
_tokenIndex = 0;
Diagnostics = [];
var topLevelSyntaxNodes = new List<TopLevelSyntaxNode>();
while (HasToken)

View File

@@ -4,25 +4,23 @@ namespace NubLang.Syntax;
public sealed class Tokenizer
{
private readonly string _fileName;
private readonly string _content;
private string _fileName = null!;
private string _content = null!;
private int _index;
private int _line = 1;
private int _column = 1;
public Tokenizer(string fileName, string content)
public List<Diagnostic> Diagnostics { get; set; } = new(16);
public List<Token> Tokens { get; set; } = new(256);
public void Tokenize(string fileName, string content)
{
_fileName = fileName;
_content = content;
}
public List<Diagnostic> Diagnostics { get; } = new(16);
public List<Token> Tokens { get; } = new(256);
Diagnostics = [];
Tokens = [];
public void Tokenize()
{
Diagnostics.Clear();
Tokens.Clear();
_index = 0;
_line = 1;
_column = 1;