/// <summary> /// EBNF ファイルをパース. /// </summary> /// <param name="text">JSON ファイル.</param> /// <returns>JSON オブジェクト.</returns> public static GeneratedParser Parse(string text) { // トークンに分解する TokenList <TokenType> tokens = Tokenize(text); // パース EBNFContext context = new EBNFContext(tokens.GetEnumerator()); EBNFExpression exp = new EBNFExpression(); exp.Interpret(context); // 生成されたパーサを返す GeneratedParser parser = new GeneratedParser( context.Tokenizer, context.Fields, context.Root ); return(parser); }
public static void Main() { var done = true; Command last = null; while (done) { Console.Write(":"); var currentCommand = Console.ReadLine()?.Trim(); switch (currentCommand) { case "exit": case "q": case "q!": { done = false; break; } case "help": { last = new Command(null, list => PrintHelp()); last.Execute(); break; } case "last": { last?.Execute(); break; } case "clear": { last = new Command(null, list => Console.Clear()); last.Execute(); break; } case "calc": { Console.Write("Type expression: "); var expr = Console.ReadLine(); last = new Command(new List <string> { expr }, list => { var lexer = new GeneratedLexer(list[0]); var parser = new GeneratedParser(lexer); var res = parser.e(); Console.WriteLine(res.res); }); last.Execute(); break; } default: { last = new Command(null, list => Console.WriteLine("Command not recognized, type help to list available commands")); last.Execute(); break; } } } }