|
@@ -6,13 +6,12 @@ import (
|
|
|
мЛог "log"
|
|
мЛог "log"
|
|
|
мОс "os"
|
|
мОс "os"
|
|
|
|
|
|
|
|
- "p78git.ddns.net/svi/odeft/internal/module/src_rune"
|
|
|
|
|
- мСинт "p78git.ddns.net/svi/odeft/internal/syntax"
|
|
|
|
|
|
|
+ мМод "p78git.ddns.net/svi/odeft/internal/module"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
// Компилятор -- главный тип сервиса компилятора
|
|
// Компилятор -- главный тип сервиса компилятора
|
|
|
type Компилятор struct {
|
|
type Компилятор struct {
|
|
|
- синтакис *мСинт.Синтаксис
|
|
|
|
|
|
|
+ модульГлав *мМод.Модуль
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// НовКомпилятор -- возвращает новый тип компилятора
|
|
// НовКомпилятор -- возвращает новый тип компилятора
|
|
@@ -20,22 +19,13 @@ func НовКомпилятор() (*Компилятор, error) {
|
|
|
мЛог.Printf("НовКомпилятор()\n")
|
|
мЛог.Printf("НовКомпилятор()\n")
|
|
|
сам := &Компилятор{}
|
|
сам := &Компилятор{}
|
|
|
|
|
|
|
|
- исхГлавИмя, ош := сам.главМодульПолуч()
|
|
|
|
|
|
|
+ модульГлавИмяФайла, ош := сам.главМодульПолуч()
|
|
|
if ош != nil {
|
|
if ош != nil {
|
|
|
- return nil, мФорм.Errorf("НовКомпилятор(): при получении главного модуля, ош\n\t%w", ош)
|
|
|
|
|
|
|
+ return nil, мФорм.Errorf("НовКомпилятор(): при получении имени файла главного модуля, ош\n\t%w", ош)
|
|
|
}
|
|
}
|
|
|
- исхГлавТекст, ош := сам.исхГлавЧитать(исхГлавИмя)
|
|
|
|
|
|
|
+ сам.модульГлав, ош = мМод.НовМодуль(модульГлавИмяФайла)
|
|
|
if ош != nil {
|
|
if ош != nil {
|
|
|
- return nil, мФорм.Errorf("НовКомпилятор(): in read main module(%v), ош=\n\t%w", исхГлавТекст, ош)
|
|
|
|
|
- }
|
|
|
|
|
- _, ош = сам.руныКлассифицировать(исхГлавТекст)
|
|
|
|
|
- if ош != nil {
|
|
|
|
|
- return nil, мФорм.Errorf("НовКомпилятор(): при классификации рун главного модуля(%v), ош=\n\t%w", исхГлавИмя, ош)
|
|
|
|
|
- }
|
|
|
|
|
- исхРуны := []rune(исхГлавТекст)
|
|
|
|
|
- сам.синтакис, ош = мСинт.НовСинтаксис(исхРуны)
|
|
|
|
|
- if ош != nil {
|
|
|
|
|
- return nil, мФорм.Errorf("НовКомпилятор(): при создании Синтаксис, ош=\n\t%w", ош)
|
|
|
|
|
|
|
+ return nil, мФорм.Errorf("НовКомпилятор(): при создании главного модуля, ош\n\t%w", ош)
|
|
|
}
|
|
}
|
|
|
return сам, nil
|
|
return сам, nil
|
|
|
}
|
|
}
|
|
@@ -43,28 +33,15 @@ func НовКомпилятор() (*Компилятор, error) {
|
|
|
// Пуск -- запускает компилятор в работу
|
|
// Пуск -- запускает компилятор в работу
|
|
|
func (сам *Компилятор) Пуск() error {
|
|
func (сам *Компилятор) Пуск() error {
|
|
|
мЛог.Printf("Компилятор.Пуск()\n")
|
|
мЛог.Printf("Компилятор.Пуск()\n")
|
|
|
- if ош := сам.синтакис.Пуск(); ош != nil {
|
|
|
|
|
- return мФорм.Errorf("Компилятор.Пуск(): при работе Синтаксис в главном модуле, ош=\n\t%w", ош)
|
|
|
|
|
- }
|
|
|
|
|
return nil
|
|
return nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// Читает содержимое главного модуля
|
|
|
|
|
-func (sf *Компилятор) исхГлавЧитать(исхГлавИмя string) (string, error) {
|
|
|
|
|
- бинДанные, ош := мОс.ReadFile(исхГлавИмя)
|
|
|
|
|
- if ош != nil {
|
|
|
|
|
- sf.printHelp()
|
|
|
|
|
- return "", мФорм.Errorf("Компилятор.исхГлавЧитать(): при чтении главного модуля(%v), ош=\n\t%w", исхГлавИмя, ош)
|
|
|
|
|
- }
|
|
|
|
|
- return string(бинДанные), nil
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
// Получает главный модуль программы из окружния для компиляции
|
|
// Получает главный модуль программы из окружния для компиляции
|
|
|
func (sf *Компилятор) главМодульПолуч() (string, error) {
|
|
func (sf *Компилятор) главМодульПолуч() (string, error) {
|
|
|
мЛог.Printf("Компилятор.главМодульПолуч()\n")
|
|
мЛог.Printf("Компилятор.главМодульПолуч()\n")
|
|
|
исхГлавИмя := мОс.Getenv("SRC_MAIN")
|
|
исхГлавИмя := мОс.Getenv("SRC_MAIN")
|
|
|
if исхГлавИмя == "" {
|
|
if исхГлавИмя == "" {
|
|
|
- sf.printHelp()
|
|
|
|
|
|
|
+ sf.справкаПечать()
|
|
|
return "", мФорм.Errorf("Компилятор.главМодульПолуч(): env SRC_MAIN not set")
|
|
return "", мФорм.Errorf("Компилятор.главМодульПолуч(): env SRC_MAIN not set")
|
|
|
}
|
|
}
|
|
|
return исхГлавИмя, nil
|
|
return исхГлавИмя, nil
|
|
@@ -83,11 +60,6 @@ const (
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
// Печатает справку по использованию
|
|
// Печатает справку по использованию
|
|
|
-func (sf *Компилятор) printHelp() {
|
|
|
|
|
|
|
+func (sf *Компилятор) справкаПечать() {
|
|
|
мЛог.Print(справкаПоЗапуску)
|
|
мЛог.Print(справкаПоЗапуску)
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
-// Классифицирует руны исходника
|
|
|
|
|
-func (сам *Компилятор) руныКлассифицировать(текстИсх string) ([]src_rune.ИсхРуна, error) {
|
|
|
|
|
- return nil, мФорм.Errorf("Компилятор.руныКлассифицировать(): доделать")
|
|
|
|
|
-}
|
|
|