compiler.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // package compiler -- главный тип сервиса компилятора
  2. package compiler
  3. import (
  4. мФорм "fmt"
  5. мЛог "log"
  6. мОс "os"
  7. мМод "p78git.ddns.net/svi/odeft/internal/module"
  8. )
  9. // Компилятор -- главный тип сервиса компилятора
  10. type Компилятор struct {
  11. модульГлав *мМод.Модуль
  12. }
  13. // НовКомпилятор -- возвращает новый тип компилятора
  14. func НовКомпилятор() (*Компилятор, error) {
  15. мЛог.Printf("НовКомпилятор()\n")
  16. сам := &Компилятор{}
  17. модульГлавИмяФайла, ош := сам.главМодульПолуч()
  18. if ош != nil {
  19. return nil, мФорм.Errorf("НовКомпилятор(): при получении имени файла главного модуля, ош\n\t%w", ош)
  20. }
  21. сам.модульГлав, ош = мМод.НовМодуль(модульГлавИмяФайла)
  22. if ош != nil {
  23. return nil, мФорм.Errorf("НовКомпилятор(): при создании главного модуля, ош\n\t%w", ош)
  24. }
  25. return сам, nil
  26. }
  27. // Пуск -- запускает компилятор в работу
  28. func (сам *Компилятор) Пуск() error {
  29. мЛог.Printf("Компилятор.Пуск()\n")
  30. return nil
  31. }
  32. // Получает главный модуль программы из окружния для компиляции
  33. func (sf *Компилятор) главМодульПолуч() (string, error) {
  34. мЛог.Printf("Компилятор.главМодульПолуч()\n")
  35. исхГлавИмя := мОс.Getenv("SRC_MAIN")
  36. if исхГлавИмя == "" {
  37. sf.справкаПечать()
  38. return "", мФорм.Errorf("Компилятор.главМодульПолуч(): env SRC_MAIN not set")
  39. }
  40. return исхГлавИмя, nil
  41. }
  42. const (
  43. справкаПоЗапуску = `Оберон-У компилятор. 2023 г. BSD-2
  44. Для запуска компилятора необходимо определить переменную окружения:
  45. export SRC_MAIN="./main.ou"
  46. Для подробной справки о языке смотрите тут:
  47. http://p78git.ddns.net/svi/odeft
  48. `
  49. )
  50. // Печатает справку по использованию
  51. func (sf *Компилятор) справкаПечать() {
  52. мЛог.Print(справкаПоЗапуску)
  53. }