1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
typedef void* yyscan_t;
#include "ast.h"
#include "common.h"
#include "state.h"
#include "libparser_a-parser.h"
#include <errno.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
extern int ccmmc_parser_lex_init_extra(void *extra, yyscan_t *scanner);
extern int ccmmc_parser_lex_destroy(yyscan_t *scanner);
extern int ccmmc_parser_set_in(FILE *source_handle, yyscan_t scanner);
const char *ccmmc_main_name;
int main (int argc, char **argv)
{
ERR_DECL;
setlocale (LC_ALL, "");
name = strrchr (argv[0], '/');
name = name == NULL ? name : name + 1;
if (argc != 2) {
fprintf(stderr, "Usage: %s SOURCE\n", name);
exit(1);
}
const char *source_name = argv[1];
FILE *source_handle = fopen(source_name, "r");
if (source_handle == NULL) {
fprintf(stderr, "%s: %s: %s\n", name, source_name, ERR_MSG);
exit(1);
}
CcmmcState state_struct;
CcmmcState *state = &state_struct;
ccmmc_state_init(state);
yyscan_t scanner;
ccmmc_parser_lex_init_extra(state, &scanner);
ccmmc_parser_set_in(source_handle, scanner);
switch (ccmmc_parser_parse(scanner, state)) {
case 1:
fprintf(stderr, "%s: failed because of invalid input\n", name);
exit(1);
case 2:
fprintf(stderr, "%s: failed because of memory exhaustion\n", name);
exit(1);
default:
; // silence warnings
}
ccmmc_parser_lex_destroy(scanner);
printGV(state->ast, NULL);
ccmmc_state_fini(state);
fclose(source_handle);
return 0;
}
// vim: set sw=4 ts=4 sts=4 et:
|