using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;

namespace byyljxfzxt
{
    public partial class Form4 : Form
    {
        // ... 其他代码 ...

        private void button6_Click(object sender, EventArgs e)
        {
            if (!JudgeLL1(production, firsts, follows))
            {
                MessageBox.Show('该文法不是LL(1)文法,无法进行语法分析!\n');
                return;
            }

            string text = textBox1.Text;
            analyse_sentence analyse = new analyse_sentence(text, new Select(new LL1Item(production), new First(production, firsts), new Follow(production, firsts, follows)));
            richTextBox2.Text = '';
            richTextBox3.Text = '';
            richTextBox4.Text = '';
            foreach (var item in analyse.result_analys)
                richTextBox2.Text += item + '\n';
            foreach (var item in analyse.result_input)
                richTextBox3.Text += item + '\n';
            foreach (var item in analyse.result_parse)
                richTextBox4.Text += item + '\n';
        } 

        // ... 其他代码 ...
    }
}

代码说明:

button6_Click函数中,首先调用JudgeLL1函数判断当前文法是否为LL(1)文法。

如果是,则从textBox1获取用户输入的句子,并创建analyse_sentence类的实例进行语法分析。

analyse_sentence类需要传入输入句子、Select表、First集和Follow集等信息,用于进行语法分析。

最后,将语法分析的结果(分析栈、输入栈和分析过程)分别显示在richTextBox2richTextBox3richTextBox4中。

总结:

LL(1)文法分析器是编译原理中的重要内容,通过学习该文法分析器的实现,可以帮助我们更好地理解编译原理的相关知识,并掌握语法分析的基本方法。

C#实现LL(1)文法分析器:语法分析

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

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