Поиск и замена в исходном коде C, не касаясь комментариев - PullRequest
5 голосов
/ 19 июля 2011

У меня много кода на языке c, в котором я хотел бы заменить старый стиль синтаксиса новым стилем. Например. следующие префиксы "si":

int siName;

должно стать "я":

int iName;

Но рег-выражение или другой инструмент поиска / замены не должен касаться комментариев исходного кода. Любое решение?

Ответы [ 4 ]

2 голосов
/ 19 июля 2011

Вы можете попробовать Coccinelle .Он имеет некоторую кривую обучения, но он анализирует код C и выполняет преобразования, данные ему в сценарии.Например, для переименования функции из foo в bar скрипт должен выглядеть следующим образом ( здесь ):

@@

@@

-foo()
+bar()

Возможно, он также может переименовывать переменные на основе регулярных выраженийХотя я еще не нашел способ.

1 голос
/ 19 июля 2011

В ви используется

       :%s/\<Oldword\>/Newword/gc

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

0 голосов
/ 26 июля 2014

Что касается предложения о Coccinelle, вы можете сопоставлять с помощью регулярных выражений, используя следующие обозначения:

identifier foo =~ "xxx";

То есть foo будет соответствовать любому идентификатору, который содержит xxx.Поддерживаются регулярные выражения PCRE.

Вы также можете использовать python, чтобы создать новый идентификатор:

@a@
identifier x;
@@

foo(x)

@script:python b@
x << a.x;
xx;
@@

coccinelle.xx = "%s%s" % (x,x)

@@
identifier a.x;
identifier b.xx;
@@

 foo(
-  x
+  xx
   )

Для программы:

int main () {
  foo(one);
}

Это дает

int main () {
  foo(oneone);
}
0 голосов
/ 04 августа 2011

Почему бы не выполнить поиск вместо "int si" -> "int i"? Если вы следовали некоторому соглашению об именах (надеюсь, не венгерской нотации), тогда конфликты должны быть минимальными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...