public virtual IDerivation Visit(AccessSeq aAccessSeq, DerivationContext aContext) { IDerivation lD = aAccessSeq.mParentAccess.Accept(aContext); /*if (lD is ListDerivation) * { * lD = ((ListDerivation) lD)[0]; * }*/ DictionaryDerivation lDic = lD as DictionaryDerivation; if (lDic != null) { return(lDic[aAccessSeq.mFieldName]); } else { throw new GrammarDeductException("Incorrect . access! There is no DictionaryDerivation!"); } }
public virtual IDerivation Visit(Seqence aSeqence, DerivationContext aContext) { DictionaryDerivation lList = new DictionaryDerivation(aSeqence.InsertSpace, aContext); int lExprCnt = 1; for (int i = 0; i < aSeqence.Count; i++) { IPhrase lPhr = aSeqence.Phrases[i]; IDerivation lRes = lPhr.Accept(aContext); string lKeyName; NonTerminal lCurrentSymbol = lPhr as NonTerminal; QuantifiedPhrase lCurQuantPhr = lPhr as QuantifiedPhrase; if (null != lCurQuantPhr) { lCurrentSymbol = lCurQuantPhr.Phrase as NonTerminal; } if (lCurrentSymbol != null) { //to del lCurrentSymbol.OccurenceInSeq = i; lKeyName = lCurrentSymbol.Text; //взять протокол вывода этого правила //TODO: aContext.RuleSeqProtocol.Add(lCurrentSymbol.Text, lRes); //добавить в его протокол вывода последовательности имя lCurrentSymbol.Text и результат lRes } else { lKeyName = string.Format("Expr{0}", lExprCnt++); } if (!string.IsNullOrEmpty(lPhr.Alias)) { lKeyName = lPhr.Alias; } lList.Add(lKeyName, lRes, aContext); } return(lList); }