// File: /workspace/github_cpp_makefile_star2_O2/zhengwangsun[P]pas2c/grammar.cpp
// Function: GetFirst(int, int)
void GetFirst(int num,int start)       //求编号为num的生成式右部第start位置起之后字符串的FIRST集,并将结果存入数组First中
{
	int i,j,k,m,flag;
	for(i=0;i<FIRSTnum;i++)
		First[i]=-1;
	if(g[num].right[start+1]==-1)      //start之后字符串为空
		First[0]=106;                  //将 ε加入到First中
	else
	{
		i=start+1;
		flag=1;
		while(flag==1&&g[num].right[i]!=-1)
		{
			if(g[num].right[i]>=100)   //是终结符 
			{
				flag=0;
				for(j=0;First[j]!=-1&&First[j]!=g[num].right[i]&&j<FIRSTnum;j++)
					;
				if(First[j]==-1)       //无重复的将此终结符加入到First中
					First[j]=g[num].right[i];
			}
			else                       //是非终结符 
			{                          //求 g[num].right[i]的FIRST集	
				for(j=0;j<GenerationNum;j++)
				{
					if(g[j].left==g[num].right[i])
					{
						for(k=0;g[j].FIRST[k]!=-1;k++)
						{              //无重复的将此非终结符的FIRST集元素加入到First中 
							for(m=0;First[m]!=-1&&First[m]!=g[j].FIRST[k]&&m<FIRSTnum;m++)
								;
							if(First[m]==-1)
								First[m]=g[j].FIRST[k];
						}
					}
				}
				for(j=0;First[j]!=-1&&First[j]!=106&&j<FIRSTnum;j++)
					;
				if(First[j]==-1)       //非终结符g[num].right[i]的FIRST集不含ε
					flag=0;
				else                   //非终结符g[num].right[i]的FIRST集含有ε
				{   
					if(g[num].right[i+1]==-1)//非终结符g[num].right[i]是最后一个元素
						flag=0;
					else               //非终结符g[num].right[i]不是最后一个元素
					{                  //将 ε从First中删除
						for(j=0;First[j]!=106;j++)
							;
						for(k=j;First[k]!=-1;k++)
							First[k]=First[k+1];
						
						i++;           //继续处理下一个元素 
					}	
				}
			}
		}
	}
}

// Assembly:
xorl %ecx, %ecx
leaq 0xa5f8d(%rip), %rax     # 0xb2660
cmpq $0x50, %rcx
je 0xc6e3
orl $-0x1, (%rcx,%rax)
addq $0x4, %rcx
jmp 0xc6d3
movslq %edi, %rcx
movslq %esi, %rdi
imulq $0xd0, %rcx, %rcx
leaq 0xa21a9(%rip), %rdx     # 0xae8a0
addq %rdx, %rcx
cmpl $-0x1, 0xc(%rcx,%rdi,4)
je 0xc844
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
incl %esi
movl $0x1, %edi
movl $0x6a, %r9d
movl %edi, %ebx
cmpl $0x1, %ebx
jne 0xc839
movslq %esi, %r10
movl 0x8(%rcx,%r10,4), %r11d
cmpl $-0x1, %r11d
je 0xc839
cmpl $0x63, %r11d
jle 0xc76b
movq %rax, %r10
xorl %r14d, %r14d
movl (%r10), %ebp
cmpl $-0x1, %ebp
je 0xc7f8
leaq 0x1(%r14), %r8
addq $0x4, %r10
xorl %ebx, %ebx
cmpq $0x13, %r14
ja 0xc71e
movq %r8, %r14
cmpl %r11d, %ebp
jne 0xc745
jmp 0xc71e
xorl %ebx, %ebx
cmpq $0x4c, %rbx
je 0xc7c3
imulq $0xd0, %rbx, %r14
cmpl %r11d, 0x4(%r14,%rdx)
jne 0xc7be
addq %rdx, %r14
xorl %r15d, %r15d
movl 0x30(%r14,%r15,4), %ebp
cmpl $-0x1, %ebp
je 0xc7be
movq %rax, %r12
xorl %r13d, %r13d
movl (%r12), %r8d
cmpl $-0x1, %r8d
je 0xc7b5
cmpq $0x13, %r13
ja 0xc7b9
incq %r13
addq $0x4, %r12
cmpl %ebp, %r8d
jne 0xc797
jmp 0xc7b9
movl %ebp, (%r12)
incq %r15
jmp 0xc787
incq %rbx
jmp 0xc76d
movq %rax, %r11
xorl %r14d, %r14d
movl (%r11), %r8d
xorl %ebx, %ebx
cmpl $-0x1, %r8d
je 0xc71e
cmpq $0x13, %r14
ja 0xc7eb
incq %r14
addq $0x4, %r11
cmpl $0x6a, %r8d
jne 0xc7c9
cmpl $-0x1, 0xc(%rcx,%r10,4)
jne 0xc802
jmp 0xc71e
movl %r11d, (%r10)
xorl %ebx, %ebx
jmp 0xc71e
incl %esi
leaq 0xa5e59(%rip), %r8      # 0xb2664
movq %rax, %r11
cmpl $0x6a, (%r11)
movq %r8, %r10
leaq 0x4(%r11), %r11
leaq 0x4(%r8), %r8
jne 0xc80e
movl %r9d, %r8d
cmpl $-0x1, %r8d
je 0xc71c
movl (%r10), %r8d
movl %r8d, -0x4(%r10)
addq $0x4, %r10
jmp 0xc822
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x6a, 0xa5e12(%rip)    # 0xb2660
retq