private static bool AllAreUnnamedEquivalents(IProductionRuleItem item, ref IProductionRuleItem rootItem) { if (item is IProductionRuleGroupItem) { return(AllAreUnnamedEquivalents((IProductionRuleSeries)item, ref rootItem)); } else { if (rootItem == null) { rootItem = item; return(rootItem.Name.IsEmptyOrNull()); } else if (item is ILiteralCharReferenceProductionRuleItem || item is ILiteralStringReferenceProductionRuleItem) { return(item.Name.IsEmptyOrNull() && rootItem is ILiteralCharReferenceProductionRuleItem || rootItem is ILiteralStringReferenceProductionRuleItem); } return(item.GetType() == rootItem.GetType() && item.Name.IsEmptyOrNull()); } }
public static IProductionRuleItem FinalLink(this IProductionRuleItem ruleItem, IOilexerGrammarProductionRuleEntry currentEntry, OilexerGrammarFile file, ICompilerErrorCollection errors) { if (ruleItem.NeedsFinalLinking()) { if (ruleItem is IProductionRuleGroupItem) { return(((IProductionRuleGroupItem)(ruleItem)).FinalLink(currentEntry, file, errors)); } else if (ruleItem is ISoftReferenceProductionRuleItem) { return(((ISoftReferenceProductionRuleItem)(ruleItem)).FinalLink(currentEntry, file, errors)); } else { errors.SourceError(OilexerGrammarCore.CompilerErrors.UnexpectedUndefinedEntry, new LineColumnPair(ruleItem.Line, ruleItem.Column), LineColumnPair.Zero, new Uri(currentEntry.FileName, UriKind.RelativeOrAbsolute), ruleItem.GetType().Name); return(null); } } else { return(ruleItem); } }
public static IProductionRuleItem Deliteralize(this IProductionRuleItem ruleItem, IOilexerGrammarProductionRuleEntry currentEntry, IList <IOilexerGrammarTokenEntry> availableStock, OilexerGrammarFile file, ICompilerErrorCollection errors) { if (ruleItem.NeedsDeliteralized()) { if (ruleItem is IProductionRuleGroupItem) { return(((IProductionRuleGroupItem)(ruleItem)).Deliteralize(currentEntry, availableStock, file, errors)); } else if (ruleItem is ILiteralProductionRuleItem) { return(((ILiteralProductionRuleItem)(ruleItem)).Deliteralize(currentEntry, availableStock, file, errors)); } else { errors.SourceError(OilexerGrammarCore.CompilerErrors.UnexpectedLiteralEntry, new LineColumnPair(ruleItem.Line, ruleItem.Column), LineColumnPair.Zero, new Uri(currentEntry.FileName, UriKind.RelativeOrAbsolute), ruleItem.GetType().Name); return(null); } } else { return(ruleItem); } }