示例#1
0
        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);
        }
示例#2
0
        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);
            }
        }