Pergunta

Alguém tem experiência com Sparse ? I parecem incapazes de encontrar qualquer documentação, de modo que os avisos e erros que ele produz não são claras para mim. Tentei verificar a lista de endereços e página de homem, mas não há realmente muito em qualquer um.

Por exemplo, eu uso INT_MAX em um dos meus arquivos. Isso gera um erro (identificador indefinido) mesmo que eu #include limits.h.

Existe algum lugar onde os erros e avisos têm sido explicado?

Foi útil?

Solução

Sparse não se destina a ser um fiapo, por dizer. Esparsa se destina a produzir uma árvore de análise de código arbitrário para que ele possa continuar a ser analisados.

No seu exemplo, você quer quer definir GNU_SOURCE (que eu acredito voltas em __GNUC__), que expõe os bits que você precisa em limits.h

Gostaria de evitar definir __GNUC__ por conta própria, como várias coisas que ativa pode se comportar de uma maneira indefinida sem todos os outros interruptores que voltas GNU_SOURCE em ser definidos.

O meu ponto não é para ajudá-lo de erro de squash por erro, sua reiterar que escassa é usado principalmente como uma biblioteca, e não como uma ferramenta de análise estática independente.

De minha cópia do README (não tenho certeza se eu tiver a versão atual):

This means that a user of the library will literally just need to do

  struct string_list *filelist = NULL;
  char *file;

  action(sparse_initialize(argc, argv, filelist));

  FOR_EACH_PTR_NOTAG(filelist, file) {
    action(sparse(file));
  } END_FOR_EACH_PTR_NOTAG(file);

and he is now done - having a full C parse of the file he opened.  The
library doesn't need any more setup, and once done does not impose any
more requirements.  The user is free to do whatever he wants with the
parse tree that got built up, and needs not worry about the library ever
again.  There is no extra state, there are no parser callbacks, there is
only the parse tree that is described by the header files. The action
function takes a pointer to a symbol_list and does whatever it likes with it.

The library also contains (as an example user) a few clients that do the
preprocessing, parsing and type evaluation and just print out the
results.  These clients were done to verify and debug the library, and
also as trivial examples of what you can do with the parse tree once it
is formed, so that users can see how the tree is organized.

Os clientes incluídos são mais 'conjuntos de testes funcionais e exemplos' do que qualquer coisa. É uma ferramenta muito útil, mas você pode considerar um outro ângulo uso se você quiser empregá-lo. Eu gosto dele porque ele não usa * lex / bisonte, o que torna extremamente fácil de cortar.

Outras dicas

Se você olhar para limits.h você verá que INT_MAX é definido dentro deste #if

/* If we are not using GNU CC we have to define all the symbols ourself.
 Otherwise use gcc's definitions (see below).  */
#if !defined __GNUC__ || __GNUC__ < 2

de modo a fazê-lo funcionar você deve undefine __GNUC__ antes de incluir limits.h

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top