/// <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;
 }
Beispiel #4
0
 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;
 }