\begin{algorithm}
        \caption{Build-Basic-Blocks}
        \begin{algorithmic}
        \INPUT IR 表示下的指令序列 $P[1..n]$.
        \OUTPUT 所有的基块.
        \STATE Let $L[1..n]$ be a new array. \COMMENT{$L[1..n]$ 用来存放所有的Leader的下标}
        \STATE Let $IsLeader[1..n]$ be a new array. \COMMENT{$IsLeader[1..n]$ 用来表示第$i$条指令是否为Leader,初始化为false}
        \STATE $IsLeader[1]=true$ \COMMENT{根据定义2.3, $1$ 号结点一定是Leader}
        \FOR{$i = 2$ \TO $n$}
            \IF{the type of $P[i]$ is jump}
                \STATE \COMMENT{根据定理2.1寻找Leader}
                \STATE $IsLeader[ target(P[i]) ]=true$ \COMMENT{$target(x) \to$ 跳转指令x的目标指令的序号}
                \STATE $IsLeader[ i + 1 ]=true$
            \ENDIF
        \ENDFOR
        \STATE $k = 0$ \COMMENT{$k$为Leader的数量}
        \FOR{$i = 1$ \TO $n$}
            \IF{ IsLeader[i] }
                \STATE $L[k+1]=i$
                \STATE $k=k + 1$
            \ENDIF
        \ENDFOR
        \STATE \COMMENT{根据定理2.2输出Basic Block}
        \FOR{$i = 1$ \TO $k$}
            \STATE \textbf{output} $P[L[i]..L[i+1]-1]$
        \ENDFOR
        \end{algorithmic}
        \end{algorithm}