เครื่องมือสำหรับการแปลง C ให้เป็นไป
เป้าหมายของโครงการนี้คือ:
c2go ต้องการไป 1.9 หรือใหม่กว่า
go get -u github.com/elliotchance/c2goc2go transpile myfile.c โปรแกรม c2go จะประมวลผลไฟล์ C เดียวและส่งออกรหัสที่แปลใน GO มาใช้ตัวอย่างที่รวมกัน 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 ดูเหมือน:
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
}นี่คือกระบวนการ:
รหัส C ถูกประมวลผลล่วงหน้าด้วยเสียงดัง สิ่งนี้สร้างไฟล์ขนาดใหญ่ ( pp.c ) แต่ลบคำสั่งเฉพาะแพลตฟอร์มและมาโครทั้งหมด
pp.c ถูกแยกวิเคราะห์ด้วยเสียงดังก้องและทิ้งไว้ในรูปแบบข้อความที่มีสีสันที่มีลักษณะเช่นนี้ นอกเหนือจากการแยกวิเคราะห์ C และทิ้ง AST แล้ว AST ยังมีข้อมูลที่ได้รับการแก้ไขทั้งหมดที่คอมไพเลอร์ต้องการ (เช่นประเภทข้อมูล) ซึ่งหมายความว่ารหัสจะต้องรวบรวมได้สำเร็จภายใต้เสียงดังก้องเพื่อให้ AST สามารถใช้งานได้เช่นกัน
เนื่องจากเรามีทุกประเภทใน AST มันเป็นเพียงเรื่องของการสำรวจต้นไม้ในแบบกึ่งฉลาดและผลิตไป ง่ายใช่มั้ย!?
โดยค่าเริ่มต้นการทดสอบหน่วยเท่านั้นจะทำงานด้วย go test นอกจากนี้คุณยังสามารถรวมการทดสอบการรวม:
go test -tags=integration ./...การทดสอบการรวมในรูปแบบของโปรแกรม C ที่สมบูรณ์ที่สามารถพบได้ในไดเรกทอรีการทดสอบ
การทดสอบการรวมทำงานเช่นนี้:
การมีส่วนร่วมจะทำด้วยคำขอดึง ไม่มีความช่วยเหลือที่เล็กเกินไป! -
หากคุณกำลังมองหาจุดเริ่มต้นฉันสามารถแนะนำการค้นหาโปรแกรม C ง่าย ๆ (เช่นตัวอย่างอื่น ๆ ) ที่ไม่ได้แปลเป็นไปอย่างประสบความสำเร็จ
หรือถ้าคุณไม่ต้องการทำเช่นนั้นคุณสามารถส่งเป็นปัญหาเพื่อให้คนอื่นสามารถรับได้