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"), "."); }
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); }
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"); }
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); }
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); }
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); }
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); }
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', ""); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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"); }
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); }
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)); }
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"); }