LL(1) 文法判定工具

本工具可以帮助您分析输入的文法是否为 LL(1) 文法。输入您的文法规则,即可获取该文法的 FIRST 集合、FOLLOW 集合以及判断结果。

使用方法:

  1. 在文本框中输入您的文法规则,每条规则占一行。
  2. 点击“分析”按钮,即可查看结果。

示例:

E -> E + T | T
T -> T * F | F
F -> ( E ) | id

代码实现:

private void button4_Click(object sender, EventArgs e)
{
    // 获取输入的文法字符串
    string text = textBox1.Text;

    // 创建LL1_1_对象进行计算
    isLL_1_ ll1 = new isLL_1_(text);

    // 输出FIRST集合和FOLLOW集合
    if (ll1.is_LL == 1)
    {
        Dictionary<string, List<string>> firsts = ll1.first.getfirsts();
        Dictionary<string, List<string>> follows = ll1.follow.getfollows();

        listBox1.Items.Add('FIRST集合:');
        foreach (var item in firsts)
        {
            listBox1.Items.Add(item.Key + ': {' + string.Join(',', item.Value) + '}');
        }

        listBox1.Items.Add('');
        listBox1.Items.Add('FOLLOW集合:');
        foreach (var item in follows)
        {
            listBox1.Items.Add(item.Key + ': {' + string.Join(',', item.Value) + '}');
        }

        // 判断是否是LL(1)文法
        if (ll1.is_LL == -1)
        {
            listBox1.Items.Add('');
            listBox1.Items.Add('该文法不是LL(1)文法。');
        }
        else
        {
            listBox1.Items.Add('');
            listBox1.Items.Add('该文法是LL(1)文法。');
        }
    }
    else
    {
        listBox1.Items.Add('输入的文法不符合LL(1)文法的定义。');
    }
}

代码说明:

  • isLL_1_ 类用于计算 FIRST 集合、FOLLOW 集合以及判断文法是否为 LL(1) 文法。
  • first 类用于计算 FIRST 集合。
  • follow 类用于计算 FOLLOW 集合。
  • getfirsts()getfollows() 方法用于获取计算出的 FIRST 集合和 FOLLOW 集合。
  • button4_Click() 方法是按钮点击事件的处理函数,用于获取输入的文法字符串,创建 isLL_1_ 对象进行计算,并将结果输出到 ListBox 中。

注意:

  • 输入的文法规则必须符合 LL(1) 文法的语法格式,否则无法进行判断。
  • 由于代码实现的局限性,无法处理所有类型的 LL(1) 文法。

免责声明: 本工具仅供学习参考,不保证其正确性和完整性。如有任何问题,请自行查阅相关资料或咨询专业人士。

LL(1) 文法判定工具 - 在线分析你的文法是否为 LL(1) 文法

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

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