* s.ToLines RenameDirectory * Исправление ToLines * Убрал из грамматики узлы await - случайно оставались * Sync `.ToLines` with `System.IO.StringReader` (#3154) * 3.9.0.3494 * add tests * #3152 * #3152 * Don't skip PCU errors in `CompileAllUnits` * fix #3155 * Create the array types outside of any unit/scope * Add `use` test * RobotField - try в блоке создания * Исправлена Range(a, b, step: real) LightPT - CheckOutput может принимать параметры типа последователльность - они будут вытягиваться в одну последовательность Для этого исправлен FlattenElement FlattenOutput применяется автоматически - его теперь не надо вызывать явно TaskLoops поправлен и упрощен в соответствии с CheckOutput * Поправлен LightPT Упрощены TasksArr.pas TasksMatr.pas TasksStr.pas * fix `GetReferenceFileName` dll copy (#3173) * Исправление зависимостей проектов (#3174) * Add workflow to build each project separately * Make `Compiler` depend on `PascalLanguage` and `PascalABCSaushkinParser` 06e595 * Make IDE's depend on `PABCNETC` It's launched as a separate process from IDE * Revert pascal language moving to language plugins (#3175) * Return Parsers folder with standard parsers and move SyntaxTreeConverters back to Core * Rename PascalLanguage project to PascalABCLanguageInfo * Fix pascal dll loading * Поправлены Tasks1Arr.pas Tasks1Begin.pas Tasks1BoolIfCase.pas * Поправил в трех проектах пути к bin LightPT - Read...(prompt) - больше комбинаций Loop_If_2_Sum в Tasks1Loops.pas * #3172 * 3.9.0.3500 Хороший коммит ) * Remove extra tests * Fix dependencies in Compiler project * LightPT - убрал CheckOutputNew TasksArr.pas, TasksStr.pas - правки * #3164 * Убрали зависимость компилятора от парсера Паскаля --------- Co-authored-by: Mikhalkovich Stanislav <miks@math.sfedu.ru> Co-authored-by: Sun Serega <sunserega2@gmail.com> Co-authored-by: Ivan Bondarev <ibond84@googlemail.com>
116 lines
4.7 KiB
C#
116 lines
4.7 KiB
C#
// Copyright (c) Ivan Bondarev, Stanislav Mikhalkovich (for details please see \doc\copyright.txt)
|
||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||
using PascalABCCompiler.SyntaxTree;
|
||
using SyntaxVisitors;
|
||
using SyntaxVisitors.SugarVisitors;
|
||
using SyntaxVisitors.CheckingVisitors;
|
||
using SyntaxVisitors.PatternsVisitors;
|
||
using PascalABCCompiler.SyntaxTreeConverters;
|
||
|
||
namespace Languages.Pascal.Frontend.Converters
|
||
{
|
||
public class StandardSyntaxTreeConverter : BaseSyntaxTreeConverter
|
||
{
|
||
public override string Name { get; } = "Standard";
|
||
|
||
protected override syntax_tree_node ApplyConcreteConversions(syntax_tree_node root)
|
||
{
|
||
|
||
#if DEBUG
|
||
// var stat = new ABCStatisticsVisitor();
|
||
// stat.ProcessNode(root);
|
||
#endif
|
||
// SSM 02.01.24
|
||
//LetExprVisitor.New.ProcessNode(root);
|
||
|
||
// new range - до всего! До выноса выражения с лямбдой из foreach. 11.07 добавил поиск yields и присваивание pd.HasYield
|
||
NewRangeDesugarAndFindHasYieldVisitor.New.ProcessNode(root);
|
||
|
||
// Распаковка параметров в лямбдах
|
||
UnpackLambdaParametersVisitor.New.ProcessNode(root);
|
||
|
||
// Unnamed Records перенёс сюда
|
||
UnnamedRecordsCheckVisitor.New.ProcessNode(root);
|
||
|
||
// Выносим выражения с лямбдами из заголовка foreach + считаем максимум 10 вложенных лямбд
|
||
StandOutExprWithLambdaInForeachSequenceAndNestedLambdasVisitor.New.ProcessNode(root);
|
||
new VarNamesInMethodsWithSameNameAsClassGenericParamsReplacer(root as compilation_unit).ProcessNode(root);
|
||
FindOnExceptVarsAndApplyRenameVisitor.New.ProcessNode(root);
|
||
|
||
// loop
|
||
LoopDesugarVisitor.New.ProcessNode(root);
|
||
#if DEBUG
|
||
//new SimplePrettyPrinterVisitor("D:/out.txt").ProcessNode(root);
|
||
#endif
|
||
|
||
// tuple_node
|
||
TupleVisitor.New.ProcessNode(root);
|
||
|
||
// index
|
||
IndexVisitor.New.ProcessNode(root);
|
||
|
||
// slice_expr и slice_expr_question
|
||
SliceDesugarVisitor.New.ProcessNode(root);
|
||
// поставил раньше AssignTuplesDesugarVisitor из за var (a,b) := a[1:3];
|
||
|
||
// теперь коллизия с (a[1:6], a[6:11]):= (a[6:11], a[1:6]);
|
||
// assign_tuple и assign_var_tuple
|
||
AssignTuplesDesugarVisitor.New.ProcessNode(root); // теперь это - на семантике
|
||
|
||
|
||
// question_point_desugar_visitor
|
||
QuestionPointDesugarVisitor.New.ProcessNode(root);
|
||
|
||
// double_question_desugar_visitor
|
||
DoubleQuestionDesugarVisitor.New.ProcessNode(root);
|
||
|
||
// Patterns
|
||
// SingleDeconstructChecker.New.ProcessNode(root); // SSM 21.10.18 - пока разрешил множественные деконструкторы. Если будут проблемы - запретить
|
||
ExtendedIsDesugaringVisitor.New.ProcessNode(root); // Десахаризация расширенного is, который используется в сложных логических выражениях
|
||
PatternsDesugaringVisitor.New.ProcessNode(root); // Обязательно в этом порядке.
|
||
#if DEBUG
|
||
//new SimplePrettyPrinterVisitor("D:/out.txt").ProcessNode(root);
|
||
// TestAssignIsDefVisitor.New.ProcessNode(root);
|
||
#endif
|
||
|
||
// simple_property
|
||
PropertyDesugarVisitor.New.ProcessNode(root);
|
||
|
||
// Всё, связанное с yield
|
||
CapturedNamesHelper.Reset();
|
||
MarkMethodHasYieldAndCheckSomeErrorsVisitor.New.ProcessNode(root);
|
||
ProcessYieldCapturedVarsVisitor.New.ProcessNode(root);
|
||
|
||
AsyncVisitor.New.ProcessNode(root);
|
||
|
||
CacheFunctionVisitor.New.ProcessNode(root);
|
||
|
||
// При наличии файла lightpt.dat подключает модули LightPT и Tasks
|
||
root = TeacherControlConverter.New.Convert(root);
|
||
|
||
#if DEBUG
|
||
//new SimplePrettyPrinterVisitor("D:\\Tree.txt").ProcessNode(root);
|
||
//FillParentNodeVisitor.New.ProcessNode(root);
|
||
|
||
|
||
/*var cv = CollectLightSymInfoVisitor.New;
|
||
cv.ProcessNode(root);
|
||
cv.Output(@"Light1.txt");*/
|
||
|
||
/*try
|
||
{
|
||
root.visit(new SimplePrettyPrinterVisitor(@"d:\\zzz1.txt"));
|
||
}
|
||
catch(System.Exception e)
|
||
{
|
||
|
||
System.IO.File.AppendAllText(@"d:\\zzz1.txt",e.Message);
|
||
}*/
|
||
|
||
|
||
#endif
|
||
return root;
|
||
}
|
||
}
|
||
}
|