示例#1
0
文件: expr.c 项目: BigEd/Cores
// mult_expr
// mult_expr [+-] add_expr_list
//
int64_t add_expr()
{
    int64_t val;
    
    val = mult_expr();
    while (1) {
        switch(token) {
        case '+': NextToken(); val = val + mult_expr(); break;
        case '-': NextToken(); val = val - mult_expr(); break;
        default: goto j1;
        }
    }
j1:
    return val;
}
示例#2
0
文件: syntax.c 项目: apetrunev/bclite
static struct ast_node*
sum_expr(void) 
{
	struct ast_node *node;
	struct ast_node *rest_node;

	node = mult_expr();

	if (node == NULL)
		return NULL;

	rest_node = rest_sum(node);

	return rest_node;
}
示例#3
0
文件: syntax.c 项目: apetrunev/bclite
static struct ast_node*
rest_sum(struct ast_node *node)
{
	struct ast_node *prev_node;
	struct ast_node *ret_node;
	struct ast_node *mult_node;
	char op;
	
	prev_node = node;
	
	while (TRUE) {
		switch(current_token) {
		case TOKEN_PLUS:
			op = '+';
			break;
		case TOKEN_MINUS:
			op = '-';
			break;
		default:
			goto exit_sum;
		}

		consume_token();
		mult_node = mult_expr();
		
		if (mult_node == NULL) {
			error_msg("error: syntax error");
			mult_node = (struct ast_node *)ast_node_stub();
		}
		
		prev_node = (struct ast_node *)ast_node_op(op, prev_node, mult_node);	
	}

exit_sum:
	ret_node = prev_node;
	return ret_node;
}