2 * filter-grammar-test.c
4 * LTTng filter grammar test
6 * Copyright 2012 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
8 * SPDX-License-Identifier: LGPL-2.1-only
19 #include "filter-ast.h"
20 #include "filter-parser.h"
21 #include "filter-bytecode.h"
23 int main(int argc
, char **argv
)
25 struct filter_parser_ctx
*ctx
;
27 int print_xml
= 0, generate_ir
= 0, generate_bytecode
= 0,
31 for (i
= 1; i
< argc
; i
++) {
32 if (strcmp(argv
[i
], "-p") == 0)
34 else if (strcmp(argv
[i
], "-i") == 0)
36 else if (strcmp(argv
[i
], "-b") == 0)
37 generate_bytecode
= 1;
38 else if (strcmp(argv
[i
], "-d") == 0)
39 filter_parser_debug
= 1;
40 else if (strcmp(argv
[i
], "-B") == 0)
44 ctx
= filter_parser_ctx_alloc(stdin
);
46 fprintf(stderr
, "Error allocating parser\n");
49 ret
= filter_parser_ctx_append_ast(ctx
);
51 fprintf(stderr
, "Parse error\n");
55 ret
= filter_visitor_print_xml(ctx
, stdout
, 0);
58 fprintf(stderr
, "XML print error\n");
63 printf("Generating IR... ");
65 ret
= filter_visitor_ir_generate(ctx
);
67 fprintf(stderr
, "Generate IR error\n");
72 printf("Validating IR... ");
74 ret
= filter_visitor_ir_check_binary_op_nesting(ctx
);
80 if (generate_bytecode
) {
81 printf("Generating bytecode... ");
83 ret
= filter_visitor_bytecode_generate(ctx
);
85 fprintf(stderr
, "Generate bytecode error\n");
89 printf("Size of bytecode generated: %u bytes.\n",
90 bytecode_get_len(&ctx
->bytecode
->b
));
94 unsigned int bytecode_len
, len
, i
;
96 len
= bytecode_get_len(&ctx
->bytecode
->b
);
97 bytecode_len
= ctx
->bytecode
->b
.reloc_table_offset
;
98 printf("Bytecode:\n");
99 for (i
= 0; i
< bytecode_len
; i
++) {
101 ((uint8_t *) ctx
->bytecode
->b
.data
)[i
]);
104 printf("Reloc table:\n");
105 for (i
= bytecode_len
; i
< len
;) {
107 *(uint16_t *) &ctx
->bytecode
->b
.data
[i
]);
108 i
+= sizeof(uint16_t);
109 printf("%s } ", &((char *) ctx
->bytecode
->b
.data
)[i
]);
110 i
+= strlen(&((char *) ctx
->bytecode
->b
.data
)[i
]) + 1;
115 filter_bytecode_free(ctx
);
117 filter_parser_ctx_free(ctx
);
121 filter_bytecode_free(ctx
);
123 filter_parser_ctx_free(ctx
);
This page took 0.032419 seconds and 4 git commands to generate.