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(); }
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(); }
public static byte?ReadRaw(this TerminalReader reader) { _ = reader ?? throw new ArgumentNullException(nameof(reader)); return(reader.Driver.ReadRaw()); }
public static string?ReadLine(this TerminalReader reader) { _ = reader ?? throw new ArgumentNullException(nameof(reader)); return(reader.Driver.ReadLine()); }