Fix dependencies again, after again having been bitten by me being
[smatch.git] / parse.h
blobb690d9276af38a22aa9846136366191bb2f8ad9d
1 #ifndef PARSE_H
2 #define PARSE_H
4 #include "symbol.h"
6 enum expression_type {
7 EXPR_PRIMARY,
8 EXPR_BINOP,
9 EXPR_DEREF,
10 EXPR_PREOP,
11 EXPR_POSTOP,
12 EXPR_CAST,
13 EXPR_SIZEOF,
14 EXPR_CONDITIONAL,
15 EXPR_STATEMENT,
18 struct expression {
19 int type, op;
20 struct token *token;
21 union {
22 struct expression *unop;
23 struct statement *statement;
24 struct binop_arg {
25 struct expression *left, *right;
27 struct deref_arg {
28 struct expression *deref;
29 struct token *member;
31 struct cast_arg {
32 struct symbol *cast_type;
33 struct expression *cast_expression;
35 struct conditional_expr {
36 struct expression *conditional, *cond_true, *cond_false;
38 struct statement_struct {
39 struct symbol_list *syms;
40 struct statement_list *stmts;
45 enum statement_type {
46 STMT_NONE,
47 STMT_EXPRESSION,
48 STMT_COMPOUND,
49 STMT_IF,
50 STMT_RETURN,
51 STMT_BREAK,
52 STMT_CONTINUE,
53 STMT_CASE,
54 STMT_SWITCH,
55 STMT_FOR,
56 STMT_WHILE,
57 STMT_DO,
58 STMT_LABEL,
59 STMT_GOTO,
60 STMT_ASM,
63 struct statement {
64 int type;
65 struct token *token;
66 struct statement *next;
67 union {
68 struct label_arg {
69 struct token *label;
70 struct statement *label_statement;
72 struct expression *expression;
73 struct if_statement {
74 struct expression *if_conditional;
75 struct statement *if_true;
76 struct statement *if_false;
78 struct compound_struct {
79 struct symbol_list *syms;
80 struct statement_list *stmts;
82 struct labeled_struct {
83 struct token *label_identifier;
84 struct statement *label_statement;
86 struct case_struct {
87 struct expression *case_expression;
88 struct expression *case_to;
89 struct statement *case_statement;
91 struct switch_struct {
92 struct expression *switch_expression;
93 struct statement *switch_statement;
95 struct iteration_struct {
96 struct expression *e1, *e2, *e3;
97 struct statement *iterate;
99 struct goto_struct {
100 struct token *goto_label;
101 struct expression *goto_expression;
106 extern struct token *parse_expression(struct token *, struct expression **);
107 extern struct token *statement_list(struct token *, struct statement_list **);
109 extern void show_statement(struct statement *);
110 extern void show_statement_list(struct statement_list *);
111 extern void show_expression(struct expression *);
112 extern void translation_unit(struct token *, struct symbol_list **);
114 #endif /* PARSE_H */