public Factorisation(SubRule subRuleIn, NonterminalHeadD nontHeadIn) { subRule = subRuleIn; nontHeads = new List<NonterminalHeadD>(); nontHeads.Add(nontHeadIn); }
/// <summary> /// Returns all sub rules for a given rule in string representation /// </summary> /// <param name="nontHead"></param> /// <returns></returns> private static List<SubRule> SubRules(NonterminalHeadD nontHead) { // assert that choiceLineD has 1 child and it is of type ChoiceD if (nontHead.Rule.Children.Count > 1) throw new Exception("The choiceLineD has more than one child, cannot analyse."); if (!(nontHead.Rule.Children[0] is ChoiceD)) throw new Exception("The rule does not have the structure ChoiceLineD -> ChoiceD -> ..."); List<SubRule> returnVal = new List<SubRule>(); // get the lexemes from the nonthead rule List<Lexeme> totalLexemes = LexemeGenerator.Reverse(nontHead.Rule.Children[0]); SubRule totalRule = new SubRule(totalLexemes, nontHead); for (int stepSize = 2; stepSize <= totalRule.SymbolCount; stepSize++) { for (int position = 0; position <= totalRule.SymbolCount - stepSize; position++) { List<Lexeme> lexemes = totalRule.getSubRule(position, stepSize); SubRule subRule = new SubRule(lexemes, nontHead); returnVal.Add(subRule); } } return returnVal; }
public Factorisation(SubRule subRuleIn, List<NonterminalHeadD> nontHeadsIn) { subRule = subRuleIn; nontHeads = nontHeadsIn; }