public static IProductionRule Deliteralize(this IProductionRule rule, IOilexerGrammarProductionRuleEntry currentEntry, IList <IOilexerGrammarTokenEntry> availableStock, OilexerGrammarFile file, ICompilerErrorCollection errors) { if (rule.NeedsDeliteralized()) { List <IProductionRuleItem> result = new List <IProductionRuleItem>(); foreach (IProductionRuleItem ruleItem in rule) { IProductionRuleItem resultItem = null; if (ruleItem.NeedsDeliteralized()) { resultItem = ruleItem.Deliteralize(currentEntry, availableStock, file, errors); } else { resultItem = ruleItem; } if (resultItem != null) { result.Add(resultItem); } } if (result.Count == 0) { return(null); } return(new ProductionRule(result, rule.FileName, rule.Column, rule.Line, rule.Position)); } else { return(rule); } }