pascalabcnet/LambdaAnySynToSemConverter/LambdaAnyConverter.cs
Mikhalkovich Stanislav af9b6acb91 Ликвидация зависимости проектов PascalABCSaushkinParser и SyntaxVisitors от
проекта TreeConverter, то есть, от семантического уровня

Необходимо применить эти изменения и перекомпилировать в ОС РОСА
2023-05-31 14:04:04 +03:00

42 lines
1.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using PascalABCCompiler.SyntaxTree;
using PascalABCCompiler.TreeRealization;
using PascalABCCompiler.SyntaxTreeConverters;
/// <summary>
/// Этот визитор позволяет при переходе к семантике заменить синтаксический узел lambda_any_type_node_syntax
/// на семантический lambda_any_type_node
/// Это - единственное место, которое делало зависимость синтаксиса от семантики и этот визитор ее убирает
/// Мы вызываем этот визитор в компиляторе сразу после всех синтаксических визиторов
/// </summary>
namespace SyntaxSemanticVisitors
{
public class LambdaAnyConverter : ISyntaxTreeConverter
{
public string Name { get; } = "LambdaAny";
public syntax_tree_node Convert(syntax_tree_node root)
{
LambdaAnyVisitor.New.ProcessNode(root);
return root;
}
}
public class LambdaAnyVisitor : BaseChangeVisitor
{
public static LambdaAnyVisitor New
{
get { return new LambdaAnyVisitor(); }
}
public override void visit(lambda_inferred_type lit)
{
if (lit.real_type is lambda_any_type_node_syntax)
lit.real_type = new lambda_any_type_node(); // семантический
}
}
}