pascalabcnet/SyntaxTreeConverters/StandardSyntaxConverter.cs

60 lines
2 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
//--- Обработка синтаксически сахарных узлов
// 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
// Всё, связанное с yield
MarkMethodHasYieldAndCheckSomeErrorsVisitor.New.ProcessNode(root);
ProcessYieldCapturedVarsVisitor.New.ProcessNode(root);
2017-04-28 22:52:03 +03:00
/*#if DEBUG
2017-02-18 00:19:27 +03:00
try
{
2017-04-29 00:28:56 +03:00
//root.visit(new SimplePrettyPrinterVisitor(@"d:\\zzz4.txt"));
2017-02-18 00:19:27 +03:00
}
catch
{
}
2017-04-28 22:52:03 +03:00
#endif*/
2017-02-18 00:19:27 +03:00
return root;
}
}
}