using CanonSharp.Combinator.Abstractions; using CanonSharp.Pascal.Parser; using CanonSharp.Pascal.Scanner; using CanonSharp.Pascal.SyntaxTree; namespace CanonSharp.Tests.Utils; public abstract class GrammarParserTestBase { protected static T RunParser(IParser parser, string input) where T : SyntaxNodeBase { LexicalScanner scanner = new(); LexicalTokenReadState state = new(scanner.Tokenize(new StringReadState(input))); IParseResult parseResult = parser.Parse(state); return parseResult.Value.Convert(); } protected static List RunParser(IParser> parser, string input) where T : SyntaxNodeBase { LexicalScanner scanner = new(); LexicalTokenReadState state = new(scanner.Tokenize(new StringReadState(input))); IParseResult> parseResult = parser.Parse(state); return parseResult.Value.Select(node => node.Convert()).ToList(); } protected static Program ProgramParse(string input) => RunParser(GrammarParser.ProgramParser(), input); }