Como extrair uma função do arquivo? [fechadas]

2

Estou procurando um comando para extrair uma função C do meu código. Seria algo como:

$ grep -func "MyFunction" foo.c

int MyFunction(int i) {
    return i+1;
}

Eu sei que podemos extraí-lo com um REGEX, mas estou procurando algo mais amigável.

    
por pl-94 18.04.2016 / 22:57

2 respostas

1

Assumindo que o arquivo está sintaticamente correto, você poderia formatá-lo com indent e tornar o processo para localizar e extrair a função muito mais simples:

  • com indent , você pode criar o nome da função na primeira coluna de uma linha, seguido por um parêntese esquerdo e
  • depois disso, a próxima chave direita '}' aparecendo na primeira coluna encerraria a função.

Aqui está um exemplo simples usando o GNU indent e awk :

#!/bin/sh
# $1 = file name
# $2 = function name
indent -st -orig "$1" | awk '
BEGIN { state = 0; last = ""; }
$0 ~ /^'$2'\(/ { print last; state = 1; }
        { if (state == 1) print; }
$0 ~ /^}/ { if (state) state = 2; }
        { last = $0; }
'
    
por 19.04.2016 / 00:39
1

Se você precisar apenas do cabeçalho da função, poderá usar ctags :

$ ctags -x foo.c
MyFunction         1 foo.c            int MyFunction(int i) {
    
por 18.04.2016 / 23:47

Tags