Initial commit: Oraset3 programming language with OS-level features

This commit is contained in:
JGZSunShineMod1.0.3
2026-05-22 12:19:05 +08:00
commit 1205365f32
27 changed files with 4191 additions and 0 deletions
+159
View File
@@ -0,0 +1,159 @@
package main
import (
"bufio"
"fmt"
"os"
"os/exec"
"path/filepath"
"runtime"
)
func main() {
if len(os.Args) != 3 {
fmt.Println("Usage: oraset3-go <input_file> <output_file>")
os.Exit(1)
}
inputFile := os.Args[1]
outputFile := os.Args[2]
err := compile(inputFile, outputFile)
if err != nil {
fmt.Printf("Error: %v\n", err)
os.Exit(1)
}
fmt.Printf("Compilation successful! Output: %s\n", outputFile)
}
func compile(inputFile, outputFile string) error {
source, err := readFile(inputFile)
if err != nil {
return err
}
// 调用C++编译器核心
cppOutput, err := runCppCompiler(source)
if err != nil {
return err
}
// 写入临时C++文件
tmpCppFile := outputFile + ".tmp.cpp"
err = writeFile(tmpCppFile, cppOutput)
if err != nil {
return err
}
defer os.Remove(tmpCppFile)
// 根据平台调用相应的编译器
if runtime.GOOS == "windows" {
return compileWindows(tmpCppFile, outputFile)
} else {
return compileLinux(tmpCppFile, outputFile)
}
}
func readFile(path string) (string, error) {
data, err := os.ReadFile(path)
if err != nil {
return "", fmt.Errorf("failed to read file: %w", err)
}
return string(data), nil
}
func writeFile(path, content string) error {
err := os.WriteFile(path, []byte(content), 0644)
if err != nil {
return fmt.Errorf("failed to write file: %w", err)
}
return nil
}
func runCppCompiler(source string) (string, error) {
// 在实际项目中,这里会调用C++编译核心
// 由于Go无法直接调用C++代码,我们使用exec调用编译好的oraset3编译器
// 或者可以使用cgo绑定
// 这里简化处理,直接返回源代码内容(演示用)
return source, nil
}
func compileWindows(cppFile, outputFile string) error {
// 使用MinGW或MSVC编译
gccPath, err := exec.LookPath("g++")
if err != nil {
return fmt.Errorf("g++ not found: %w", err)
}
args := []string{
"-o", outputFile,
cppFile,
"-std=c++17",
"-Wall",
}
cmd := exec.Command(gccPath, args...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err = cmd.Run()
if err != nil {
return fmt.Errorf("compilation failed: %w", err)
}
return nil
}
func compileLinux(cppFile, outputFile string) error {
// 使用Clang编译
clangPath, err := exec.LookPath("clang++")
if err != nil {
return fmt.Errorf("clang++ not found: %w", err)
}
args := []string{
"-o", outputFile,
cppFile,
"-std=c++17",
"-Wall",
"-O2",
}
cmd := exec.Command(clangPath, args...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err = cmd.Run()
if err != nil {
return fmt.Errorf("compilation failed: %w", err)
}
return nil
}
func isWindows() bool {
return runtime.GOOS == "windows"
}
func isLinux() bool {
return runtime.GOOS == "linux"
}
// getCompilerPath returns the path to the appropriate compiler
func getCompilerPath() (string, error) {
if isWindows() {
return exec.LookPath("g++")
}
return exec.LookPath("clang++")
}
// ensureDirectory ensures the output directory exists
func ensureDirectory(path string) error {
dir := filepath.Dir(path)
if dir == "." {
return nil
}
return os.MkdirAll(dir, 0755)
}