Exemplo n.º 1
0
        public static ASMProcessEquivalencesResult ProcessEquivalences(string[] lines)
        {
            ASMProcessEquivalencesResult result = new ASMProcessEquivalencesResult();

            result.ErrorCode = 0;

            StringBuilder errorTextBuilder = new StringBuilder();

            Dictionary <string, string> eqvDict = new Dictionary <string, string>();

            ASMFindEquivalencesResult findEquivalencesResult = FindEquivalences(eqvDict, lines);

            if (findEquivalencesResult != null)
            {
                if (findEquivalencesResult.ErrorCode > 0)
                {
                    result.ErrorCode = 1;
                    errorTextBuilder.Append(findEquivalencesResult.ErrorMessage);
                }
            }

            List <string> newLines = new List <string>();

            foreach (string line in lines)
            {
                string processLine = ASMStringHelper.RemoveLeadingBracketBlock(line);
                processLine = ASMStringHelper.RemoveLeadingSpaces(processLine);
                processLine = ASMStringHelper.RemoveComment(processLine).ToLower();
                string[] parts         = ASMStringHelper.SplitLine(processLine);
                bool     isEquivalence = ((!string.IsNullOrEmpty(parts[0])) && (parts[0].ToLower().Trim() == ".eqv"));

                string newLine = (string)line.Clone();

                if (!isEquivalence)
                {
                    foreach (KeyValuePair <string, string> eqv in eqvDict)
                    {
                        newLine = newLine.Replace(eqv.Key, eqv.Value);
                    }
                }

                newLines.Add(newLine);
            }

            result.ErrorMessage = errorTextBuilder.ToString();
            result.Lines        = newLines.ToArray();

            return(result);
        }
Exemplo n.º 2
0
        private static ASMFindEquivalencesResult FindEquivalences(Dictionary <string, string> eqvDict, string[] lines)
        {
            ASMFindEquivalencesResult result = new ASMFindEquivalencesResult();

            result.ErrorCode = 0;

            StringBuilder errorTextBuilder = new StringBuilder();

            ClearEquivalenceDict(eqvDict);

            foreach (string line in lines)
            {
                if (string.IsNullOrEmpty(line))
                {
                    continue;
                }

                string processLine = ASMStringHelper.RemoveLeadingBracketBlock(line);
                processLine = ASMStringHelper.RemoveLeadingSpaces(processLine);
                processLine = ASMStringHelper.RemoveComment(processLine).ToLower();
                string[] parts = ASMStringHelper.SplitLine(processLine);

                ASMAddEquivalenceResult processEquivalenceResult = ProcessEquivalenceStatement(eqvDict, parts);
                if (processEquivalenceResult != null)
                {
                    if (processEquivalenceResult.ErrorCode > 0)
                    {
                        result.ErrorCode = 1;
                        errorTextBuilder.Append(processEquivalenceResult.ErrorMessage);
                    }
                }
            }

            result.ErrorMessage = errorTextBuilder.ToString();
            return(result);
        }
Exemplo n.º 3
0
        private static ASMFindEquivalencesResult FindEquivalences(Dictionary<string, string> eqvDict, string[] lines)
        {
            ASMFindEquivalencesResult result = new ASMFindEquivalencesResult();
            result.ErrorCode = 0;

            StringBuilder errorTextBuilder = new StringBuilder();

            ClearEquivalenceDict(eqvDict);

            foreach (string line in lines)
            {
                if (string.IsNullOrEmpty(line))
                    continue;

                string processLine = ASMStringHelper.RemoveLeadingBracketBlock(line);
                processLine = ASMStringHelper.RemoveLeadingSpaces(processLine);
                processLine = ASMStringHelper.RemoveComment(processLine).ToLower();
                string[] parts = ASMStringHelper.SplitLine(processLine);

                ASMAddEquivalenceResult processEquivalenceResult = ProcessEquivalenceStatement(eqvDict, parts);
                if (processEquivalenceResult != null)
                {
                    if (processEquivalenceResult.ErrorCode > 0)
                    {
                        result.ErrorCode = 1;
                        errorTextBuilder.Append(processEquivalenceResult.ErrorMessage);
                    }
                }
            }

            result.ErrorMessage = errorTextBuilder.ToString();
            return result;
        }
        public static ASMProcessEquivalencesResult ProcessEquivalences(string[] lines)
        {
            ASMProcessEquivalencesResult result = new ASMProcessEquivalencesResult();

            result.ErrorCode = 0;

            StringBuilder errorTextBuilder = new StringBuilder();

            Dictionary <string, string> eqvMap = new Dictionary <string, string>();

            ASMFindEquivalencesResult findEquivalencesResult = FindEquivalences(eqvMap, lines);

            if (findEquivalencesResult != null)
            {
                if (findEquivalencesResult.ErrorCode > 0)
                {
                    result.ErrorCode = 1;
                    errorTextBuilder.Append(findEquivalencesResult.ErrorMessage);
                }
            }

            List <string> eqvKeys = new List <string>(eqvMap.Keys);

            eqvKeys.Sort((a, b) => a.Length.CompareTo(b.Length));
            eqvKeys.Reverse();

            List <string> newLines = new List <string>();

            foreach (string line in lines)
            {
                string processLine = ASMStringHelper.RemoveLeadingBracketBlock(line);
                processLine = ASMStringHelper.RemoveLeadingSpaces(processLine);
                processLine = ASMStringHelper.RemoveComment(processLine).ToLower();
                string[] parts         = ASMStringHelper.SplitLine(processLine);
                bool     isEquivalence = ((!string.IsNullOrEmpty(parts[0])) && (parts[0].ToLower().Trim() == ".eqv"));

                string newLine = (string)line.Clone();

                if (!isEquivalence)
                {
                    /*
                     * foreach (KeyValuePair<string, string> eqv in eqvDict)
                     * {
                     *  //newLine = newLine.Replace(eqv.Key, eqv.Value);
                     *  newLine = System.Text.RegularExpressions.Regex.Replace(newLine, System.Text.RegularExpressions.Regex.Escape(eqv.Key), eqv.Value.Replace("$", "$$"),
                     *      System.Text.RegularExpressions.RegexOptions.IgnoreCase);
                     * }
                     */

                    foreach (string eqvKey in eqvKeys)
                    {
                        newLine = System.Text.RegularExpressions.Regex.Replace(newLine, System.Text.RegularExpressions.Regex.Escape(eqvKey), eqvMap[eqvKey].Replace("$", "$$"),
                                                                               System.Text.RegularExpressions.RegexOptions.IgnoreCase);
                    }
                }

                newLines.Add(newLine);
            }

            result.ErrorMessage = errorTextBuilder.ToString();
            result.Lines        = newLines.ToArray();

            return(result);
        }