コード例 #1
0
ファイル: parser.c プロジェクト: shunting1986/scc
static struct initializer *parse_initializer(struct parser *parser) {
	union token tok = lexer_next_token(parser->lexer);
	struct initializer *initializer = initializer_init();
	if (tok.tok_tag == TOK_LBRACE) {
		initializer->initz_list = parse_initializer_list(parser);
	} else {
		if (tok.tok_tag == TOK_DOT) {
			while (1) {
				union token idtok = expect(parser->lexer, TOK_IDENTIFIER);
				dynarr_add(initializer->namelist, idtok.id.s);
				tok = lexer_next_token(parser->lexer);

				if (tok.tok_tag == TOK_ASSIGN) {
					break;
				}
				assume(tok, TOK_DOT);
			}
		} else if (tok.tok_tag == TOK_LBRACKET) {
			initializer->ind = parse_constant_expression(parser);
			expect(parser->lexer, TOK_RBRACKET);
			expect(parser->lexer, TOK_ASSIGN);
		} else {
			lexer_put_back(parser->lexer, tok);
		}
		initializer->expr = parse_assignment_expression(parser);
	}
	return initializer;
}
コード例 #2
0
ファイル: parse.c プロジェクト: Reen/gnuplot
/* For external calls to parse_expressions() 
 * parse_recursion_level is expected to be 0 */
static void
parse_expression()
{				/* full expressions */

    if (parse_assignment_expression())
	return;

    parse_recursion_level++;
    accept_logical_OR_expression();
    parse_conditional_expression();
    parse_recursion_level--;
}