C# 代码错误:无法正确输出分析串和剩余输出串,如何改正?

在您提供的代码中,语句 string production = table[topAnalyse.ToString()][topInput.ToString()]; 出现了错误,导致无法正确输出对应的分析串和剩余输出串。

错误原因:

该语句试图从 table 字典中获取一个值,但 table 的值类型可能不是 string。这会导致无法直接将获取到的值转换为 string 类型,从而输出错误信息 System.Collections.Generic.Stack1[System.Char]`。

解决方法:

将语句改为 string production = table[topAnalyse.ToString()][topInput.ToString()].ToString();。在第69行进行修改。

代码修改后:

private void analyze()
        {
            while (true)
            {
                // 如果分析栈为空或者输入栈为空,则分析结束
                if (analyseStack.Count == 0 || inputStack.Count == 0)
                {
                    break;
                }

                // 获取分析栈的栈顶元素和输入栈的栈顶元素
                char topAnalyse = analyseStack.Peek();
                char topInput = inputStack.Peek();

                // 如果分析栈的栈顶元素和输入栈的栈顶元素相同,则进行匹配
                if (topAnalyse == topInput)
                {
                    // 将匹配的元素从分析栈和输入栈中弹出
                    analyseStack.Pop();
                    inputStack.Pop();

                    // 在分析结果列表中添加匹配信息
                    resultAnalyse.Add(analyseStack.ToString());
                    resultInput.Add(inputStack.ToString());
                    resultParse.Add(''' + topAnalyse + ''' + " 匹配");
                }
                else
                {
                    // 如果分析栈的栈顶元素为终结符,则出错
                    if (IsTerminal(topAnalyse))
                    {
                        resultParse.Add("出错");
                        break;
                    }
                    else
                    {
                        if (!table.ContainsKey(topAnalyse.ToString()) || !table[topAnalyse.ToString()].ContainsKey(topInput.ToString()))
                        {
                            resultParse.Add("出错");
                            break;
                        }
                        else
                        {
                            // 获取分析表中的产生式
                            string production = table[topAnalyse.ToString()][topInput.ToString()].ToString();

                            // 如果分析表中没有产生式,则出错
                            if (production == null)
                            {
                                resultParse.Add("出错");
                                break;
                            }
                            else
                            {
                                // 将产生式从分析栈中弹出
                                analyseStack.Pop();

                                // 如果产生式不是空串,则将产生式中的符号逆序压入分析栈中
                                if (production != "#" )
                                {
                                    for (int i = production.Length - 1; i >= 0; i--)
                                    {
                                        analyseStack.Push(production[i]);
                                    }
                                }

                                // 在分析结果列表中添加产生式信息
                                resultAnalyse.Add(analyseStack.ToString());
                                resultInput.Add(inputStack.ToString());
                                resultParse.Add(topAnalyse + " -> " + production);
                                System.Console.WriteLine(analyseStack.ToString()+"\n");
                                System.Console.WriteLine(inputStack.ToString() + "\n");
                                System.Console.WriteLine(topAnalyse + " -> " + production + "\n");
                            }
                        }
                    }
                }
            }

            // 如果分析栈和输入栈都为空,则分析成功
            if (analyseStack.Count == 0 && inputStack.Count == 0)
            {
                resultParse.Add("成功");
            }
        }

解释:

通过调用 ToString() 方法,将获取到的产生式转换为字符串类型,从而可以正常输出分析串和剩余输出串。

注意:

table 字典的具体类型和结构可能需要根据您的代码进行调整。

希望以上内容能够解决您的问题!如果您还有其他问题,请随时提问。

C# 代码错误:无法正确输出分析串和剩余输出串,如何改正?

原文地址: https://www.cveoy.top/t/topic/fYD1 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录