Regex для добавления венгерской нотации - PullRequest
0 голосов
/ 03 августа 2011

Я анализирую .h и .cpp файлы и мне нужно найти / заменить все не венгерские нотационные переменные их венгерскими эквивалентами . "Ага, почему ?!" ты спрашиваешь? Мой работодатель требует венгерских обозначений, - сказал Нуфф.

Давайте сейчас разберемся с 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();

Я снимаю всего за один однолинейный вызов на s/// в идеале.

Для дополнительного испытания, если кто-то может получить что-то, чтобы изменить ВСЕ экземпляры этой переменной после «проверки типа» с помощью int, это принесет вам несколько очков брауни.

Вот что у меня есть:

s/(int\s+)(?!n)(\w+)/$1n\u$2/g;

Это не соответствует таким вещам, как int nrow или int number.

Заранее спасибо!

1 Ответ

8 голосов
/ 03 августа 2011

номер

Более конкретно, вы пытаетесь скомпилировать программу, используя регулярное выражение. Это не работает .

Например, ваша однострочная уже забывает о параметрах функции и не может анализировать определенный пользователем тип (struct, enum). Не говоря уже о том, что .cpp предлагает C ++ предлагать классы.

Кроме того, что происходит с методом / функцией / встроенными комментариями?

Мой совет - найти где-нибудь компилятор грамматики и передать ему грамматику c ++, поэтому для каждого определения вы получаете значение и тип, записанные в файл. Тогда вы можете повеселиться с ним. Вы также можете попробовать писать каждый раз, когда каждая переменная используется, чтобы впоследствии автоматически заменить их.

Все же гораздо сложнее, чем простое регулярное выражение, но это простое регулярное выражение потерпит неудачу настолько, что в конце вы будете изменять код вручную.

В качестве положительного замечания, может быть, когда вы скажете своему боссу, сколько стоит шан, возможно, он подумает об этом лучше.

...