pascalabcnet/SyntaxTreeConverters/StandardSyntaxConverter.cs

73 lines
2.5 KiB
C#
Raw Normal View History

// Copyright (c) Ivan Bondarev, Stanislav Mihalkovich (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using PascalABCCompiler.SyntaxTree;
using SyntaxVisitors;
using SyntaxVisitors.SugarVisitors;
namespace PascalABCCompiler.SyntaxTreeConverters
{
public class StandardSyntaxTreeConverter: ISyntaxTreeConverter
{
public string Name { get; } = "Standard";
public syntax_tree_node Convert(syntax_tree_node root)
{
// Прошивание ссылками на Parent nodes. Должно идти первым
// FillParentNodeVisitor расположен в SyntaxTree/tree как базовый визитор, отвечающий за построение дерева
2017-05-31 22:31:11 +03:00
FillParentNodeVisitor.New.ProcessNode(root);
// Выносим выражения с лямбдами из заголовка foreach
StandOutExprWithLambdaInForeachSequenceVisitor.New.ProcessNode(root);
2017-01-22 20:54:13 +03:00
//--- Обработка синтаксически сахарных узлов
2017-06-08 17:56:17 +03:00
// loop
LoopDesugarVisitor.New.ProcessNode(root);
2017-01-22 20:54:13 +03:00
// tuple_node
TupleVisitor.New.ProcessNode(root);
// assign_tuple и assign_var_tuple
AssignTuplesDesugarVisitor.New.ProcessNode(root);
2017-01-22 20:54:13 +03:00
// slice_expr и slice_expr_question
SliceDesugarVisitor.New.ProcessNode(root);
// question_point_desugar_visitor
QuestionPointDesugarVisitor.New.ProcessNode(root);
2017-02-03 11:31:40 +03:00
// double_question_desugar_visitor
DoubleQuestionDesugarVisitor.New.ProcessNode(root);
2018-04-20 09:04:59 +03:00
// pattern matching
MatchWithVisitor.New.ProcessNode(root);
IsPatternVisitor.New.ProcessNode(root);
2017-02-03 11:31:40 +03:00
// Всё, связанное с yield
MarkMethodHasYieldAndCheckSomeErrorsVisitor.New.ProcessNode(root);
ProcessYieldCapturedVarsVisitor.New.ProcessNode(root);
2017-10-20 11:54:32 +03:00
#if DEBUG
2017-10-26 19:39:20 +03:00
/*var cv = CollectLightSymInfoVisitor.New;
cv.ProcessNode(root);
cv.Output(@"Light1.txt");*/
2017-10-26 19:39:20 +03:00
2017-10-20 11:54:32 +03:00
/*try
{
//root.visit(new SimplePrettyPrinterVisitor(@"d:\\zzz4.txt"));
}
catch
{
}*/
#endif
return root;
}
}
}