Este é um analisador estático de protótipo de pesquisa para programas GO. Atualmente, a estrutura consiste em duas ferramentas principais, migoinfer e ssaview , mas deve ser capaz de criar mais back -end com diferentes formatos de saída com base nessa estrutura.
Para construir a ferramenta, use go get :
go get github.com/nickng/gospal/cmd/...
A ferramenta MIGO inferida ( cmd/migoinfer ) infere tipos MIGO de um código -fonte GO. As definições formais dos tipos MIGO são publicadas neste artigo, e o formato da saída em forma textual é descrito no pacote MIGO.
Por exemplo, dado este programa de amostra main.go ,
package main
func main() {
ch := make(chan int)
go Sender(ch)
fmt.Println(<-ch)
}
func Sender(ch chan int) {
ch <- 1
}
Esta é a saída esperada da inferência, com def saída adicional que não envolve comunicação.
$ migoinfer main.go
def main.main():
let t0 = newchan main.main0.t0_chan0, 0;
spawn main.Sender(t0);
recv t0;
def main.Sender(ch):
send ch
Este é um protótipo de pesquisa e não cobre todos os recursos do GO. Relate erros com um pequeno fragmento de código de amostra e o que você espera ver, no entanto, observando que pode não ser possível inferir os tipos profundamente devido às limitações da análise estática.
O SSA Viewer ( cmd/ssaview ) é um invólucro sobre o pacote ssa das ferramentas extras do projeto GO para visualizar a forma SSA de um determinado código-fonte. É semelhante ao ssadump , mas compartilha a configuração de compilação com a ferramenta migoinfer neste projeto.