Esempio n. 1
0
        public void Then()
        {
            var startsWithA      = new StartsWithChar('A');
            var startsWithB      = new StartsWithChar('B');
            var startsWithAthenB = startsWithA + startsWithB;

            Do_Parser_Test(startsWithAthenB, "ABA", true, StringToList("AB"), "A");
            Do_Parser_Test(startsWithAthenB, "AC", false, null, "AC");
            Do_Parser_Test(startsWithAthenB, "BA", false, null, "BA");

            var ab = new List <object> {
                'A', 'B'
            };

            Do_Parser_Test(new Many(startsWithAthenB), "ABABABC", true, new List <List <object> >()
            {
                ab, ab, ab
            }, "C");

            var isDigit   = new StartsWithAnyChar("0123456789".ToCharArray());
            var isInteger = new Many(isDigit);
            var isPeriod  = new StartsWithChar('.');
            var isDecimal = (isInteger + isPeriod + isInteger) | isInteger;

            Do_Parser_Test(isDecimal, "1234.56", true, StringToList("1234.56"), "");
            Do_Parser_Test(isDecimal, "1234", true, StringToList("1234"), "");
            Do_Parser_Test(isDecimal, ".1234.", true, StringToList(".1234"), ".");
        }
Esempio n. 2
0
        public void Exercise4()
        {
            //Dim a As String = "Hello"
            //Dim b As Integer = 6
            var Dim          = new StartsWithWord("Dim");
            var whitespace   = new Many(new StartsWithAnyChar(new char[] { ' ', '\t' })).Apply(ListToString);
            var As           = new StartsWithWord("As");
            var varString    = new StartsWithWord("String");
            var varInteger   = new StartsWithWord("Integer");
            var equals       = new StartsWithChar('=');
            var doubleQuotes = new StartsWithChar('"');
            var anyChar      = new StartsWith(c => c != '"');
            var identifier   = (new Many(new StartsWith(c => char.IsLetterOrDigit(c)))).Apply(ListToString);
            var stringLit    = (doubleQuotes + (new Many(anyChar)) + doubleQuotes).Apply(ListToString);
            var isDigit      = new StartsWithAnyChar("0123456789".ToCharArray());
            var isInteger    = new Many(isDigit).Apply(ListToString);

            var varType      = varString | varInteger;
            var defaultValue = stringLit | isInteger;
            var declaration  = (Dim + whitespace + identifier + whitespace + As + whitespace + varType + whitespace + equals + whitespace + defaultValue).Apply(a => { var l = (List <object>)a; return(new Declaration((string)l[2], (string)l[6], (string)l[10])); });

            var parseResult = declaration.Parse(@"Dim a As String = ""Hello""");

            Assert.AreEqual(true, parseResult.Success);

            parseResult = declaration.Parse(@"Dim b As Integer = 6");
            Assert.AreEqual(true, parseResult.Success);
        }
Esempio n. 3
0
        public void OneOrMany()
        {
            var startsWithA     = new StartsWithChar('A');
            var startsWithManyA = new OneOrMany(startsWithA);

            Do_Parser_Test(startsWithManyA, "AAAB", true, StringToList("AAA"), "B");
            Do_Parser_Test(startsWithManyA, "CAAAB", false, null, "CAAAB");
        }
Esempio n. 4
0
        public void ParseACBDoesNotWorks()
        {
            var Aparser  = new StartsWithChar('A');
            var Bparser  = new StartsWithChar('B');
            var ABparser = new Then(Aparser, Bparser);
            var result   = ABparser.Parse("AC");

            Assert.IsFalse(result.Success);
        }
Esempio n. 5
0
        public void ParseBADoesNotWork()
        {
            var parser = new StartsWithChar('A');
            var result = parser.Parse("BA");

            Assert.IsFalse(result.Success);
            Assert.IsNull(result.Parsed);
            Assert.AreEqual("BA", result.Remainder);
        }
Esempio n. 6
0
        public void ParseAWorks()
        {
            var parser = new StartsWithChar('A');
            var result = parser.Parse("A");

            Assert.IsTrue(result.Success);
            Assert.AreEqual("A", result.Parsed);
            Assert.AreEqual("", result.Remainder);
        }
Esempio n. 7
0
        public void OneIs1()
        {
            var parser = new StartsWithChar('1').ApplyString(l => int.Parse(l));
            var result = parser.Parse("1");

            Assert.IsTrue(result.Success);
            Assert.AreEqual(1, result.Parsed);
            Assert.AreEqual("", result.Remainder);
        }
Esempio n. 8
0
        public void StartsWithChar()
        {
            var startsWithA = new StartsWithChar('A');

            Do_Parser_Test(startsWithA, "ABC", true, 'A', "BC");
            Do_Parser_Test(startsWithA, "AAAA", true, 'A', "AAA");
            Do_Parser_Test(startsWithA, "BCD", false, null, "BCD");
            Do_Parser_Test(startsWithA, "", false, null, "");
            Do_Parser_Test(startsWithA, "A", true, 'A', "");
        }
Esempio n. 9
0
        public void ParseAAAAWorks()
        {
            var Aparser = new StartsWithChar('A');
            var parser  = new Many(Aparser);
            var result  = parser.Parse("AAAAB");

            Assert.IsTrue(result.Success);
            Assert.AreEqual("AAAA", ListToString((List <object>)result.Parsed));
            Assert.AreEqual("B", result.Remainder);
        }
Esempio n. 10
0
        public void ParseCDoesNotWork()
        {
            var Aparser = new StartsWithChar('A');
            var Bparser = new StartsWithChar('B');
            var parser  = new Either(Aparser, Bparser);
            var result  = parser.Parse("C");

            Assert.IsFalse(result.Success);
            Assert.IsNull(result.Parsed);
            Assert.AreEqual("C", result.Remainder);
        }
Esempio n. 11
0
        public void ParseBWorks()
        {
            var Aparser = new StartsWithChar('A');
            var Bparser = new StartsWithChar('B');
            var parser  = new Either(Aparser, Bparser);
            var result  = parser.Parse("B");

            Assert.IsTrue(result.Success);
            Assert.AreEqual("B", result.Parsed);
            Assert.AreEqual("", result.Remainder);
        }
Esempio n. 12
0
        public void AplusBplusCisABC()
        {
            var Aparser   = new StartsWithChar('A');
            var Bparser   = new StartsWithChar('B');
            var Cparser   = new StartsWithChar('C');
            var ABCparser = (Aparser + Bparser + Cparser).Apply(ListToString);
            var result    = ABCparser.Parse("ABCD");

            Assert.IsTrue(result.Success);
            Assert.AreEqual("ABC", result.Parsed);
            Assert.AreEqual("D", result.Remainder);
        }
Esempio n. 13
0
        public void ParseDABABAACDoesNotWork()
        {
            var Aparser  = new StartsWithChar('A');
            var Bparser  = new StartsWithChar('B');
            var BAparser = new Either(Aparser, Bparser);
            var parser   = new Many(BAparser);
            var result   = parser.Parse("DABABAAC");

            Assert.IsFalse(result.Success);
            Assert.AreEqual("", "");
            Assert.AreEqual("DABABAAC", result.Remainder);
        }
Esempio n. 14
0
        public void ParseABABAACWorks()
        {
            var Aparser  = new StartsWithChar('A');
            var Bparser  = new StartsWithChar('B');
            var BAparser = new Either(Aparser, Bparser);
            var parser   = new Many(BAparser);
            var result   = parser.Parse("ABABAAC");

            Assert.IsTrue(result.Success);
            Assert.AreEqual("ABABAA", ListToString((List <object>)result.Parsed));
            Assert.AreEqual("C", result.Remainder);
        }
Esempio n. 15
0
        public void ParseABWorks()
        {
            var Aparser  = new StartsWithChar('A');
            var Bparser  = new StartsWithChar('B');
            var ABparser = new Then(Aparser, Bparser);
            var result   = ABparser.Parse("AB");

            Assert.IsTrue(result.Success);

            var parsed = (List <object>)result.Parsed;

            Assert.AreEqual(2, parsed.Count);
            Assert.AreEqual("A", parsed[0]);
            Assert.AreEqual("B", parsed[1]);
            Assert.AreEqual("", result.Remainder);
        }
Esempio n. 16
0
        public void Exercise1()
        {
            var print        = new StartsWithWord("Print");
            var whitespace   = new StartsWithAnyChar(new char[] { ' ', '\t' });
            var openBracket  = new StartsWithChar('(');
            var closeBracket = new StartsWithChar(')');
            var doubleQuotes = new StartsWithChar('"');
            var anyChar      = new StartsWith(c => c != '"');
            var stringLit    = doubleQuotes + (new Many(anyChar)) + doubleQuotes;
            var semiColon    = new StartsWithChar(';');
            var command      = print + (new Many(whitespace)) + openBracket + stringLit + closeBracket + semiColon;

            var parseResult = command.Parse(@"Print     (""Hello World"");");

            Assert.AreEqual(true, parseResult.Success);
        }
Esempio n. 17
0
        public void Either()
        {
            var startsWithA    = new StartsWithChar('A');
            var startsWithB    = new StartsWithChar('B');
            var startsWithAorB = startsWithA | startsWithB;

            Do_Parser_Test(startsWithAorB, "ABC", true, 'A', "BC");
            Do_Parser_Test(startsWithAorB, "BAC", true, 'B', "AC");
            Do_Parser_Test(startsWithAorB, "CBA", false, null, "CBA");

            var isLowerCaseCharacter = new StartsWithAnyChar("abcdefghijklmnopqrstuvwxyz".ToCharArray());
            var isUpperCaseCharacter = new StartsWithAnyChar("ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray());
            var isCharacter          = isLowerCaseCharacter | isUpperCaseCharacter;

            Do_Parser_Test(isCharacter, "Abc", true, 'A', "bc");
            Do_Parser_Test(isCharacter, "123", false, null, "123");
        }
Esempio n. 18
0
        public void ParseA_plus_B_plus_CWorks()
        {
            var Aparser   = new StartsWithChar('A');
            var Bparser   = new StartsWithChar('B');
            var Cparser   = new StartsWithChar('C');
            var ABCparser = Aparser + Bparser + Cparser;
            var result    = ABCparser.Parse("ABCD");

            Assert.IsTrue(result.Success);

            var parsed = (List <object>)result.Parsed;

            Assert.AreEqual(3, parsed.Count);
            Assert.AreEqual("A", parsed[0]);
            Assert.AreEqual("B", parsed[1]);
            Assert.AreEqual("C", parsed[2]);
            Assert.AreEqual("D", result.Remainder);
        }
Esempio n. 19
0
        public void Exercise3()
        {
            var print        = new StartsWithWord("Print");
            var whitespace   = new Many(new StartsWithAnyChar(new char[] { ' ', '\t' })).Apply(ListToString);
            var openBracket  = new StartsWithChar('(');
            var closeBracket = new StartsWithChar(')');
            var doubleQuotes = new StartsWithChar('"');
            var anyChar      = new StartsWith(c => c != '"');
            var stringLit    = (doubleQuotes + (new Many(anyChar)) + doubleQuotes).Apply(ListToString);
            var semiColon    = new StartsWithChar(';');
            var command      = print + whitespace + openBracket + stringLit + closeBracket + semiColon;

            command.Apply6((a, b, c, d, e, f) => new PrintCommand((string)d));
            var parseResult = command.Parse(@"Print     (""Hello World"");");

            Assert.AreEqual(true, parseResult.Success);
            Assert.IsInstanceOfType(parseResult.Parsed, typeof(PrintCommand));
        }
Esempio n. 20
0
        public void Many()
        {
            var startsWithA        = new StartsWithChar('A');
            var startsWithB        = new StartsWithChar('B');
            var startsWithAorB     = startsWithA | startsWithB;
            var startsWithManyA    = new Many(startsWithA);
            var startsWithManyAorB = new Many(startsWithAorB);

            Do_Parser_Test(startsWithManyA, "AAAB", true, StringToList("AAA"), "B");
            Do_Parser_Test(startsWithManyA, "CAAAB", true, null, "CAAAB");
            Do_Parser_Test(startsWithManyAorB, "ABABAABBC", true, StringToList("ABABAABB"), "C");

            var isDigit   = new StartsWithAnyChar("0123456789".ToCharArray());
            var isInteger = new Many(isDigit);

            Do_Parser_Test(isInteger, "12345.67", true, StringToList("12345"), ".67");
            Do_Parser_Test(isInteger, "a12345.67", true, null, "a12345.67");
        }