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

本文关键字:代码 变量名 提取 c++ cpp 保存 存在 文件 | 更新日期: 2023-09-27 18:22:05

描述:

我正在制作一个剽窃检测应用程序,它从.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.");
}

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

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

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

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

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

P5RE语法中内置了对识别此类令牌的支持。要获得有关P5正则表达式的帮助,请询问一些P5程序员:)请特别查看PerlMonks网站。这是马嘴里的一句话。代码''w是"单词字符(字母数字和下划线)。零宽度断言是''b表示单词边界,''b表示而不是单词边界。这是一个教程。