| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- // package compiler -- главный тип сервиса компилятора
- package compiler
- import (
- "fmt"
- "log"
- "os"
- "p78git.ddns.net/svi/odeft/internal/syntax"
- )
- // Compiler -- главный тип сервиса компилятора
- type Compiler struct {
- syntax *syntax.Syntax
- }
- // NewCompiler -- возвращает новый тип компилятора
- func NewCompiler() (*Compiler, error) {
- log.Printf("NewCompiler()\n")
- sf := &Compiler{}
- srcMain, err := sf.getMainModule()
- if err != nil {
- return nil, fmt.Errorf("NewCompiler(): in get main module, err=\n\t%w", err)
- }
- textSrc, err := sf.readMainModule(srcMain)
- if err != nil {
- return nil, fmt.Errorf("NewCompiler(): in read main module(%v), err=\n\t%w", srcMain, err)
- }
- runeSrc := []rune(textSrc)
- sf.syntax, err = syntax.NewSyntax(runeSrc)
- if err != nil {
- return nil, fmt.Errorf("NewCompiler(): in create Syntax, err=\n\t%w", err)
- }
- return sf, nil
- }
- // Run -- запускает компилятор в работу
- func (sf *Compiler) Run() error {
- log.Printf("Compiler.Run()\n")
- return nil
- }
- // Читает содержимое главного модуля
- func (sf *Compiler) readMainModule(srcName string) (string, error) {
- binData, err := os.ReadFile(srcName)
- if err != nil {
- sf.printHelp()
- return "", fmt.Errorf("Compiler.readMainModule(): in read srcMain(%v), err=\n\t%w", srcName, err)
- }
- return string(binData), nil
- }
- // Получает главный модуль программы из окружния для компиляции
- func (sf *Compiler) getMainModule() (string, error) {
- log.Printf("Compiler.getMainModule()\n")
- srcMain := os.Getenv("SRC_MAIN")
- if srcMain == "" {
- sf.printHelp()
- return "", fmt.Errorf("Compiler.getMainModule(): env SRC_MAIN not set")
- }
- return srcMain, nil
- }
- const (
- help = `Оберон-У компилятор. 2023 г. BSD-2
- Для запуска компилятора необходимо определить переменную окружения:
- export SRC_MAIN="./main.obu"
- Для подробной справки о языке смотрите тут:
- http://p78git.ddns.net/svi/odeft
- `
- )
- // Печатает справку по использованию
- func (sf *Compiler) printHelp() {
- log.Print(help)
- }
|