|
|
@@ -3,7 +3,7 @@
|
|
|
"""
|
|
|
|
|
|
from lev0 import Logger
|
|
|
-from lev1 import Context
|
|
|
+from lev1 import CtxLine
|
|
|
|
|
|
|
|
|
class Lang:
|
|
|
@@ -15,19 +15,34 @@ class Lang:
|
|
|
self.__log = Logger("Lang")
|
|
|
self.__log("start")
|
|
|
self.__src: str = ""
|
|
|
- self.__lst_ctx: list[Context] = []
|
|
|
+ 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
|
|
|
|
|
|
- @property
|
|
|
- def start_file(self) -> str:
|
|
|
+ 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()
|
|
|
@@ -36,7 +51,14 @@ class Lang:
|
|
|
self.__log.error(msg=f"Ошибка при чтении файла, ош=\n\t{e}")
|
|
|
return self.__src
|
|
|
|
|
|
- def parse_ctx(self) -> None:
|
|
|
+ @property
|
|
|
+ def start_file(self) -> str:
|
|
|
+ """
|
|
|
+ Содержимое стартового файла
|
|
|
+ """
|
|
|
+ return self.__src
|
|
|
+
|
|
|
+ def __parse_to_ctx(self) -> None:
|
|
|
"""
|
|
|
Парсинг контекстов программы
|
|
|
"""
|
|
|
@@ -45,5 +67,10 @@ class Lang:
|
|
|
while src != "":
|
|
|
lit = src[0]
|
|
|
if lit == "(":
|
|
|
- ctx = Context(src)
|
|
|
+ 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}")
|