コード例 #1
0
        private static void Main()
        {
            var show_tree = false;

            while (true)
            {
                Console.WriteLine();
                Console.Write(" L(~ __ ~)__/  ");
                var input_line = Console.ReadLine();
                Console.WriteLine();

                if (string.IsNullOrWhiteSpace(input_line))
                {
                    return;
                }

                if (input_line == "#showtree")
                {
                    show_tree = !show_tree;
                    Console.WriteLine(show_tree ? "Displaying Parse trees." : "Not able to show Parse tree");
                    continue;
                }

                else if (input_line == "#cls")
                {
                    Console.Clear();
                    continue;
                }

                var syntax_tree_object = Syntax_Tree.Parse(input_line);
                var compilation        = new Compilation(syntax_tree_object);
                var result             = compilation.Evaluate();

                var diagnostics = result.Diagnostics;

                if (show_tree)
                {
                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Sample_Print(syntax_tree_object.Root_Node);
                    Console.ResetColor();
                }

                if (!diagnostics.Any())
                {
                    Console.WriteLine(result.Value);
                }
                else
                {
                    foreach (var diagnostic in diagnostics)
                    {
                        Console.WriteLine();

                        Console.ForegroundColor = ConsoleColor.DarkRed;
                        Console.WriteLine(diagnostic);
                        Console.ResetColor();

                        var prefix = input_line.Substring(0, diagnostic.Span.Start);
                        var error  = input_line.Substring(diagnostic.Span.Start, diagnostic.Span.Length);
                        var suffix = input_line.Substring(diagnostic.Span.End);

                        Console.Write("   ");
                        Console.Write(prefix);

                        Console.ForegroundColor = ConsoleColor.DarkRed;
                        Console.Write(error);
                        Console.ResetColor();

                        Console.Write(suffix);
                        Console.WriteLine();
                    }
                }
            }
        }
コード例 #2
0
        public Compilation(Syntax_Tree syntax)
        {
            ss value

                Syntax = syntax;
        }
コード例 #3
0
 public Compilation(Syntax_Tree syntax)
 {
     Syntax = syntax;
 }
コード例 #4
0
        private static void Main()
        {
            var show_tree = false;

            while (true)
            {
                Console.WriteLine();
                Console.Write(" L(~ __ ~)__/  ");
                var input_line = Console.ReadLine();
                Console.WriteLine();

                if (string.IsNullOrWhiteSpace(input_line))
                {
                    return;
                }

                if (input_line == "#showtree")
                {
                    show_tree = !show_tree;
                    Console.WriteLine(show_tree ? "Displaying Parse trees." : "Not able to show Parse tree");
                    continue;
                }

                else if (input_line == "#cls")
                {
                    Console.Clear();
                    continue;
                }

                var syntax_tree_object = Syntax_Tree.Parse(input_line);
                var compilation        = new Compilation(syntax_tree_object);
                var result             = compilation.Evaluate();

                var diagnostics = result.Diagnostics;

                if (show_tree)
                {
                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Sample_Print(syntax_tree_object.Root_Node);
                    Console.ResetColor();
                }

                if (!diagnostics.Any())
                {
                    Console.WriteLine(result.Value);
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.DarkRed;

                    foreach (var diagnostic in diagnostics)
                    {
                        Console.WriteLine(diagnostic);
                    }

                    Console.ResetColor();
                }

                // var lexer_object = new Lexer(input_line);
                // while (true)
                // {
                //     var current_token = lexer_object.Next_Token_in_Set();
                //     if (current_token.Kind_Of_Token == Syntax_Kind_of_Token.End_of_File_Token)
                //         break;

                //     Console.Write($"{current_token.Kind_Of_Token} : '{current_token.Text}' ----> ");
                //     if (current_token.Value != null)
                //         Console.Write($"{current_token.Value}");

                //     Console.WriteLine();
                // }
            }
        }