我们的编译原理实验已经做到了文法分析了,其中一个就是区分终结符和非终结符。有的文法开始没有G[S]:,可是大部分都是有的。在区分的时候不能将这些包含在其中。G[S]:这个给我们的信息是,文法开始符是:S,但是G却不是非终结符,所以要将其挑出来。在G[S]:中,它们是作为一个整体的。其中可能还有变化,如G1[S]:等,所以需要正则表达式来匹配。
这个正则表达式是 @"^[A-Z][0-9]{0,1}\[[A-Z]\]:$" ,构造也是很容易的,但是第一次test的时候却没有成功。今天早上我一个个字母匹配的结果还是这样,这次实验却成功了。真不明白为什么会这样,或许是G1[S]:中的冒号有问题吧。可能是中文的或是全角的。我感觉这个正则表达式挺好玩的。
这只是一段测试代码
Code
using System.Text.RegularExpressions;
namespace regex
{
class test
{
public static void Main()
{
string input = "A1[S]:";
string patten = @"^[A-Z][0-9]{0,1}\[[A-Z]\]:$";
Regex reg = new Regex(patten);
//Regex reg = new Regex(@"^[A-Z][0-9]{0,1}\[[A-Z]\]:$");
Match match = reg.Match(input);
if (match.Success)
{
System.Console.WriteLine("匹配成功!");
}
else
{
System.Console.WriteLine("匹配不成功!");
}
}
}
}
using System.Text.RegularExpressions;
namespace regex
{
class test
{
public static void Main()
{
string input = "A1[S]:";
string patten = @"^[A-Z][0-9]{0,1}\[[A-Z]\]:$";
Regex reg = new Regex(patten);
//Regex reg = new Regex(@"^[A-Z][0-9]{0,1}\[[A-Z]\]:$");
Match match = reg.Match(input);
if (match.Success)
{
System.Console.WriteLine("匹配成功!");
}
else
{
System.Console.WriteLine("匹配不成功!");
}
}
}
}
在编码的时候还是要细心,避免一些逻辑错误。