public override IDerivation Expand(DerivationContext aContext) { IDerivation lExpandList = RightPhrase.Expand(aContext); List <IDerivation> lReplacePoints = PlaceHolders.GetList(Name); foreach (TextDerivation lPoint in lReplacePoints) { if (Add) { lPoint.Text += lExpandList.ToString(); } else { lPoint.Text = lExpandList.ToString(); } } return(lExpandList); }
public virtual IDerivation Visit(PlaceHolderAssignPhrase aPlaceHolderAssignPhrase, DerivationContext aContext) { IDerivation lExpandList = aPlaceHolderAssignPhrase.RightPhrase.Accept(aContext); List <IDerivation> lReplacePoints = PlaceHolders.GetList(aPlaceHolderAssignPhrase.Name); foreach (TextDerivation lPoint in lReplacePoints) { if (aPlaceHolderAssignPhrase.Add) { lPoint.Text += lExpandList.ToString(); } else { lPoint.Text = lExpandList.ToString(); } } return(lExpandList); }
/// <summary> /// Генерирует один текст /// </summary> /// <returns></returns> private string GenerateSingleText() { //Clear // RuleProtocol = new DictionaryDerivation(true, new DerivationContext(this)); mGrammar.SysTrans.Clear(); StopGenerate = false; mGrammar.AllNonTerminals.Clear(); VisitorExpandBase.PlaceHolders.Clear(); if (File.Exists(ConfigFilePath)) { ConfigXml = new XmlParser(ConfigFilePath); } IDerivation lDerivation = null; switch (Mode) { case eGenerationMode.RecursiveTopDown: lDerivation = ExpandNonTerminal(mGrammar.MainSymbol); break; case eGenerationMode.IterativeTopDown: lDerivation = GenerateIterativeTopDown(); break; case eGenerationMode.IterativeLeftRight: lDerivation = GenerateIterativeLeftRight(mGrammar.MainSymbol.Context); break; } if (Grammar.SpecGraphBuilder != null) { Grammar.SpecGraphBuilder.RootObject = lDerivation; } //convert generated tree to text string lGeneratedText = lDerivation.ToString(); //save it ResultSaver.Save(lGeneratedText); mGrammar.MainSymbol.Context.DerivationXml.Save("c://derivationXml.xml"); IsEnumFinished = CounterDictionary.Increase(); StopGenerate = false; return(lGeneratedText); }