如何从保存在.c,.cpp文件中的c,c++代码中提取变量名
how to extract variable names from a c,c++ code saved in a .c,.cpp file
描述:
我正在制作一个剽窃检测应用程序,它从.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.");
}
有人能告诉我我做错了什么吗?或者至少能让我朝着正确的方向前进吗?
我不确定正则表达式是否是执行您想要执行的操作的好方法。我只使用过它们来查找某些文本模式。问题是,并不是每个与表达式匹配的单词都是变量名,你必须过滤关键字、字符串文字、常量定义等
我建议解析代码,然后遍历抽象语法树、解析树或解析器生成的任何内容。
ANTLR文档中给出了一个很好的例子来说明如何做这样的事情。据我记忆所及,他们提供了C和C++语法。
P5RE语法中内置了对识别此类令牌的支持。要获得有关P5正则表达式的帮助,请询问一些P5程序员:)请特别查看PerlMonks网站。这是马嘴里的一句话。代码\w是"单词字符(字母数字和下划线)。零宽度断言是\b表示单词边界,\b表示而不是单词边界。这是一个教程。
相关文章:
- 你能重载对象变量名本身返回的内容吗
- 在C/C++中将变量名定义为__00000001有什么好处吗
- C++变量名(可以将 main 声明为变量,但对于其他函数名称则不然)
- C++ - 声明中变量名后面的括号
- 如何使替换 c 函数的变量名成为错误?
- 是否可以创建没有变量名的变量
- fstream库,试图创建一个变量名为(c++)的文件
- 一个数组C++中的消息和变量名
- 在变量名后声明带有 () 的非内部类型与不使用变量名的行为不同。即 std::map<int,char>x(); - 这是怎么回事?
- 数组的变量名和该数组的地址有什么区别?
- 如何将变量名设置为字符串?C++
- 类中具有相同变量名的多重继承
- 如何在从.txt文件中读取时不重复相同的变量名
- 在循环中使用相同的变量名可以吗
- C++保留符号作为C变量名
- 在C++中,在给定的相同作用域内声明相同的变量名
- 为什么类名与"::"一起使用在变量名之前?
- 用g++编译变量名为new的C代码时出错
- 如何从保存在.c,.cpp文件中的c,c++代码中提取变量名
- 变量名为TYPE_BOOL(c++代码)与ios宏冲突