Exemple #1
0
        private static void TestFactorial()
        {
            var whileParser = new WhileParserGeneric();
            var builder     = new ParserBuilder <WhileTokenGeneric, WhileAST>();
            var Parser      = builder.BuildParser(whileParser, ParserType.EBNF_LL_RECURSIVE_DESCENT, "statement");

            var program = @"
(
    r:=1;
    i:=1;
    while i < 11 do 
    (";

            //program += "\nprint \"r=\".r;\n";
            program += "r := r * i;\n";
            // program += "print \"r=\".r;\n";
            // program += "print \"i=\".i;\n";
            program += "i := i + 1 \n);\n";
            program += "return r)\n";
            for (int i = 0; i < 10; i++)
            {
                try
                {
                    var result      = Parser.Result.Parse(program);
                    var interpreter = new Interpreter();
                    var context     = interpreter.Interprete(result.Result);

                    var compiler = new WhileCompiler();
                    var code     = compiler.TranspileToCSharp(program);
                    var f        = compiler.CompileToFunction(program);
                    int r        = f();
                    if (r != 3628800)
                    {
                        throw new Exception("erreur " + r);
                    }
                }
                catch (Exception e)
                {
                    ;
                }
            }
        }
Exemple #2
0
        static void testGenericLexerWhile()
        {
            var sw = new Stopwatch();

            string source = @"
(
    r:=1;
    i:=1;
    while i < 11 DO 
    ( 
    r := r * i;
    PRINT r;
    print i;
    i := i + 1 )
)";



            sw.Reset();
            sw.Start();
            WhileParserGeneric wpg = new WhileParserGeneric();
            ParserBuilder <WhileTokenGeneric, WhileAST> wbuilderGen = new ParserBuilder <WhileTokenGeneric, WhileAST>();
            var buildResultgen = wbuilderGen.BuildParser(wpg, ParserType.EBNF_LL_RECURSIVE_DESCENT, "statement");
            var parserGen      = buildResultgen.Result;
            var rGen           = parserGen.Parse(source);

            sw.Stop();
            Console.WriteLine($"generic parser : {sw.ElapsedMilliseconds} ms");
            if (!rGen.IsError)
            {
                var interpreter = new Interpreter();
                var ctx         = interpreter.Interprete(rGen.Result);
                ;
            }
            else
            {
                rGen.Errors.ForEach(e => Console.WriteLine(e.ToString()));
            }


            ;
        }
Exemple #3
0
        private static void TestThreadsafeGeneric()
        {
            var whileParser = new WhileParserGeneric();
            var builder     = new ParserBuilder <WhileTokenGeneric, WhileAST>();
            var Parser      = builder.BuildParser(whileParser, ParserType.EBNF_LL_RECURSIVE_DESCENT, "statement");
            var program     = @"
(
    r:=1;
    i:=1;
    while i < 11 do 
    (";

            program += "r := r * i;\n";
            program += "i := i + 1 \n);\n";
            program += "return r)\n";
            for (int i = 0; i < 10; i++)
            {
                int fixed_i = i; // capture fixed i
                var t       = new Thread(() =>
                {
                    try
                    {
                        for (int j = 0; j < 10; j++)
                        {
                            Console.WriteLine($"{fixed_i}.{j}");
                            Thread.Sleep(5);
                            Parser.Result.Parse(program);
                        }
                    }
                    catch (Exception e)
                    {
                        ;
                    }
                });
                t.Start();
                Console.WriteLine($"thread #{fixed_i} started");
            }
        }