Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        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;
                }
                }
            }
        }