public void TestMapAndReduce() { string xml = @" <MapReduce> <Map> <MapRule Type = 'MapRuleOnT1IfTrue' /> </Map> <Reduce> <ReduceRule Type = 'ReduceRuleOnT1' /> <ReduceRule Type = 'AssignRuleOnT1' /> </Reduce> </MapReduce>"; XDocument _xDoc = _xDoc = XDocument.Parse(xml); XElement source = _xDoc.Element("MapReduce"); IMatcher rule = new TerminalRuleMatcher(new Pattern("Rule", TokenType.RULE)); IMatcher mapRule = new TerminalRuleMatcher(new Pattern("MapRule", TokenType.MAPRULE)); IMatcher reduceRule = new TerminalRuleMatcher(new Pattern("ReduceRule", TokenType.REDUCERULE)); IMatcher map = new ProductionMatcher(new Pattern("Map", TokenType.MAP)); IMatcher reduce = new ProductionMatcher(new Pattern("Reduce", TokenType.REDUCE)); IMatcher mapReduce = new ProductionMatcher(new Pattern("MapReduce", TokenType.MAPREDUCE)); List<Token> results = new List<Token>(); var t = new Tokenizer(source, results, rule, mapRule, reduceRule, map, reduce, mapReduce); t.Parse(); Assert.AreEqual(TokenType.MAPREDUCE, results[0].TokenType); Assert.AreEqual(TokenType.MAP, results[1].TokenType); Assert.AreEqual(TokenType.MAPRULE, results[2].TokenType); Assert.AreEqual(TokenType.EOF, results[3].TokenType); Assert.AreEqual(TokenType.REDUCE, results[4].TokenType); Assert.AreEqual(TokenType.REDUCERULE, results[5].TokenType); Assert.AreEqual(TokenType.REDUCERULE, results[6].TokenType); Assert.AreEqual(TokenType.EOF, results[7].TokenType); Assert.AreEqual(TokenType.EOF, results[8].TokenType); }
public void TestReduce() { string xml = @" <Reduce> <ReduceRule Type = 'ReduceRuleOnT1' /> <ReduceRule Type = 'AssignRuleOnT1' /> </Reduce>"; XDocument _xDoc = _xDoc = XDocument.Parse(xml); XElement source = _xDoc.Element("Reduce"); IMatcher reduceRule = new TerminalRuleMatcher(new Pattern("ReduceRule", TokenType.REDUCERULE)); IMatcher reduce = new ProductionMatcher(new Pattern("Reduce", TokenType.REDUCE)); List<Token> results = new List<Token>(); var t = new Tokenizer(source, results, reduceRule, reduce); t.Parse(); Assert.AreEqual(TokenType.REDUCE, results[0].TokenType); Assert.AreEqual(TokenType.REDUCERULE, results[1].TokenType); Assert.AreEqual(TokenType.REDUCERULE, results[2].TokenType); Assert.AreEqual(TokenType.EOF, results[3].TokenType); }
public void TestRule() { string xml = @" <Rule Type = 'IninValueOnT2' />"; XDocument _xDoc = _xDoc = XDocument.Parse(xml); XElement source = _xDoc.Element("Rule"); IMatcher rule = new TerminalRuleMatcher(new Pattern("Rule", TokenType.RULE)); List<Token> results = new List<Token>(); var t = new Tokenizer(source, results, rule); t.Parse(); Assert.IsTrue(rule.IsMatch(t)); Assert.AreEqual(TokenType.RULE, results[0].TokenType); }
public void TestMapRulesTwoRules() { string xml = @" <Map> <Rule Type = 'IninValueOnT2' /> <Rule Type = 'IninValueOnT2Add' /> </Map>"; XDocument _xDoc = _xDoc = XDocument.Parse(xml); XElement source = _xDoc.Element("Map"); IMatcher rule = new TerminalRuleMatcher(new Pattern("Rule", TokenType.RULE)); IMatcher map = new ProductionMatcher(new Pattern("Map", TokenType.MAP)); List<Token> results = new List<Token>(); var t = new Tokenizer(source, results, rule, map); t.Parse(); Assert.AreEqual(TokenType.MAP, results[0].TokenType); Assert.AreEqual(TokenType.RULE, results[1].TokenType); Assert.AreEqual(TokenType.RULE, results[2].TokenType); Assert.AreEqual(TokenType.EOF, results[3].TokenType); }