private static AlterationModel GetAlterationModelFromAlterationExpression(IEnumerable <BaseExpression> symbols) { var alterationModel = new AlterationModel(); foreach (var symbol in symbols) { switch (symbol) { case ProductionExpression productionExpression: alterationModel.AddSymbol(productionExpression.ProductionModel); break; case SymbolExpression symbolExpression: alterationModel.AddSymbol(symbolExpression.SymbolModel); break; case GrammarReferenceExpression grammarReferenceExpression: alterationModel.AddSymbol(grammarReferenceExpression.GrammarReferenceModel); break; case RuleExpression expr: foreach (var symbolModel in GetSymbolModelsFromExpr(expr)) { alterationModel.AddSymbol(symbolModel); } break; } } return(alterationModel); }