private void Analyse(string text, Dictionary<char, Dictionary<string, List>> select) { // 初始化成员变量 analyse = new Stack(); input = new Stack(); result_analys = new List(); result_input = new List(); result_parse = new List();

// 对分析栈、输入栈进行初始化
var selects = select.getselects();
analyse.push('#');
analyse.push(selects.First().Key[0]);
input.push('#');
for (int i = text.Length - 1; i >= 0; i--)
{
    input.push(text[i]);
}

result_analys.Add(analyse.getString());
result_input.Add(input.getString());

while (true)
{
    // 如果分析栈栈顶元素为终结符
    if (IsTerminal(analyse.peek()))
    {
        // 当两个栈都只剩下#时,说明匹配成功
        if (analyse.peek() == input.peek() && analyse.length() == 1 && input.length() == 1)
        {
            result_parse.Add("成功");
            return;
        }
        if (analyse.peek() == input.peek())
        {
            result_parse.Add("\"" + analyse.peek() + "\"匹配");
            analyse.pop();
            input.pop();
            result_analys.Add(analyse.getString());
            result_input.Add(input.getString());
            continue;
        }
        else
        {
            result_parse.Add("失败");
            return;
        }
    }

    int flag = 0;
    string nofinal = analyse.peek().ToString();
    string final = input.peek().ToString();
    foreach (var parse in selects[nofinal])
    {
        if (parse.Value.Contains(final))
        {
            result_parse.Add(nofinal + "->" + parse.Key);
            analyse.pop();
            // 当推出的产生式不为空时,对分析栈进行添加
            if (!parse.Key.Equals("#"))
            {
                addanalyse(parse.Key);
            }
            result_analys.Add(analyse.getString());
            result_input.Add(input.getString());
            flag = 1;
            break;
        }
    }
    // 说明该非终结符中没有可推导出该终结符的产生式
    if (flag == 0)
    {
        result_parse.Add("失败");
        return;
    }
}

} ``

void analyseresult var selects = selectgetselects; analysepush#; analysepushselectsFirstKey0; inputpush#; for int i= textLength-1; i=0; i

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

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