using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Syntax_Analysis
{
    public partial class Form1 : Form
    {
        Select select;
        public Form1()
        {
            InitializeComponent();
            select = new Select();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string[] productions = richTextBox1.Text.Split('
');
            foreach (string production in productions)
            {
                if (production.Trim().Length != 0)
                {
                    select.addproduction(production.Trim());
                }
            }
            MessageBox.Show("添加完成");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            listView1.Items.Clear();
            var selects = select.getselects();
            foreach (var select in selects)
            {
                ListViewItem item = new ListViewItem(select.Key);
                item.SubItems.Add(select.Value.Keys.First());
                item.SubItems.Add(string.Join(",", select.Value.Values.First()));
                listView1.Items.Add(item);
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            string text = richTextBox2.Text;
            analyse_sentence analyse = new analyse_sentence(text, select);
            listView2.Items.Clear();
            listView3.Items.Clear();
            listView4.Items.Clear();
            for (int i = 0; i < analyse.result_analys.Count; i++)
            {
                ListViewItem item1 = new ListViewItem((i+1).ToString());
                item1.SubItems.Add(analyse.result_analys[i]);
                listView2.Items.Add(item1);

                ListViewItem item2 = new ListViewItem((i + 1).ToString());
                item2.SubItems.Add(analyse.result_input[i]);
                listView3.Items.Add(item2);

                ListViewItem item3 = new ListViewItem((i + 1).ToString());
                item3.SubItems.Add(analyse.result_parse[i]);
                listView4.Items.Add(item3);
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            richTextBox1.Text = "";
            select.clear();
            MessageBox.Show("清空完成");
        }

        private void button5_Click(object sender, EventArgs e)
        {
            richTextBox2.Text = "";
        }

        private void button6_Click(object sender, EventArgs e)
        {
            listView1.Items.Clear();
        }

        private void button7_Click(object sender, EventArgs e)
        {
            //添加分析表达式
            string[] productions = richTextBox1.Text.Split('
');
            foreach (string production in productions)
            {
                if (production.Trim().Length != 0)
                {
                    select.addproduction(production.Trim());
                }
            }

            //获取需要分析的句子
            string text = richTextBox2.Text;

            //进行句子分析
            analyse_sentence analyse = new analyse_sentence(text, select);

            //将分析结果添加到listView4中
            listView4.Items.Clear();
            for (int i = 0; i < analyse.result_parse.Count; i++)
            {
                ListViewItem item = new ListViewItem((i + 1).ToString());
                item.SubItems.Add(analyse.result_parse[i]);
                listView4.Items.Add(item);
            }
        }

        private void button8_Click(object sender, EventArgs e)
        {
            //清空分析表达式
            select.clear();

            //清空listView1中的内容
            listView1.Items.Clear();
        }

        private void button9_Click(object sender, EventArgs e)
        {
            //清空需要分析的句子
            richTextBox2.Text = "";

            //清空listView2、listView3、listView4中的内容
            listView2.Items.Clear();
            listView3.Items.Clear();
            listView4.Items.Clear();
        }
    }
}

上述代码完成了基本的语法分析功能,包括添加分析表达式、显示分析表达式、分析句子以及清空相关信息。

注意:

  • Select 类用于存储分析表达式,需要根据实际情况进行实现。
  • analyse_sentence 类用于执行自动推导分析,并存储分析结果。
  • Form1 类包含了界面相关的代码,用于与用户交互。

使用方法:

  1. richTextBox1 中输入分析表达式,每个表达式占一行。
  2. 点击 "添加分析表达式" 按钮将表达式添加到 select 对象中。
  3. 点击 "显示分析表达式" 按钮将 select 对象中的表达式显示在 listView1 中。
  4. richTextBox2 中输入需要分析的句子。
  5. 点击 "分析句子" 按钮执行分析,并将分析结果显示在 listView4 中。
  6. 可以点击 "清空分析表达式"、"清空句子" 以及 "清空结果" 按钮分别清空对应的内容。

示例:

分析表达式:

S->AB
A->a
B->b

句子:

ab

分析结果:

S->AB
AB->aB
aB->ab
成功
C# 语法分析器实现:自动推导分析算法

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

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