正则表达式添加匈牙利表示法

kev*_*818 0 c++ regex perl hungarian-notation

我正在解析.h.cpp文件,我需要用匈牙利语等价物查找/替换所有非匈牙利语标注变量."啊,为什么?!" 你问?我的雇主要求使用匈牙利语,"努夫说.

我们ints现在就来处理吧.

鉴于任何这些情况......

int row;      // no hungarian prefix
int nrow(9);  // incorrect capitalization
int number;   // hmm...
int nnumber = getValue(); // uh oh!
Run Code Online (Sandbox Code Playgroud)

它们应该改为:

int nRow;
int nRow(9);    // obviously ctor args and assignments shouldn't change
int nNumber;
int nNumber = getValue();
Run Code Online (Sandbox Code Playgroud)

我正在为一个s///理想的单线电话进行拍摄.

对于增加的挑战,如果有人可以在"类型检查"之后获得更改此变量的所有实例int,那将为您赢得一些布朗尼点数.

这是我到目前为止所拥有的:

s/(int\s+)(?!n)(\w+)/$1n\u$2/g;
Run Code Online (Sandbox Code Playgroud)

这与之类似int nrow或不相符int number.

提前致谢!

SJu*_*n76 8

没有.

更明确地说,您正在尝试使用正则表达式编译程序.这不起作用.

例如,您的单行已经忘记了函数参数,并且它无法解析任何用户定义的类型(struct,enum).更不用说.cpp建议C++建议类.

此外,方法/函数/内联注释会发生什么?

我的建议是找到一个语法编译器并将其传递给c ++语法,因此对于每个定义,您都会获得写入文件的值和类型.然后你可以使用它获得正则表达式的乐趣.每次使用每个变量时,您都可以尝试编写,以便以后自动替换它们.

然而,一个简单的正则表达式要复杂得多,但是那个简单的正则表达式会失败太多,以至于你最终会手动更改代码.

作为一个积极的方面,也许当你告诉你的老板chane花多少钱时,他可能会更好地思考它.

  • 是的,你要编译它,但你还不知道.为了知道第30行的id变量是第10行的nId还是第20行的sId,你需要知道你是哪个方法/函数.此外,程序定义类型,类的问题.您将需要解析程序,构建符号表...您生成机器代码或修改后的源代码是不相关的. (5认同)