private static ITokenItem ResolveTokenExpressionItem(this ITokenItem item, IOilexerGrammarTokenEntry entry, OilexerGrammarFile file, ICompilerErrorCollection errors)
 {
     if (item is ITokenGroupItem)
     {
         ((ITokenGroupItem)(item)).ResolveTokenExpressionSeries(entry, file, errors);
         return item;
     }
     else if (item is ISoftReferenceTokenItem)
     {
         return ((ISoftReferenceTokenItem)(item)).ResolveSoftReference(entry, file, errors);
     }
     else if (item is ICommandTokenItem)
     {
         ((ICommandTokenItem)(item)).ResolveSoftReference(entry, file, errors);
         return item;
     }
     else if (item is ILiteralStringTokenItem)
     {
         ILiteralStringTokenItem ilsti = ((ILiteralStringTokenItem)item);
         if (ilsti.Value.Length == 1)
         {
             LiteralCharTokenItem result = new LiteralCharTokenItem(ilsti.Value[0], ilsti.CaseInsensitive, ilsti.Column, ilsti.Line, ilsti.Position);
             ((LiteralStringTokenItem)(item)).CloneData(result);
             return result;
         }
     }//*/
     return item;
 }
Exemplo n.º 2
0
 public static IProductionRuleItem Deliteralize(this ILiteralProductionRuleItem ruleItem, IOilexerGrammarProductionRuleEntry currentEntry, IList <IOilexerGrammarTokenEntry> availableStock, OilexerGrammarFile file, ICompilerErrorCollection errors)
 {
     if (ruleItem is ILiteralCharProductionRuleItem)
     {
         return(Deliteralize <char, ILiteralCharTokenItem>(((ILiteralCharProductionRuleItem)(ruleItem)), currentEntry, availableStock, file,
                                                           literal =>
         {
             LiteralCharTokenItem result = new LiteralCharTokenItem(literal.Value, ((ILiteralCharProductionRuleItem)(literal)).CaseInsensitive, literal.Column, literal.Line, literal.Position);
             if (literal.Name != null && literal.Name != string.Empty)
             {
                 result.Name = literal.Name;
             }
             else
             {
                 result.Name = ExtractName(result.Value);
             }
             return result;
         },
                                                           (literal, destination) =>
         {
             if (destination.Name != "__EXTRACTIONS" &&
                 (destination.Branches.Count == 1 &&
                  destination.Branches[0].Count == 1))
             {
                 return new TokenReferenceProductionRuleItem(destination, literal.Column, literal.Line, literal.Position);
             }
             else if (!(literal.Name != null && literal.Name != string.Empty))
             {
                 literal.Name = ExtractName(literal.Value);
             }
             return new LiteralCharReferenceProductionRuleItem((ILiteralCharTokenItem)literal, destination, literal.Column, literal.Line, literal.Position, ruleItem.Flag, ruleItem.Counter);
         }, errors));
     }
     else if (ruleItem is ILiteralStringProductionRuleItem)
     {
         return(Deliteralize <string, ILiteralStringTokenItem>(((ILiteralStringProductionRuleItem)(ruleItem)), currentEntry, availableStock, file,
                                                               literal =>
         {
             LiteralStringTokenItem result = new LiteralStringTokenItem(literal.Value, ((ILiteralStringProductionRuleItem)(literal)).CaseInsensitive, literal.Column, literal.Line, literal.Position, false);
             if (literal.Name != null && literal.Name != string.Empty)
             {
                 result.Name = literal.Name;
             }
             else
             {
                 result.Name = ExtractName(result.Value);
             }
             return result;
         },
                                                               (literal, destination) =>
         {
             if (destination.Name != "__EXTRACTIONS" &&
                 (destination.Branches.Count == 1 &&
                  destination.Branches[0].Count == 1))
             {
                 return new TokenReferenceProductionRuleItem(destination, literal.Column, literal.Line, literal.Position);
             }
             else if (string.IsNullOrEmpty(literal.Name))
             {
                 literal.Name = ExtractName(literal.Value);
             }
             LiteralStringReferenceProductionRuleItem result = new LiteralStringReferenceProductionRuleItem((ILiteralStringTokenItem)literal, destination, literal.Column, literal.Line, literal.Position, ruleItem.Flag, ruleItem.Counter);
             if (ruleItem.Flag)
             {
                 result.Name = ExtractName(literal.Value);
             }
             return result;
         }, errors));
     }
     return(ruleItem);
 }