2 * Example trivial client program that uses the sparse library
3 * to tokenize, pre-process and parse a C file, and prints out
6 * Copyright (C) 2003 Transmeta Corp.
9 * Licensed under the Open Software License version 1.1
23 #include "expression.h"
25 static void clean_up_symbol(struct symbol
*sym
, void *_parent
, int flags
)
27 check_duplicates(sym
);
32 int main(int argc
, char **argv
)
35 char *filename
= NULL
, **args
;
38 // Initialize symbol stream first, so that we can add defines etc
41 create_builtin_stream();
49 args
= handle_switch(arg
+1, args
);
56 fd
= open(filename
, O_RDONLY
);
58 die("No such file: %s", filename
);
60 // Tokenize the input stream
61 token
= tokenize(filename
, fd
, NULL
);
64 // Prepend any "include" file to the stream.
66 token
= tokenize(include
, include_fd
, token
);
68 // Prepend the initial built-in stream
69 token
= tokenize_buffer(pre_buffer
, pre_buffer_size
, token
);
71 // Pre-process the stream
72 token
= preprocess(token
);
74 if (preprocess_only
) {
75 while (!eof_token(token
)) {
77 struct token
*next
= token
->next
;
78 char * separator
= "";
79 if (next
->pos
.whitespace
)
81 if (next
->pos
.newline
) {
82 separator
= "\n\t\t\t\t\t";
87 printf("%s%.*s", show_token(token
), prec
, separator
);
95 // Parse the resulting C code
96 translation_unit(token
, &used_list
);
98 // Do type evaluation and simplify
99 symbol_iterate(used_list
, clean_up_symbol
, NULL
);