Lines Matching refs:expression
2 * sparse/expression.c
25 * This is the expression parsing part of parsing C.
43 #include "expression.h"
63 static struct token *comma_expression(struct token *, struct expression **);
65 struct token *parens_expression(struct token *token, struct expression **expr, const char *where)
72 struct expression *e = alloc_expression(token->pos, EXPR_STATEMENT);
79 token = expect(token, '}', "at end of statement expression");
84 sparse_error(token->pos, "an expression is expected before ')'");
88 struct token *string_expression(struct token *token, struct expression **expr, const char *where)
148 static struct token *parse_type(struct token *token, struct expression **tree)
155 "type expression should not include identifier "
162 struct expression **tree)
164 struct expression *expr = alloc_expression(
188 struct expression **tree)
190 struct expression *expr = NULL;
191 struct expression **p = &expr;
203 "type expression should not include identifier "
210 struct expression *e;
261 static void get_number_value(struct expression *expr, struct token *token)
388 static struct token *generic_selection(struct token *token, struct expression **tree)
390 struct expression *expr = alloc_expression(token->pos, EXPR_GENERIC);
409 warning(token->pos, "multiple default in generic expression");
419 return expect(token, ')', "after expression");
422 struct token *primary_expression(struct token *token, struct expression **tree)
424 struct expression *expr = NULL;
488 sparse_error(token->pos, "typename in expression");
515 token = parens_expression(token, &expr->unop, "in expression");
521 token = expect(token, ']', "in type expression");
535 struct expression *expr = NULL;
551 static struct token *postfix_expression(struct token *token, struct expression **tree, struct expression *cast_init_expr)
553 struct expression *expr = cast_init_expr;
561 struct expression *deref = alloc_expression(token->pos, EXPR_PREOP);
562 struct expression *add = alloc_expression(token->pos, EXPR_BINOP);
576 struct expression *post = alloc_expression(token->pos, EXPR_POSTOP);
585 struct expression *inner = alloc_expression(token->pos, EXPR_PREOP);
592 struct expression *deref = alloc_expression(token->pos, EXPR_DEREF);
607 struct expression *call = alloc_expression(token->pos, EXPR_CALL);
625 static struct token *cast_expression(struct token *token, struct expression **tree);
626 static struct token *unary_expression(struct token *token, struct expression **tree);
629 struct expression **tree, int type)
631 struct expression *expr = alloc_expression(token->pos, type);
654 * of a typed initializer expression..
657 struct expression *cast = alloc_expression(p->pos, EXPR_CAST);
667 static struct token *unary_expression(struct token *token, struct expression **tree)
694 struct expression *unop;
695 struct expression *unary;
700 sparse_error(token->pos, "Syntax error in unary expression");
712 struct expression *unop;
713 struct expression *unary;
718 sparse_error(token->pos, "Syntax error in unary expression");
731 struct expression *label = alloc_expression(token->pos, EXPR_LABEL);
750 * Ambiguity: a '(' can be either a cast-expression or
751 * a primary-expression depending on whether it is followed
754 * additional ambiguity: a "cast expression" followed by
755 * an initializer is really a postfix-expression.
757 static struct token *cast_expression(struct token *token, struct expression **tree)
762 struct expression *cast = alloc_expression(next->pos, EXPR_CAST);
763 struct expression *v;
801 * that we can pass in the op-comparison as an expression rather
806 struct expression *left = NULL; \
811 struct expression *top, *right = NULL; \
819 sparse_error(next->pos, "No right hand side of '%s'-expression", show_special(op)); \
832 static struct token *multiplicative_expression(struct token *token, struct expression **tree)
840 static struct token *additive_expression(struct token *token, struct expression **tree)
848 static struct token *shift_expression(struct token *token, struct expression **tree)
856 static struct token *relational_expression(struct token *token, struct expression **tree)
865 static struct token *equality_expression(struct token *token, struct expression **tree)
873 static struct token *bitwise_and_expression(struct token *token, struct expression **tree)
881 static struct token *bitwise_xor_expression(struct token *token, struct expression **tree)
889 static struct token *bitwise_or_expression(struct token *token, struct expression **tree)
897 static struct token *logical_and_expression(struct token *token, struct expression **tree)
905 static struct token *logical_or_expression(struct token *token, struct expression **tree)
913 struct token *conditional_expression(struct token *token, struct expression **tree)
917 struct expression *expr = alloc_expression(token->pos, EXPR_CONDITIONAL);
922 token = expect(token, ':', "in conditional expression");
928 struct token *assignment_expression(struct token *token, struct expression **tree)
942 struct expression * expr = alloc_expression(token->pos, EXPR_ASSIGNMENT);
949 expression_error(expr, "expression expected before '%s'", show_token(token));
956 static struct token *comma_expression(struct token *token, struct expression **tree)
964 struct token *parse_expression(struct token *token, struct expression **tree)