2022-07-18 19:39:13 +03:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
|
|
|
|
|
|
using PascalABCCompiler.SyntaxTree;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace SyntaxVisitors
|
|
|
|
|
|
{
|
2022-07-19 15:33:13 +03:00
|
|
|
|
public class TeacherControlConverter : WalkingVisitorNew
|
2022-07-18 19:39:13 +03:00
|
|
|
|
{
|
2022-07-19 15:33:13 +03:00
|
|
|
|
public static TeacherControlConverter New
|
2022-07-18 19:39:13 +03:00
|
|
|
|
{
|
2022-07-19 15:33:13 +03:00
|
|
|
|
get { return new TeacherControlConverter(); }
|
2022-07-18 19:39:13 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public string Name { get => "TeacherContolConverter"; }
|
|
|
|
|
|
public syntax_tree_node Convert(syntax_tree_node root)
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
var program = root as program_module;
|
|
|
|
|
|
if (program == null) // если это не главная программа, то не преобразовывать
|
|
|
|
|
|
return root;
|
|
|
|
|
|
var FileName = program.file_name;
|
|
|
|
|
|
var fi = new System.IO.FileInfo(FileName);
|
|
|
|
|
|
var SourceFileDirectory = fi.DirectoryName;
|
|
|
|
|
|
|
|
|
|
|
|
var FullLightPTName = System.IO.Path.Combine(SourceFileDirectory, "lightpt.dat");
|
|
|
|
|
|
if (!System.IO.File.Exists(FullLightPTName))
|
|
|
|
|
|
return root;
|
|
|
|
|
|
|
|
|
|
|
|
if (program.used_units == null)
|
|
|
|
|
|
program.used_units = new uses_list();
|
2022-07-19 15:33:13 +03:00
|
|
|
|
// Добавляем в начало, а секции инициализации вызываются последними
|
|
|
|
|
|
// Проверять, какой CurrentIOSystem подключен, и если не стандартный, то не подключать Light
|
2022-07-21 13:32:03 +03:00
|
|
|
|
|
2022-07-19 15:33:13 +03:00
|
|
|
|
// Пробуем добавить последними, тогда секции инициализации LightPT вызываются первыми,
|
|
|
|
|
|
// что переключает ввод на LightPT,
|
|
|
|
|
|
// а секции финализации - последними (хорошо)
|
2022-07-21 13:32:03 +03:00
|
|
|
|
// Проблема - LightPT Print перекрывает PT4.Print и - ошибка, а флаг IsPT не установлен
|
|
|
|
|
|
|
2022-07-18 19:39:13 +03:00
|
|
|
|
program.used_units.Add(new unit_or_namespace("LightPT", null));
|
|
|
|
|
|
program.used_units.Add(new unit_or_namespace("Tasks", null));
|
|
|
|
|
|
}
|
|
|
|
|
|
catch
|
2022-07-19 15:33:13 +03:00
|
|
|
|
{
|
2022-07-18 19:39:13 +03:00
|
|
|
|
}
|
|
|
|
|
|
return root;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|