📄 product.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 + -