Компиляция и выполнение
Рассмотрим как использовать компилятор и виртуальную машину Gentee в проектах на языке программирования Go.

Компиляция

Для начала, нужно создать структуру Gentee с помощью функции New. Эта структура будет хранить всю информацию о скомпилированных скриптах. Вам достаточно создать один экземпляр и компилировать любое количество скриптов.
Для компиляции скриптов нужно использовать методы Compile, CompileFile, CompileAndRun. Методы Compile, CompileFile, в случае успешной компиляции, возвращают структуру Exec, которая содержит байт-код. Вы можете сохранять или передавать эту структуру для дальнейшего выполнения с помощью метода Run. Метод CompileAndRun сразу после компиляции выполняет скрипт и возвращает его результат.
1
package main
2
import (
3
"fmt"
4
"log"
5
6
"github.com/gentee/gentee"
7
)
8
9
func main() {
10
g := gentee.New()
11
12
exec,_, err := g.Compile("run : Print(`Hello, world!`)", "")
13
if err != nil {
14
log.Fatal(err)
15
}
16
exec.Run(gentee.Settings{})
17
exec,_, err = g.CompileFile("/home/ak/scripts/myscript.g")
18
if err != nil {
19
log.Fatal(err)
20
}
21
exec.Run(gentee.Settings{})
22
23
var result interface{}
24
result, err = g.CompileAndRun("../torun.g")
25
fmt.Println(`Error:`, err, `Result:`, result)
26
}
Copied!

Выполнение байт-кода

Готовый байт-код скрипта хранится в структуре типа Exec. Для его выполнения необходимо вызвать метод Run. Параметр типа Settings позволяет передать параметры командной строки и указать дополнительные настройки виртуальной машины.
1
package main
2
import (
3
"fmt"
4
"log"
5
6
"github.com/gentee/gentee"
7
)
8
9
func main() {
10
g := gentee.New()
11
12
exec,_, err := g.CompileFile("myscript.g")
13
if err != nil {
14
log.Fatal(err)
15
}
16
var result interface{}
17
result, err = exec.Run(gentee.Settings{
18
CmdLine: []string{
19
"-par1",
20
"-o",
21
"/home/ak/tmp",
22
},
23
})
24
fmt.Println(`Error:`, err, `Result:`, result)
25
}
Copied!
Last modified 7mo ago