如何从保存在.c,.cpp文件中的c,c ++代码中提取变量名

时间:2014-09-17 07:44:51

标签: c# c++ regex

说明:

我正在制作一个抄袭检测应用程序,它会从.c,.cpp文件中读取学生提交的源代码,并提取所有变量名称以对它们执行某些操作。

我尝试了什么:

我尝试使用正则表达式,但是id不起作用

textBox1.Text = "int sum,a;";
System.Text.RegularExpressions.Regex regex = 
 new System.Text.RegularExpressions.Regex(
  @"^[a-zA-Z](([a-zA-Z0-9]*)|(_[a-zA-Z0-9]_*)|(_[a-zA-Z0-9]*)|([a-zA-Z0-9]_*))$");
if (regex.IsMatch(textBox1.Text))
{
    MessageBox.Show("Value is correct.");
}
else
{
    MessageBox.Show("Value is not correct.");
}

有人能告诉我我做错了什么或者至少让我朝着正确的方向前进吗?

2 个答案:

答案 0 :(得分:0)

我不确定正则表达式是否是做你想做的事情的好方法。我只使用它们来查找某些文本模式。问题是,并非每个与您的表达式匹配的单词都是变量名,您必须过滤关键字,字符串文字,常量定义等。

我建议解析代码,然后走抽象语法树,解析树或解析器生成的任何内容。

ANTLR文档中给出了如何做这样的事情的一个很好的例子。据我记得,他们提供了C语言和C ++语法。

答案 1 :(得分:-1)

内置支持在P5RE语法中识别这种令牌。要获得有关P5正则表达式的帮助,请询问一些P5程序员:)特别是请查看PerlMonks网站。 Here is a reference来自马的嘴。代码\ w是“单词字符(字母数字和下划线)。零宽度断言是\ b表示字边界,\ B表示不是字边界。Here是一个教程。