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; }
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); }