Alat untuk mengonversi C.
Tujuan dari proyek ini adalah:
c2go membutuhkan go 1.9 atau lebih baru.
go get -u github.com/elliotchance/c2goc2go transpile myfile.c Program c2go memproses file C tunggal dan mengeluarkan kode yang diterjemahkan di GO. Mari kita gunakan contoh yang disertakan, prime.c:
#include <stdio.h>
int main ()
{
int n , c ;
printf ( "Enter a numbern" );
scanf ( "%d" , & n );
if ( n == 2 )
printf ( "Prime number.n" );
else
{
for ( c = 2 ; c <= n - 1 ; c ++ )
{
if ( n % c == 0 )
break ;
}
if ( c != n )
printf ( "Not prime.n" );
else
printf ( "Prime number.n" );
}
return 0 ;
}c2go transpile prime.c
go run prime.go Enter a number
23
Prime number.
prime.go terlihat seperti:
package main
import "unsafe"
import "github.com/elliotchance/c2go/noarch"
// ... lots of system types in Go removed for brevity.
var stdin * noarch. File
var stdout * noarch. File
var stderr * noarch. File
func main () {
__init ()
var n int
var c int
noarch . Printf ([] byte ( "Enter a number n x00 " ))
noarch . Scanf ([] byte ( "%d x00 " ), ( * [ 1 ] int )( unsafe . Pointer ( & n ))[:])
if n == 2 {
noarch . Printf ([] byte ( "Prime number. n x00 " ))
} else {
for c = 2 ; c <= n - 1 ; func () int {
c += 1
return c
}() {
if n % c == 0 {
break
}
}
if c != n {
noarch . Printf ([] byte ( "Not prime. n x00 " ))
} else {
noarch . Printf ([] byte ( "Prime number. n x00 " ))
}
}
return
}
func __init () {
stdin = noarch . Stdin
stdout = noarch . Stdout
stderr = noarch . Stderr
}Inilah prosesnya:
Kode C diproses dengan dentang. Ini menghasilkan file yang lebih besar ( pp.c ), tetapi menghapus semua arahan khusus platform dan makro.
pp.c diuraikan dengan dentang dan membuangnya dalam format teks berwarna -warni yang terlihat seperti ini. Terlepas dari hanya mem -parsing C dan membuang AST, AST berisi semua informasi terselesaikan yang dibutuhkan kompiler (seperti tipe data). Ini berarti bahwa kode harus dikompilasi dengan sukses di bawah dentang agar AST juga dapat digunakan.
Karena kita memiliki semua tipe di AST, itu hanya masalah melintasi pohon dengan cara semi-cerdas dan menghasilkan pergi. Mudah, Benar!?
Secara default hanya tes unit yang dijalankan dengan go test . Anda juga dapat memasukkan tes integrasi:
go test -tags=integration ./...Tes integrasi dalam bentuk program C lengkap yang dapat ditemukan di direktori tes.
Tes integrasi berfungsi seperti ini:
Kontribusi dilakukan dengan permintaan tarik. Tidak ada bantuan yang terlalu kecil! :)
Jika Anda mencari di mana harus memulai, saya dapat menyarankan menemukan program C sederhana (seperti contoh lainnya) yang tidak berhasil diterjemahkan menjadi GO.
Atau, jika Anda tidak ingin melakukan itu, Anda dapat mengirimkannya sebagai masalah sehingga dapat diambil oleh orang lain.