Example #1
0
        private static void Main(string[] args)
        {
            try
            {
                string       input = "";
                FileStream   ostrm;
                StreamWriter writer;
                TextWriter   oldOut = Console.Out;
                try
                {
                    ostrm  = new FileStream("./Redirect.txt", FileMode.OpenOrCreate, FileAccess.Write);
                    writer = new StreamWriter(ostrm);
                }
                catch (Exception e)
                {
                    Console.WriteLine("Cannot open Redirect.txt for writing");
                    Console.WriteLine(e.Message);
                    return;
                }

                writer.AutoFlush = true;
                //Console.SetOut(writer);
                StringBuilder text = new StringBuilder();
                input = File.ReadAllText(@"..\..\sample8.txt");
                //Console.WriteLine("Input the validation rule.");


                AntlrInputStream  inputStream       = new AntlrInputStream(input);
                SRZLexer          lexer             = new SRZLexer(inputStream);
                CommonTokenStream commonTokenStream = new CommonTokenStream(lexer);
                // Внимание, отладка мешает запускать построение дерева
                //Program.PrintDebugInfo(lexer);
                //

                var parser = new SRZParser(commonTokenStream);
                parser.RemoveErrorListeners();
                parser.AddErrorListener(new ErrorListener()); // add ours
                var tree        = parser.start();
                var evalVisitor = new Expression();
                // результатом вычисления логического выражения будет true | false
                Console.WriteLine(evalVisitor.Visit(tree));

                Console.ReadKey();
            }
            catch (ParseCancellationException ex)
            {
                Console.WriteLine("Error: " + ex.Message);
                Console.ReadKey();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: " + ex);
                Console.ReadKey();
            }
        }
Example #2
0
        private static void PrintDebugInfo(Lexer lexer)
        {
            CommonTokenStream tokens = new CommonTokenStream(lexer);

            tokens.Fill();
            Console.WriteLine("\n[TOKENS]");
            foreach (var t in tokens.GetTokens())
            {
                String symbolicName = lexer.Vocabulary.GetSymbolicName(t.Type);
                String literalName  = lexer.Vocabulary.GetLiteralName(t.Type);

                Console.WriteLine(" {0:-20} {1}", symbolicName == "" ? literalName : symbolicName,
                                  t.Text.Replace("\r", "\\r").Replace("\n", "\\n").Replace("\t", "\\t"));
            }

            Console.WriteLine("\n[PARSE-TREE]");
            var parser = new SRZParser(tokens);
            ParserRuleContext context = parser.expression();
            String            tree    = context.ToStringTree(parser);

            printPrettyLispTree(tree);
        }