Beispiel #1
0
        internal void Interpret(ChurvaOptions options)
        {
            var atoms = LexicalParser.ParseSourceLines(options.Source);

            Log.DoLog = options.LogSerialise;
            var bytes = TokenSerialiser.Serialise(atoms, options.IsDebug);

            Log.DoLog = options.LogDeserialise;
            var program = TokenDeserialiser.Deserialise(bytes);

            Log.DoLog = options.LogExecute;
            ChurvaEngine.Execute(program, _context);

            if (options.ListAtoms)
            {
                Log.InfoHeader();
                Console.WriteLine($" {atoms.Count} atoms:");
                foreach (var atom in atoms)
                {
                    Console.WriteLine(atom);
                }
            }

            if (options.EchoBytes)
            {
                Log.InfoHeader();
                Console.Write(" ");
                foreach (var b in bytes)
                {
                    Console.Write($"{b:X2}");
                }
                Console.WriteLine($" ({bytes.Length}B)");
            }
        }
Beispiel #2
0
        private static ChurvaOptions OptionsFromArgs(string args, IEnumerable <string> source)
        {
            var options = new ChurvaOptions {
                IsDebug = true, Source = source
            };

            if (args.Length == 0)
            {
                return(options);
            }

            foreach (var arg in args)
            {
                switch (arg)
                {
                case 'r':
                    options.IsDebug = false;
                    break;

                case 'a':
                    options.ListAtoms = true;
                    break;

                case 'b':
                    options.EchoBytes = true;
                    break;

                case 's':
                    options.LogSerialise = true;
                    break;

                case 'd': options.LogDeserialise = true;
                    break;

                case 'e': options.LogExecute = true;
                    break;
                }
            }

            return(options);
        }
Beispiel #3
0
        static void Main(string[] args)
        {
            ResetColour();

            _churva.Interpret(
                OptionsFromArgs(
                    ":absder",
                    "#!/usr/bin/churva\r\nvar file = File.readAll(\"names.txt\")\r\neach name, n: var names = file.delimit(\'\\n\')\r\n\tTerm.stamp(\"{n}/{names.Length}\\t{name}\")\r\nTerm.stamp(\"Complete.\")"
                    .Split('\n')
                    )
                );

            if (args.Length == 0)
            {
                Console.WriteLine("Churva Interactive\n");
                while (true)
                {
                    Console.Write(">");
                    Console.ForegroundColor = ConsoleColor.Cyan;
                    var input = Console.ReadLine();
                    ResetColour();
                    if (input == null)
                    {
                        continue;
                    }
                    var parameters = "";
                    if (input.StartsWith(':'))
                    {
                        parameters = new string(input.TakeWhile(c => c != ' ').ToArray());
                    }
                    _churva.Interpret(OptionsFromArgs(parameters, new[] { input.Substring(parameters.Length) }));
                }
            }
            else
            {
                ChurvaOptions options = args.Length == 1
                            ? OptionsFromArgs("", File.ReadAllLines(args[0]))
                            : OptionsFromArgs(args[0], File.ReadAllLines(args[1]));
                _churva.Interpret(options);
            }
        }