// File: /workspace/github_c_makefile_star2_O0/MaoKo[P]FGFX/fgfp/src/ll.c
// Function: build_ll1_table
vector_t*
build_ll1_table(cfg_t const* cfg) {
	vector_t* ll_table = new_vector();

	for (size_t i = 0; i < SIZE_VECTOR(cfg->non_terminal) - 1; ++i) {
		symbol_t* nter = AT_VECTOR(cfg->non_terminal, i);
		PUSH_BACK_VECTOR(ll_table, NULL_TRANS_LST);

		int j;
		while ((j = IT_NEXT(nter->prod_lst)) != IT_NULL) {
			production_t* prod = AT_VECTOR(cfg->productions, j);
			int k;
			while ((k = IT_NEXT(prod->select_set)) != IT_NULL) {
				trans_list_t* lst = new_trans_list(((symbol_t*)
									AT_VECTOR(cfg->terminal, k))->index,
									j, BACK_VECTOR(ll_table));
				BACK_VECTOR(ll_table) = lst;
			}

			IT_RESET(prod->select_set);

			if (!prod->can_get_rid)
				{ continue; }
			while ((k = IT_NEXT(prod->symbol_lhs->follow)) != IT_NULL) {
				trans_list_t* lst = new_trans_list(((symbol_t*)
								AT_VECTOR(cfg->terminal, k))->index,
								j, BACK_VECTOR(ll_table));
				lst->next = BACK_VECTOR(ll_table);
				BACK_VECTOR(ll_table) = lst;
			}
			IT_RESET(prod->symbol_lhs->follow);
		}
		IT_RESET(nter->prod_lst);
	}
	return (ll_table);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x8(%rbp)
callq 0x1ee0
movq %rax, -0x10(%rbp)
movq $0x0, -0x18(%rbp)
movq -0x18(%rbp), %rax
movq -0x8(%rbp), %rcx
movq 0x8(%rcx), %rcx
movq 0x10(%rcx), %rcx
subq $0x1, %rcx
cmpq %rcx, %rax
jae 0x82cf
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rax
movq -0x18(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
xorl %eax, %eax
movl %eax, %edx
callq 0x2070
movq -0x20(%rbp), %rax
movq 0x30(%rax), %rdi
callq 0x1aa0
movl %eax, -0x24(%rbp)
cmpl $-0x1, %eax
je 0x826e
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq (%rax), %rax
movslq -0x24(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x1aa0
movl %eax, -0x34(%rbp)
cmpl $-0x1, %eax
je 0x8112
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movq (%rax), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq (%rax), %rax
movl %eax, %edi
movl -0x24(%rbp), %esi
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq -0x10(%rbp), %rcx
movq 0x10(%rcx), %rcx
subq $0x1, %rcx
movq (%rax,%rcx,8), %rdx
callq 0x39f0
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rdx
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq -0x10(%rbp), %rcx
movq 0x10(%rcx), %rcx
subq $0x1, %rcx
movq %rdx, (%rax,%rcx,8)
jmp 0x80a5
movq -0x30(%rbp), %rax
cmpq $0x0, 0x18(%rax)
jne 0x811f
jmp 0x8162
movq -0x30(%rbp), %rax
movq 0x18(%rax), %rax
testb $0x1, 0x54(%rax)
jne 0x8143
movq -0x30(%rbp), %rax
movq 0x18(%rax), %rax
movl $0x0, 0x50(%rax)
xorl %eax, %eax
movl %eax, -0x4c(%rbp)
jmp 0x815f
movq -0x30(%rbp), %rax
movq 0x18(%rax), %rax
movl 0x4(%rax), %eax
subl $0x1, %eax
movq -0x30(%rbp), %rcx
movq 0x18(%rcx), %rcx
movl %eax, 0x50(%rcx)
movl %eax, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
movq -0x30(%rbp), %rax
testb $0x1, 0x20(%rax)
jne 0x8171
jmp 0x8076
jmp 0x8173
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x28(%rax), %rdi
callq 0x1aa0
movl %eax, -0x34(%rbp)
cmpl $-0x1, %eax
je 0x8205
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movq (%rax), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq (%rax), %rax
movl %eax, %edi
movl -0x24(%rbp), %esi
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq -0x10(%rbp), %rcx
movq 0x10(%rcx), %rcx
subq $0x1, %rcx
movq (%rax,%rcx,8), %rdx
callq 0x39f0
movq %rax, -0x48(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq -0x10(%rbp), %rcx
movq 0x10(%rcx), %rcx
subq $0x1, %rcx
movq (%rax,%rcx,8), %rcx
movq -0x48(%rbp), %rax
movq %rcx, (%rax)
movq -0x48(%rbp), %rdx
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq -0x10(%rbp), %rcx
movq 0x10(%rcx), %rcx
subq $0x1, %rcx
movq %rdx, (%rax,%rcx,8)
jmp 0x8173
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rax
cmpq $0x0, 0x28(%rax)
jne 0x8216
jmp 0x8269
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x28(%rax), %rax
testb $0x1, 0x54(%rax)
jne 0x8242
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x28(%rax), %rax
movl $0x0, 0x50(%rax)
xorl %eax, %eax
movl %eax, -0x50(%rbp)
jmp 0x8266
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x28(%rax), %rax
movl 0x4(%rax), %eax
subl $0x1, %eax
movq -0x30(%rbp), %rcx
movq 0x8(%rcx), %rcx
movq 0x28(%rcx), %rcx
movl %eax, 0x50(%rcx)
movl %eax, -0x50(%rbp)
movl -0x50(%rbp), %eax
jmp 0x8076
movq -0x20(%rbp), %rax
cmpq $0x0, 0x30(%rax)
jne 0x827b
jmp 0x82be
movq -0x20(%rbp), %rax
movq 0x30(%rax), %rax
testb $0x1, 0x54(%rax)
jne 0x829f
movq -0x20(%rbp), %rax
movq 0x30(%rax), %rax
movl $0x0, 0x50(%rax)
xorl %eax, %eax
movl %eax, -0x54(%rbp)
jmp 0x82bb
movq -0x20(%rbp), %rax
movq 0x30(%rax), %rax
movl 0x4(%rax), %eax
subl $0x1, %eax
movq -0x20(%rbp), %rcx
movq 0x30(%rcx), %rcx
movl %eax, 0x50(%rcx)
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %eax
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x802d
movq -0x10(%rbp), %rax
addq $0x60, %rsp
popq %rbp
retq
nopl (%rax)