Exemple #1
0
        void OnEvaluate()
        {
            Result = "";
            TerminalReader.Open(Expression);
            Prolog.Clause result = (Prolog.Clause)Parser.Parse(TerminalReader);
            if (result != null)
            {
                Terminal token = TerminalReader.ReadTerminal();
                while (token != null)
                {
                    if (!token.ElementType.Ignore)
                    {
                        Result += $"{token.ElementType.Name}: {token.Text}" + Environment.NewLine;
                    }
                }
                token = TerminalReader.ReadTerminal();
                //Result = result; //.Value.ToString();
            }

            LinguaTrace.TraceSource.Flush();
        }
Exemple #2
0
        public void CreateParser()
        {
            Assembly assembly = Assembly.GetAssembly(typeof(Form1));

            var grammar = new Grammar();

            grammar.Load(assembly, "Calculator");
            grammar.LoadRules(assembly, "Calculator");
            grammar.Resolve();

            Trace.WriteLine("TERMINALS");
            foreach (var terminal in grammar.GetTerminals())
            {
                Trace.WriteLine(terminal.Name);
                var sb = new StringBuilder();
                sb.Append("  First:");
                foreach (var first in terminal.First)
                {
                    sb.Append(" ");
                    sb.Append(first == null ? "e" : first.Name);
                }
                Trace.WriteLine(sb.ToString());
            }

            Trace.WriteLine("NONTERMINALS");
            foreach (var nonterminal in grammar.GetNonterminals())
            {
                Trace.WriteLine(nonterminal.Name);

                foreach (var rule in nonterminal.Rules)
                {
                    Trace.WriteLine("  " + rule.ToString());
                }

                var sb = new StringBuilder();
                sb.Append("  First:");
                foreach (var first in nonterminal.First)
                {
                    sb.Append(" ");
                    sb.Append(first == null ? "e" : first.Name);
                }
                Trace.WriteLine(sb.ToString());

                sb = new StringBuilder();
                sb.Append("  Follow:");
                foreach (var first in nonterminal.Follow)
                {
                    sb.Append(" ");
                    sb.Append(first == null ? "e" : first.Name);
                }
                Trace.WriteLine(sb.ToString());
            }

            ITerminalReaderGenerator      terminalReaderGenerator       = new TerminalReaderGenerator();
            TerminalReaderGeneratorResult terminalReaderGeneratorResult =
                terminalReaderGenerator.GenerateTerminalReader(grammar);

            this.m_terminalReader = (TerminalReader)terminalReaderGeneratorResult.TerminalReader;

            IParserGenerator      parserGenerator       = new ParserGenerator();
            ParserGeneratorResult parserGeneratorResult = parserGenerator.GenerateParser(grammar);

            this.m_parser = (Parser)parserGeneratorResult.Parser;

            ITerminalReader terminalReader = terminalReaderGeneratorResult.TerminalReader;

            terminalReader.Open("(123 + 34) / 52");

            IParser parser = parserGeneratorResult.Parser;

            parser.Parse(terminalReader);

            var token = terminalReader.ReadTerminal();

            while (token != null)
            {
                if (!token.ElementType.Ignore)
                {
                    Console.WriteLine("{0}: {1}", token.ElementType.Name, token.Text);
                }
                token = terminalReader.ReadTerminal();
            }

            //Console.WriteLine("Press Enter to exit.");
            //Console.ReadLine();
        }
Exemple #3
0
        public static byte?ReadRaw(this TerminalReader reader)
        {
            _ = reader ?? throw new ArgumentNullException(nameof(reader));

            return(reader.Driver.ReadRaw());
        }
Exemple #4
0
        public static string?ReadLine(this TerminalReader reader)
        {
            _ = reader ?? throw new ArgumentNullException(nameof(reader));

            return(reader.Driver.ReadLine());
        }