Пример #1
0
        static void Main(string[] args)
        {
            // Чтобы вещественные числа распознавались и отображались в формате 3.14 (а не 3,14 как в русской Culture)
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");

            var fname = @"..\..\a.txt";

            Console.WriteLine(File.ReadAllText(fname));
            Console.WriteLine("-------------------------");

            Scanner scanner = new Scanner(new FileStream(fname, FileMode.Open));

            int tok = 0;
            //Подсчитать количество, среднюю, минимальную и максимальную длину всех идентификаторов
            int cnt = 0, min = Int32.MaxValue, max = Int32.MinValue, avg = 0;

            //Найти сумму всех целых и сумму всех вещественных в файле
            int    sum_int    = 0;
            double sum_double = 0;
            int    cntID      = 0;

            do
            {
                tok = scanner.yylex();
                if (tok == (int)Tok.EOF)
                {
                    break;
                }
                if (tok == (int)Tok.ID)
                {
                    ++cnt;
                    int l = scanner.yyleng;
                    avg += l;
                    min  = Math.Min(min, l);
                    max  = Math.Max(max, l);
                }
                if (tok == (int)Tok.INUM)
                {
                    sum_int += Int32.Parse(scanner.yytext);
                }
                if (tok == (int)Tok.RNUM)
                {
                    sum_double += Double.Parse(scanner.yytext);
                }
                if (tok == (int)Tok.LONGCOMMENT)
                {
                    cntID += scanner.cntID;
                }

                Console.WriteLine(scanner.TokToString((Tok)tok));
            } while (true);

            Console.WriteLine();
            Console.WriteLine("Task 2");
            Console.WriteLine("Cnt ID: {0}", cnt);
            Console.WriteLine("Avg length ID: {0}", (avg / cnt));
            Console.WriteLine("Min length ID: {0}     Max length ID: {1}", min, max);
            Console.WriteLine();
            Console.WriteLine("Task 3");
            Console.WriteLine("Sum int: {0}      Sum double: {1}", sum_int, sum_double);
            Console.WriteLine();
            Console.WriteLine("Task 4 ad");
            Console.WriteLine("CntID {0}", cntID);



            Console.ReadKey();
        }