private Unit LoadUnit(Package package, FileRef unitFile) { var source = Source.FromFile(unitFile); var tokenizer = new PonyTokenizer(Errors, source); tokenizer.Tokenize(); var parser = new PonyParser(Errors, source, tokenizer.Tokens); var ptUnit = parser.Unit(); var unit = new Unit(ptUnit, unitFile, package); foreach (var use in unit.Source.Uses) { switch (use) { case PtUseUri useUri: unit.Uses.Add(DecodeUseUri(useUri)); break; case PtUseFfi useFfi: unit.Uses.Add(DecodeUseFfi(useFfi)); break; default: throw new System.InvalidOperationException(); } } return(unit); }
private static bool PonyParse(Errors errors, ref int lines, int no, FileRef ponyFile) { Console.WriteLine($"{no}. {ponyFile}"); var source = Source.FromFile(ponyFile); lines += source.LineCount; var tokenizer = new PonyTokenizer(errors, source); try { tokenizer.Tokenize(); } catch (JokeException joke) { joke.Error.Description.Describe(Console.Out); return(false); } var parser = new PonyParser(errors, source, tokenizer.Tokens); try { var module = parser.Unit(); errors.Describe(Console.Out); return(errors.NoError()); } catch (JokeException joke) { joke.Error.Description.Describe(Console.Out); return(false); } }