public void ShouldSupportGenericPassthroughResult() { // Arrange var peg = Peg.GenericPassthroughTest(); peg.DefaultSemanticActions.SetDefaultGenericPassthroughAction <GenericPassthroughAst>(); string testInput = "aaaabbbb"; var tokenizer = peg.Tokenizer(TokenDefinitions.AB); var rules = peg.ParserGenerator.GetParsingRules("Start => &([A]) [A] [B]"); var parser = peg.Parser(ParsingRuleNames.Start, rules); // Act var tokenizationResult = tokenizer.Tokenize(testInput); var parseResult = parser.Parse(tokenizationResult.MatchedRanges); // Assert var result = (GenericPassthroughAst)parseResult.SemanticActionResult; var subResults = result.SubResults.Cast <GenericPassthroughAst>().First().SubResults.Cast <GenericPassthroughAst>().ToList(); Assert.Null(subResults[0]); // predicate does not consume tokens var seqResults = subResults[1].SubResults.Cast <GenericPassthroughAst>().ToList(); Assert.Equal("aaaa", seqResults[0].MatchedTokens.GetMatchedString()); Assert.Equal("bbbb", seqResults[1].MatchedTokens.GetMatchedString()); Assert.Equal(MatchedPegOperator.NonTerminal, result.MatchedOperator); }
public void ShouldSupportGenericPassthroughResult() { // Arrange var peg = Peg.GenericPassthroughTest(); peg.DefaultSemanticActions.SetDefaultGenericPassthroughAction <GenericPassthroughAst>(); string inputString = string.Empty; var op = peg.Operators; var tokenizer = peg.Tokenizer(TokenDefinitions.AB); var rules = peg.ParserGenerator.GetParsingRules("Start => []"); var parser = peg.Parser(ParsingRuleNames.Start, rules); // Act var tokensResult = tokenizer.Tokenize(inputString); var parseResult = parser.Parse(tokensResult.MatchedRanges); // Assert var result = (GenericPassthroughAst)parseResult.SemanticActionResult; var subResults = result.SubResults.Cast <GenericPassthroughAst>().First().SubResults.Cast <GenericPassthroughAst>().ToList(); Assert.Equal(string.Empty, result.MatchedTokens.GetMatchedString()); Assert.Empty(subResults); Assert.Equal(MatchedPegOperator.NonTerminal, result.MatchedOperator); Assert.Equal(MatchedPegOperator.EmptyString, result.SubResults.Cast <GenericPassthroughAst>().Single().MatchedOperator); }