MParser/Parser/MParser.cs

39 lines
1.1 KiB
C#

using System;
using Parser.Internal;
namespace Parser
{
public class MParser
{
private readonly ITextWindow _window;
public MParser(ITextWindow window)
{
_window = window;
}
public SyntaxTree Parse()
{
var lexer = new Internal.MLexerGreen(_window);
var diagnostics = lexer.Diagnostics;
var tokens = lexer.ParseAll();
var parser = new Internal.MParserGreen(tokens, new Internal.SyntaxFactory());
var green = parser.ParseFile();
var root = new FileSyntaxNode(null, green);
return new SyntaxTree(root, diagnostics);
}
}
public class SyntaxTree
{
public SyntaxTree(FileSyntaxNode root, DiagnosticsBag diagnostics)
{
Root = root ?? throw new ArgumentNullException(nameof(root));
Diagnostics = diagnostics ?? throw new ArgumentNullException(nameof(diagnostics));
}
public FileSyntaxNode Root { get; }
public DiagnosticsBag Diagnostics { get; }
}
}