⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 product.cs

📁 这是一个完整的文法分析器
💻 CS
字号:
using System;
using System.Collections;

namespace SimpleLL1
{
	/// <summary>
	/// Produce 的摘要说明。
	/// </summary>
	public class Product
	{
		public string LeftItem;
		public ArrayList RightItems;

		#region 构造方法,构造一个产生式
		/// <summary>
		/// 构造方法,构造一个产生式
		/// </summary>
		/// <param name="m_LeftItem"></param>
		/// <param name="m_RightItem"></param>
		public Product(string m_LeftItem,ArrayList m_RightItem)
		{
			this.LeftItem=m_LeftItem;
			this.RightItems=m_RightItem;

		}
		/// <summary>
		/// 无参数构造方法
		/// </summary>
		public Product()
		{
			this.LeftItem="";
			this.RightItems=null;

		}
		#endregion

		#region 以字符串式的形式返回右部产生式
		/// <summary>
		/// 以字符串式的形式返回右部产生式
		/// </summary>
		/// <returns>string</returns>
		public string StringRightItem()
		{
			string strRight="";
			IEnumerator myEnumerator = RightItems.GetEnumerator();
			while ( myEnumerator.MoveNext() )
				strRight+=(string)myEnumerator.Current + " " ;
			return strRight.Trim();
			
		}
		#endregion

		#region 以字符串式的形式返回右部第index个产生式
		/// <summary>
		/// 以字符串式的形式返回右部第index个产生式
		/// </summary>
		/// <param name="index"></param>
		/// <returns>string</returns>
		public string StringRightItemAt(int index)
		{
			if (index>=RightItems.Count) return "";
			string strRight="";
			int iItem=0;
			IEnumerator myEnumerator = RightItems.GetEnumerator();
			while ( myEnumerator.MoveNext() && iItem!=index)
				iItem++;
			
			strRight+=(string)myEnumerator.Current;
			return strRight.Trim();
			
		}

		#endregion

		#region 检测一个产生式右部是否都是非终结符
		/// <summary>
		/// 检测第index个产生式右部是否都是非终结符
		/// </summary>
		/// <param name="index"></param>
		/// <returns>bool</returns>
		public bool CheckRightItemAt(int index)
		{
			if (index>=RightItems.Count) return false;
			string strRightItem=StringRightItemAt(index);
			for(int i=0 ; i< strRightItem.Length ; i++)
			{
				if(SymbolSet.getInstance().IsInNotEndSet(strRightItem.Substring(i,1))==false)
				{	
					return false;
				}
			}
			return true;
		}
		#endregion
		
		#region 返回所有产生式右部第一个非终结符字母
		/// <summary>
		/// 返回所有产生式右部第一个非终结符字母
		/// </summary>
		/// <returns>string[]</returns>
		public string [] FirstRight()
		{
			ArrayList aryFirstLetter=new ArrayList();

			for(int i=0 ; i<RightItems.Count ; i ++ )
			{
				string strFirstChar=RightItems[i].ToString().Substring(0,1);
				if(SymbolSet.getInstance().IsInNotEndSet(strFirstChar))
					aryFirstLetter.Add(strFirstChar);
			}
			if (aryFirstLetter.Count==0) return null;

			//重新定义变量arrLetters
			string [] arrLetters=new string[aryFirstLetter.Count];

			for(int j=0 ; j<aryFirstLetter.Count ; j++)
			{
				arrLetters[j]=aryFirstLetter[j].ToString();
			}
				
			return arrLetters;
			


		}

		#endregion

		#region 覆盖ToString方法,按照制定格式输出
		/// <summary>
		/// 覆盖ToString方法,按照制定格式输出
		/// </summary>
		/// <returns>string</returns>
		public override string  ToString()
		{
			string strProducts="";
			string strRight="";
			IEnumerator myEnumerator = RightItems.GetEnumerator();
			while ( myEnumerator.MoveNext() )
			{
				strRight=(string)myEnumerator.Current;
				strProducts+=LeftItem  + "→" + strRight + "\r\n";
			}
			return strProducts;
		}
		#endregion




	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -