示例#1
0
        public void LeftRecursionCheckerTest()
        {
            Exception exception = null;
            string    filename  = @"..\..\LeftRecursion.txt";
            string    grammar;

            using (StreamReader reader = new StreamReader(filename))
            {
                grammar = reader.ReadToEnd();
            }
            if (grammar == null || grammar == "")
            {
                Assert.Fail();
            }
            var lexer = new IntArithmetics.Lexer();

            try
            {
                var parser = new LL1GrammarParser <int, IntArithmetics.AbstractToken>(
                    grammar, lexer, lexer.NameTokenTBL, new System.Reflection.Assembly[] { typeof(IntArithmetics).Assembly });
                Assert.Fail();
            }
            catch (LeftRecursionGrammarException exc)
            {
                exception = exc;
            }
            if (exception == null || exception.GetType() != typeof(LeftRecursionGrammarException))
            {
                Assert.Fail();
            }
        }
示例#2
0
        public void ListGrammarTest()
        {
            string filename = @"..\..\SequenceGrammar.txt";
            string grammar;

            using (StreamReader reader = new StreamReader(filename))
            {
                grammar = reader.ReadToEnd();
            }
            if (grammar == null || grammar == "")
            {
                Assert.Fail();
            }
            Dictionary <string, AbstractToken> kvp = new Dictionary <string, AbstractToken> {
                { "int", new TokenInt(default(int)) }
            };
            var parser = new LL1GrammarParser <ArrayN, AbstractToken>(grammar, new Lexer(), kvp, new System.Reflection.Assembly[] { typeof(ArrayN).Assembly });
            var parsed = parser.Parse("1 2 3");

            Assert.AreEqual("1, 2, 3", parsed.ToString());
            parsed = parser.Parse("");
            Assert.AreEqual("", parsed.ToString());
            parsed = parser.Parse("-123");
            Assert.AreEqual("-123", parsed.ToString());
        }
示例#3
0
        static void Main(string[] args)
        {
            string filename = @"C:\Users\Paul\Desktop\prg\cs\SemesterProject\LL1_Parser\LamdaExpressionComparement\Lamda_calc_grammar.txt";
            string l_expr   = @"(\x.(\y.(x(y((\z.t)z)))))";
            LLexer lexer    = new LLexer();
            string grammar;

            using (System.IO.StreamReader reader = new System.IO.StreamReader(filename))
            {
                grammar = reader.ReadToEnd();
            }
            var parser = new LL1GrammarParser <LExprBasic, AbstractLToken>(grammar, lexer, lexer.NameTokenTBL, new System.Reflection.Assembly[] { typeof(LExprBasic).Assembly });


            Console.WriteLine("Expected\t\tActual");
            var expr = parser.Parse(l_expr);

            Console.WriteLine($"{l_expr}\t\t{expr.ToString()}");
        }
示例#4
0
        public void ParseLambdaExpr()
        {
            string filename = @"C:\Users\Paul\Desktop\prg\cs\SemesterProject\LL1_Parser\BasicTests\Lamda_calc_grammar.txt";

            string[] lambda_expressions = @"(\x.(xy)) ((\y.y)(\x.(xy))) (x(\x.(λx.x))) (\x.(yz))".Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            LLexer   lexer = new LLexer();
            string   grammar;

            using (System.IO.StreamReader reader = new System.IO.StreamReader(filename))
            {
                grammar = reader.ReadToEnd();
            }
            if (grammar == null || grammar == "")
            {
                Assert.Fail("Cannot read a grammar file");
            }
            var parser = new LL1GrammarParser <LExprBasic, AbstractLToken>(grammar, lexer, lexer.NameTokenTBL, new System.Reflection.Assembly[] { typeof(LExprBasic).Assembly });

            foreach (var str_expr in lambda_expressions)
            {
                var expr = parser.Parse(str_expr);
                Assert.AreEqual(str_expr, expr.ToString());
            }
        }