Ejemplo n.º 1
0
void test_parse_number() {
    struct token_list *tkl = make_token_list();
    struct token *tk = make_token(tok_number, NULL, 0.0, 42);
    append_token_list(tkl, tk);
    struct ast_node *result = parse_number(tkl);
    EXPECT_EQ(result->val, tk);
    EXPECT_EQ(result->num_children, 0);
    destroy_token_list(tkl);
    delete_node(result);
}
Ejemplo n.º 2
0
void test_parse_paren() {
    struct token_list *tkl = make_token_list();
    struct token *tk0 = make_token(tok_punc, "(", 0.0, 0);
    struct token *tk1 = make_token(tok_number, NULL, 0.0, 42);
    struct token *tk2 = make_token(tok_punc, "+", 0.0, 0);
    struct token *tk3 = make_token(tok_number, NULL, 0.0, 24);
    struct token *tk4 = make_token(tok_punc, ")", 0.0, 0);
    append_token_list(tkl, tk0);
    append_token_list(tkl, tk1);
    append_token_list(tkl, tk2);
    append_token_list(tkl, tk3);
    append_token_list(tkl, tk4);
    struct ast_node *result = parse_paren(tkl);
    EXPECT_EQ(result->val, tk2);
    EXPECT_EQ(result->num_children, 2);
    EXPECT_EQ(result->children[0]->val, tk1);
    EXPECT_EQ(result->children[1]->val, tk3);
    EXPECT_EQ(result->children[0]->num_children, 0);
    EXPECT_EQ(result->children[1]->num_children, 0);
    destroy_token_list(tkl);
    delete_node(result);
}
token_list_t *init_token_list(int max_tokens, int max_token_size)
{
	int i;
	token_list_t *list = parse_alloc(sizeof(token_list_t));

	//bzero
	if (list == 0) return 0;
	list->max_tokens = max_tokens;
	list->tokens = (char **) parse_alloc(sizeof(char*) * max_tokens);
	list->max_token_size = max_token_size;
	for(i=0; i < max_tokens; i++)
	{
		TK[i] = (char *) parse_alloc(max_token_size);
		if (TK[i] == 0)  {
			destroy_token_list(list);
			return 0;
		}
	}
	list->token_index = 0;
	list->max_line_length = 512;
	return list;

}
Ejemplo n.º 4
0
void test_parse_identifier() {
    struct token_list *tkl = make_token_list();
    struct token *tk = make_token(tok_identifier, "_identifier123", 0.0, 0);
    append_token_list(tkl, tk);
    struct ast_node *result = parse_identifier(tkl);
    EXPECT_EQ(result->val, tk);
    EXPECT_EQ(result->num_children, 0);
    destroy_token_list(tkl);
    delete_node(result);

    struct token *tk0, *tk1, *tk2, *tk3, *tk4, *tk5;
    tkl = make_token_list();
    tk0 = make_token(tok_identifier, "_function123", 0.0, 0);
    append_token_list(tkl, tk0);
    tk1 = make_token(tok_punc, "(", 0.0, 0);
    append_token_list(tkl, tk1);
    tk2 = make_token(tok_identifier, "a", 0.0, 0);
    append_token_list(tkl, tk2);
    tk3 = make_token(tok_punc, ",", 0.0, 0);
    append_token_list(tkl, tk3);
    tk4 = make_token(tok_identifier, "b", 0.0, 0);
    append_token_list(tkl, tk4);
    tk5 = make_token(tok_punc, ")", 0.0, 0);
    append_token_list(tkl, tk5);
    result = parse_identifier(tkl);
    EXPECT_EQ(result->val, tk0);
    EXPECT_EQ(result->num_children, 2);
    EXPECT_EQ(result->children[0]->val, tk2);
    EXPECT_EQ(result->children[1]->val, tk4);
    EXPECT_EQ(result->children[0]->num_children, 0);
    EXPECT_EQ(result->children[1]->num_children, 0);
    destroy_token_list(tkl);
    delete_node(result);

    tkl = make_token_list();
    tk0 = make_token(tok_identifier, "a_function_with_1_arg", 0.0, 0);
    append_token_list(tkl, tk0);
    tk1 = make_token(tok_punc, "(", 0.0, 0);
    append_token_list(tkl, tk1);
    tk2 = make_token(tok_identifier, "a", 0.0, 0);
    append_token_list(tkl, tk2);
    tk3 = make_token(tok_punc, ")", 0.0, 0);
    append_token_list(tkl, tk3);
    result = parse_identifier(tkl);
    EXPECT_EQ(result->val, tk0);
    EXPECT_EQ(result->num_children, 1);
    EXPECT_EQ(result->children[0]->val, tk2);
    EXPECT_EQ(result->children[0]->num_children, 0);
    destroy_token_list(tkl);
    delete_node(result);

    tkl = make_token_list();
    tk0 = make_token(tok_identifier, "a_function_with_1_arg", 0.0, 0);
    append_token_list(tkl, tk0);
    tk1 = make_token(tok_punc, "(", 0.0, 0);
    append_token_list(tkl, tk1);
    tk2 = make_token(tok_punc, ")", 0.0, 0);
    append_token_list(tkl, tk2);
    result = parse_identifier(tkl);
    EXPECT_EQ(result->val, tk0);
    EXPECT_EQ(result->num_children, 0);
    destroy_token_list(tkl);
    delete_node(result);
}