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());
     }
 }
Beispiel #2
0
 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);
     }
 }
Beispiel #3
0
 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);
     }
 }