| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- """
- Инструменты языка и вспомогательные инструменты.
- """
- from lev0 import Logger
- from lev1 import CtxLine
- class Lang:
- """
- Главный класс языка
- """
- def __init__(self) -> None:
- self.__log = Logger("Lang")
- self.__log("start")
- self.__src: str = ""
- self.__lst_ctx: list[CtxLine] = []
- self.__start_file()
- self.__parse_to_ctx()
- self.__step = 0
- def step(self) -> None:
- """
- Шаг выполнения
- """
- self.__log("step!")
- if self.__step == len(self.__lst_ctx):
- self.__log("Конец программы")
- self.__reset()
- ctx: CtxLine = self.__lst_ctx[self.__step]
- ctx.run()
- self.__step += 1
- def __reset(self) -> None:
- """
- Сброс состояния ВМ
- """
- self.__step = 0
- def __start_file(self) -> str:
- """
- Читает стартовый файл
- """
- self.__log("")
- try:
- f = open("./plt/main.plt", "r", encoding="utf-8")
- self.__src = f.read()
- f.close()
- except Exception as e:
- self.__log.error(msg=f"Ошибка при чтении файла, ош=\n\t{e}")
- return self.__src
- @property
- def start_file(self) -> str:
- """
- Содержимое стартового файла
- """
- return self.__src
- def __parse_to_ctx(self) -> None:
- """
- Парсинг контекстов программы
- """
- self.__log("")
- src = self.__src
- while src != "":
- lit = src[0]
- if lit == "(":
- ctx = CtxLine(src)
- self.__lst_ctx.append(ctx)
- src = ctx.tail
- # Отладочный вывод
- for num in range(len(self.__lst_ctx)):
- ctx = self.__lst_ctx[num]
- self.__log(f"{num}: {ctx.line}")
|