/// <summary> /// Creates a new <see cref="InlinedTokenExpressionSeries"/> with the /// <paramref name="source"/>, <paramref name="sourceRoot"/> and /// <paramref name="root"/> /// </summary> /// <param name="source">The <see cref="TokenExpressionSeries"/> from which the current /// <see cref="InlinedTokenExpressionSeries"/> derives.</param> /// <param name="sourceRoot">The <see cref="IOilexerGrammarTokenEntry"/> which contains the /// <paramref name="source"/>.</param> /// <param name="root">The <see cref="InlinedTokenEntry"/> which contains the <see cref="InlinedTokenExpressionSeries"/>.</param> public InlinedTokenExpressionSeries(ITokenExpressionSeries source, IOilexerGrammarTokenEntry sourceRoot, InlinedTokenEntry root, IDictionary <ITokenItem, ITokenItem> oldNewLookup) : base(OilexerGrammarInliningCore.Inline(source.ToArray(), sourceRoot, root, oldNewLookup), source.Line, source.Column, source.Position, source.FileName) { this.Source = source; this.SourceRoot = SourceRoot; this.Root = root; }
/// <summary> /// Creates a new <see cref="InlinedTokenEntry"/> with the <paramref name="source"/> /// provided. /// </summary> /// <param name="source">The <see cref="IOilexerGrammarTokenEntry"/> from which the /// current <see cref="InlinedTokenEntry"/> derives.</param> public InlinedTokenEntry(IOilexerGrammarTokenEntry source, IOilexerGrammarFile file) : base(source.Name, null, source.ScanMode, source.FileName, source.Column, source.Line, source.Position, source.Unhinged, source.LowerPrecedenceTokens, source.ForcedRecognizer) { this.OldNewLookup = new Dictionary <ITokenItem, ITokenItem>(); this.branches = OilexerGrammarInliningCore.Inline(source.Branches, source, this, this.OldNewLookup); this.Source = source; this.file = file; this.Contextual = source.Contextual; }
public InlinedScanCommandTokenItem(IScanCommandTokenItem source, IOilexerGrammarTokenEntry sourceRoot, InlinedTokenEntry root, IDictionary <ITokenItem, ITokenItem> oldNewLookup) : base(OilexerGrammarInliningCore.Inline(source.SearchTarget, sourceRoot, root, oldNewLookup), source.SeekPast, source.Column, source.Line, source.Position) { this.Source = source; this.SourceRoot = sourceRoot; this.Root = root; this.RepeatOptions = source.RepeatOptions; this.SiblingAmbiguity = source.SiblingAmbiguity; this.Name = source.Name; }
public InlinedTokenGroupItem(ITokenGroupItem source, IOilexerGrammarTokenEntry sourceRoot, InlinedTokenEntry root, IDictionary <ITokenItem, ITokenItem> oldNewLookup) : base(source.FileName, OilexerGrammarInliningCore.Inline(source.ToArray(), sourceRoot, root, oldNewLookup), source.Column, source.Line, source.Position) { this.Source = source; this.SourceRoot = sourceRoot; this.Root = root; this.RepeatOptions = source.RepeatOptions; this.Name = source.Name; this.SiblingAmbiguity = source.SiblingAmbiguity; }
public InlinedBaseEncodeGraphCommand(IBaseEncodeGraphCommand source, OilexerGrammarTokens.StringLiteralToken stringBase, IOilexerGrammarTokenEntry sourceRoot, InlinedTokenEntry root, IDictionary <ITokenItem, ITokenItem> oldNewLookup) : base(OilexerGrammarInliningCore.Inline(source.EncodeTarget, sourceRoot, root, oldNewLookup), stringBase, source.Digits, source.Column, source.Line, source.Position) { this.Source = source; this.SourceRoot = sourceRoot; this.Root = root; this.RepeatOptions = source.RepeatOptions; this.Name = source.Name; this.SiblingAmbiguity = source.SiblingAmbiguity; }
public static bool InlineTokens(IOilexerGrammarFile file) { IOilexerGrammarTokenEntry[] originals = OilexerGrammarLinkerCore.tokenEntries.ToArray(); InlinedTokenEntry[] result = new InlinedTokenEntry[originals.Length]; Dictionary <IOilexerGrammarTokenEntry, InlinedTokenEntry> originalNewLookup = new Dictionary <IOilexerGrammarTokenEntry, InlinedTokenEntry>(); for (int i = 0; i < result.Length; i++) { result[i] = OilexerGrammarInliningCore.Inline(originals[i], file); } for (int i = 0; i < result.Length; i++) { originalNewLookup.Add(originals[i], result[i]); } for (int i = 0; i < result.Length; i++) { result[i].ResolveLowerPrecedencesAgain(originalNewLookup); } OilexerGrammarEntryCollection gdec = file as OilexerGrammarEntryCollection; if (gdec == null) { return(false); } for (int i = 0; i < originals.Length; i++) { gdec.Insert(gdec.IndexOf(originals[i]), result[i]); /* * * The rule building phase will require direct references * to the tokens, because it uses them in a context lookup. * * * Time to replace every reference for the token with * the inlined version. * * * This includes literal reference members for the same reason. * */ ReplaceTokenReference(originals[i], result[i]); file.Remove(originals[i]); } return(true); }
/// <summary> /// Creates a new <see cref="InlinedTokenExpression"/> from /// the <paramref name="source"/> provided. /// </summary> /// <param name="source">The <see cref="TokenExpression"/> from which the /// <see cref="InlinedTokenExpression"/> is derived.</param> public InlinedTokenExpression(ITokenExpression source, IOilexerGrammarTokenEntry sourceRoot, InlinedTokenEntry root, IDictionary <ITokenItem, ITokenItem> oldNewLookup) : base(OilexerGrammarInliningCore.Inline((IControlledCollection <ITokenItem>)source, sourceRoot, root, oldNewLookup), source.FileName, source.Column, source.Line, source.Position) { this.Source = source; }