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

时间:2011-08-02 21:15:13

标签: c++ regex perl hungarian-notation

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

让我们暂时处理ints

鉴于其中任何一种情况......

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

他们应该改为:

int nRow;
int nRow(9);    // obviously ctor args and assignments shouldn't change
int nNumber;
int nNumber = getValue();

我正在为一次单线调用{+ 1}}进行理想拍摄。

对于额外的挑战,如果有人可以在使用s///进行“类型检查”之后更改此变量的所有实例,那么这将为您赢得一些布朗尼点。

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

int

但这与s/(int\s+)(?!n)(\w+)/$1n\u$2/g; int nrow之类的内容不匹配。

提前致谢!

1 个答案:

答案 0 :(得分:8)

没有

更明确地说,您正在尝试使用正则表达式编译程序。 This does not work that way

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

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

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

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

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