Ликвидация зависимости проектов PascalABCSaushkinParser и SyntaxVisitors от

проекта TreeConverter, то есть, от семантического уровня

Необходимо применить эти изменения и перекомпилировать в ОС РОСА
This commit is contained in:
Mikhalkovich Stanislav 2023-05-31 14:04:04 +03:00
parent 232f3a2238
commit af9b6acb91
24 changed files with 565 additions and 64 deletions

View file

@ -117,6 +117,10 @@
<Project>{44A01F9E-DCE7-470C-AAE5-C3DE0CCBEE3B}</Project> <Project>{44A01F9E-DCE7-470C-AAE5-C3DE0CCBEE3B}</Project>
<Name>Errors</Name> <Name>Errors</Name>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\LambdaAnySynToSemConverter\LambdaAnySynToSemConverter.csproj">
<Project>{27d9800e-2689-4aa1-a2d6-128e4a9bae98}</Project>
<Name>LambdaAnySynToSemConverter</Name>
</ProjectReference>
<ProjectReference Include="..\Localization\Localization.csproj"> <ProjectReference Include="..\Localization\Localization.csproj">
<Project>{2DE2842F-0912-4251-BC0F-480854C44A13}</Project> <Project>{2DE2842F-0912-4251-BC0F-480854C44A13}</Project>
<Name>Localization</Name> <Name>Localization</Name>

View file

@ -41,6 +41,8 @@ namespace PascalABCCompiler.SyntaxTreeConverters
{ {
var st = new StandardSyntaxTreeConverter(); var st = new StandardSyntaxTreeConverter();
syntaxTreeConverters.Add(st); syntaxTreeConverters.Add(st);
var lam = new SyntaxSemanticVisitors.LambdaAnyConverter(); // синтактико семантический конвертер
syntaxTreeConverters.Add(lam);
} }
public void AddConverters() public void AddConverters()
{ {

View file

@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3"; public const string Major = "3";
public const string Minor = "9"; public const string Minor = "9";
public const string Build = "0"; public const string Build = "0";
public const string Revision = "3293"; public const string Revision = "3295";
public const string MainVersion = Major + "." + Minor; public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%MINOR%=9 %MINOR%=9
%REVISION%=3293 %REVISION%=3295
%COREVERSION%=0 %COREVERSION%=0
%MAJOR%=3 %MAJOR%=3

View file

@ -0,0 +1,41 @@
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(); // семантический
}
}
}

View file

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{27D9800E-2689-4AA1-A2D6-128E4A9BAE98}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>LambdaAnySynToSemConverter</RootNamespace>
<AssemblyName>LambdaAnySynToSemConverter</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="LambdaAnyConverter.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\SyntaxTreeConverters\SyntaxTreeConverters.csproj">
<Project>{f10a5330-dcf4-4533-877c-7b1b1be23884}</Project>
<Name>SyntaxTreeConverters</Name>
</ProjectReference>
<ProjectReference Include="..\SyntaxTree\SyntaxTree.csproj">
<Project>{c2cac65a-b2ae-4ccc-b067-e6b8e75df73a}</Project>
<Name>SyntaxTree</Name>
</ProjectReference>
<ProjectReference Include="..\SyntaxVisitors\SyntaxVisitors.csproj">
<Project>{a9ab4282-83b4-41a7-86c3-e5bf6a45e7e2}</Project>
<Name>SyntaxVisitors</Name>
</ProjectReference>
<ProjectReference Include="..\TreeConverter\TreeConverter.csproj">
<Project>{1c9c945a-586d-42a2-a06b-65d84fa7ff78}</Project>
<Name>TreeConverter</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View file

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Общие сведения об этой сборке предоставляются следующим набором
// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения,
// связанные со сборкой.
[assembly: AssemblyTitle("LambdaAnyTypeNodeSyntaxToSemanticConverter")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("LambdaAnyTypeNodeSyntaxToSemanticConverter")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми
// для компонентов COM. Если необходимо обратиться к типу в этой сборке через
// COM, задайте атрибуту ComVisible значение TRUE для этого типа.
[assembly: ComVisible(false)]
// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
[assembly: Guid("27d9800e-2689-4aa1-a2d6-128e4a9bae98")]
// Сведения о версии сборки состоят из следующих четырех значений:
//
// Основной номер версии
// Дополнительный номер версии
// Номер сборки
// Редакция
//
// Можно задать все значения или принять номер сборки и номер редакции по умолчанию.
// используя "*", как показано ниже:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

Binary file not shown.

View file

@ -2,7 +2,7 @@
// This CSharp output file generated by Gardens Point LEX // This CSharp output file generated by Gardens Point LEX
// Version: 1.1.3.301 // Version: 1.1.3.301
// Machine: DESKTOP-G8V08V4 // Machine: DESKTOP-G8V08V4
// DateTime: 08.05.2023 10:16:52 // DateTime: 31.05.2023 10:03:11
// UserName: ????????? // UserName: ?????????
// GPLEX input file <ABCPascal.lex> // GPLEX input file <ABCPascal.lex>
// GPLEX frame file <embedded resource> // GPLEX frame file <embedded resource>

View file

@ -2286,8 +2286,8 @@ typed_var_init_expression
| identifier tkArrow lambda_function_body | identifier tkArrow lambda_function_body
{ {
var idList = new ident_list($1, @1); var idList = new ident_list($1, @1);
var formalPars = new formal_parameters(new typed_parameters(idList, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), @1), parametr_kind.none, null, @1), @1); var formalPars = new formal_parameters(new typed_parameters(idList, new lambda_inferred_type(new lambda_any_type_node_syntax(), @1), parametr_kind.none, null, @1), @1);
$$ = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), @1), $3 as statement_list, @$); $$ = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, new lambda_inferred_type(new lambda_any_type_node_syntax(), @1), $3 as statement_list, @$);
} }
| tkRoundOpen tkRoundClose lambda_type_ref tkArrow lambda_function_body | tkRoundOpen tkRoundClose lambda_type_ref tkArrow lambda_function_body
{ {
@ -2308,7 +2308,7 @@ typed_var_init_expression
idList.idents.Add(el.expressions[j] as ident); idList.idents.Add(el.expressions[j] as ident);
} }
var any = new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), @2); var any = new lambda_inferred_type(new lambda_any_type_node_syntax(), @2);
var formalPars = new formal_parameters(new typed_parameters(idList, any, parametr_kind.none, null, @2), @2); var formalPars = new formal_parameters(new typed_parameters(idList, any, parametr_kind.none, null, @2), @2);
$$ = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, any, $5 as statement_list, @$); $$ = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, any, $5 as statement_list, @$);
@ -4895,10 +4895,10 @@ func_decl_lambda
: identifier tkArrow lambda_function_body : identifier tkArrow lambda_function_body
{ {
var idList = new ident_list($1, @1); var idList = new ident_list($1, @1);
var formalPars = new formal_parameters(new typed_parameters(idList, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), @1), parametr_kind.none, null, @1), @1); var formalPars = new formal_parameters(new typed_parameters(idList, new lambda_inferred_type(new lambda_any_type_node_syntax(), @1), parametr_kind.none, null, @1), @1);
//var sl = $3 as statement_list; //var sl = $3 as statement_list;
//if (sl.expr_lambda_body || SyntaxVisitors.HasNameVisitor.HasName($3, "Result") != null) // åñëè ýòî áûëî âûðàæåíèå èëè åñòü ïåðåìåííàÿ Result, òî àâòîâûâîä òèïà //if (sl.expr_lambda_body || SyntaxVisitors.HasNameVisitor.HasName($3, "Result") != null) // åñëè ýòî áûëî âûðàæåíèå èëè åñòü ïåðåìåííàÿ Result, òî àâòîâûâîä òèïà
$$ = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), @1), $3 as statement_list, @$); $$ = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, new lambda_inferred_type(new lambda_any_type_node_syntax(), @1), $3 as statement_list, @$);
//else //else
//$$ = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, null, $3 as statement_list, @$); //$$ = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, null, $3 as statement_list, @$);
} }
@ -4923,7 +4923,7 @@ func_decl_lambda
| tkRoundOpen identifier tkSemiColon full_lambda_fp_list tkRoundClose lambda_type_ref_noproctype tkArrow lambda_function_body | tkRoundOpen identifier tkSemiColon full_lambda_fp_list tkRoundClose lambda_type_ref_noproctype tkArrow lambda_function_body
{ {
var idList = new ident_list($2, @2); var idList = new ident_list($2, @2);
var formalPars = new formal_parameters(new typed_parameters(idList, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null), parametr_kind.none, null, @2), LexLocation.MergeAll(@2,@3,@4)); var formalPars = new formal_parameters(new typed_parameters(idList, new lambda_inferred_type(new lambda_any_type_node_syntax(), null), parametr_kind.none, null, @2), LexLocation.MergeAll(@2,@3,@4));
for (int i = 0; i < ($4 as formal_parameters).Count; i++) for (int i = 0; i < ($4 as formal_parameters).Count; i++)
formalPars.Add(($4 as formal_parameters).params_list[i]); formalPars.Add(($4 as formal_parameters).params_list[i]);
var sl = $8 as statement_list; var sl = $8 as statement_list;
@ -4978,7 +4978,7 @@ func_decl_lambda
lst_ex.Add(x); lst_ex.Add(x);
function_lambda_definition fld = null; //= new function_lambda_definition(lambdaHelper.CreateLambdaName(), null, function_lambda_definition fld = null; //= new function_lambda_definition(lambdaHelper.CreateLambdaName(), null,
//new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), @2), pair.exprs, @$); //new lambda_inferred_type(new lambda_any_type_node_syntax(), @2), pair.exprs, @$);
var sl1 = pair.exprs; var sl1 = pair.exprs;
if (sl1.expr_lambda_body || SyntaxVisitors.HasNameVisitor.HasName(sl1, "result") != null) // òî íàäî âûâîäèòü if (sl1.expr_lambda_body || SyntaxVisitors.HasNameVisitor.HasName(sl1, "result") != null) // òî íàäî âûâîäèòü
@ -4994,7 +4994,7 @@ func_decl_lambda
var idd = $2 as ident; var idd = $2 as ident;
if (idd==null) if (idd==null)
parsertools.AddErrorFromResource("ONE_TKIDENTIFIER",@2); parsertools.AddErrorFromResource("ONE_TKIDENTIFIER",@2);
var lambda_inf_type = new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null); var lambda_inf_type = new lambda_inferred_type(new lambda_any_type_node_syntax(), null);
var new_typed_pars = new typed_parameters(new ident_list(idd, idd.source_context), lambda_inf_type, parametr_kind.none, null, idd.source_context); var new_typed_pars = new typed_parameters(new ident_list(idd, idd.source_context), lambda_inf_type, parametr_kind.none, null, idd.source_context);
formal_pars.Add(new_typed_pars); formal_pars.Add(new_typed_pars);
foreach (var id in ($4 as expression_list).expressions) foreach (var id in ($4 as expression_list).expressions)
@ -5003,7 +5003,7 @@ func_decl_lambda
if (idd1==null) if (idd1==null)
parsertools.AddErrorFromResource("ONE_TKIDENTIFIER",id.source_context); parsertools.AddErrorFromResource("ONE_TKIDENTIFIER",id.source_context);
lambda_inf_type = new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null); lambda_inf_type = new lambda_inferred_type(new lambda_any_type_node_syntax(), null);
new_typed_pars = new typed_parameters(new ident_list(idd1, idd1.source_context), lambda_inf_type, parametr_kind.none, null, idd1.source_context); new_typed_pars = new typed_parameters(new ident_list(idd1, idd1.source_context), lambda_inf_type, parametr_kind.none, null, idd1.source_context);
formal_pars.Add(new_typed_pars); formal_pars.Add(new_typed_pars);
} }
@ -5055,7 +5055,7 @@ func_decl_lambda
var pair = $2 as pair_type_stlist; var pair = $2 as pair_type_stlist;
// ïîêà ôîðìàëüíûå ïàðàìåòðû - null. Ðàñêðîåì èõ ñàõàðíûì âèçèòîðîì // ïîêà ôîðìàëüíûå ïàðàìåòðû - null. Ðàñêðîåì èõ ñàõàðíûì âèçèòîðîì
$$ = new function_lambda_definition(lambdaHelper.CreateLambdaName(), null, $$ = new function_lambda_definition(lambdaHelper.CreateLambdaName(), null,
new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), @1), pair.exprs, @$); new lambda_inferred_type(new lambda_any_type_node_syntax(), @1), pair.exprs, @$);
// unpacked_params - ýòî äëÿ îäíîãî ïàðàìåòðà. Äëÿ íåñêîëüêèõ - íàäî äðóãóþ ñòðóêòóðó. Âîçìîæíî, ñïèñîê ñïèñêîâ // unpacked_params - ýòî äëÿ îäíîãî ïàðàìåòðà. Äëÿ íåñêîëüêèõ - íàäî äðóãóþ ñòðóêòóðó. Âîçìîæíî, ñïèñîê ñïèñêîâ
var lst_ex = new List<expression>(); var lst_ex = new List<expression>();
lst_ex.Add($1 as unpacked_list_of_ident_or_list); lst_ex.Add($1 as unpacked_list_of_ident_or_list);
@ -5118,7 +5118,7 @@ full_lambda_fp_list
$$ = new formal_parameters(); $$ = new formal_parameters();
foreach (var id in typed_pars.idents.idents) foreach (var id in typed_pars.idents.idents)
{ {
var lambda_inf_type = new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null); var lambda_inf_type = new lambda_inferred_type(new lambda_any_type_node_syntax(), null);
var new_typed_pars = new typed_parameters(new ident_list(id, id.source_context), lambda_inf_type, parametr_kind.none, null, id.source_context); var new_typed_pars = new typed_parameters(new ident_list(id, id.source_context), lambda_inf_type, parametr_kind.none, null, id.source_context);
($$ as formal_parameters).Add(new_typed_pars); ($$ as formal_parameters).Add(new_typed_pars);
} }
@ -5145,7 +5145,7 @@ lambda_simple_fp_sect
lambda_type_ref lambda_type_ref
: :
{ {
$$ = new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null); $$ = new lambda_inferred_type(new lambda_any_type_node_syntax(), null);
} }
| tkColon fptype | tkColon fptype
{ {
@ -5156,7 +5156,7 @@ lambda_type_ref
lambda_type_ref_noproctype lambda_type_ref_noproctype
: :
{ {
$$ = new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null); $$ = new lambda_inferred_type(new lambda_any_type_node_syntax(), null);
} }
| tkColon fptype_noproctype | tkColon fptype_noproctype
{ {

View file

@ -2,9 +2,9 @@
// GPPG version 1.3.6 // GPPG version 1.3.6
// Machine: DESKTOP-G8V08V4 // Machine: DESKTOP-G8V08V4
// DateTime: 08.05.2023 10:16:52 // DateTime: 31.05.2023 10:03:12
// UserName: ????????? // UserName: ?????????
// Input file <D:\PABC_Git\Parsers\PascalABCParserNewSaushkin\ABCPascal.y> // Input file <ABCPascal.y>
// options: no-lines gplex // options: no-lines gplex
@ -60,7 +60,7 @@ public abstract class ScanBase : AbstractScanner<PascalABCSavParser.Union,LexLoc
public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, LexLocation> public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, LexLocation>
{ {
// Verbatim content from D:\PABC_Git\Parsers\PascalABCParserNewSaushkin\ABCPascal.y // Verbatim content from ABCPascal.y
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> GPPGParser, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> gppg // <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> GPPGParser, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> gppg
public syntax_tree_node root; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> public syntax_tree_node root; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@ -72,7 +72,7 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
public ParserLambdaHelper lambdaHelper = new ParserLambdaHelper(); public ParserLambdaHelper lambdaHelper = new ParserLambdaHelper();
public GPPGParser(AbstractScanner<PascalABCSavParser.Union, LexLocation> scanner) : base(scanner) { } public GPPGParser(AbstractScanner<PascalABCSavParser.Union, LexLocation> scanner) : base(scanner) { }
// End verbatim content from D:\PABC_Git\Parsers\PascalABCParserNewSaushkin\ABCPascal.y // End verbatim content from ABCPascal.y
#pragma warning disable 649 #pragma warning disable 649
private static Dictionary<int, string> aliasses; private static Dictionary<int, string> aliasses;
@ -4823,8 +4823,8 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
case 410: // typed_var_init_expression -> identifier, tkArrow, lambda_function_body case 410: // typed_var_init_expression -> identifier, tkArrow, lambda_function_body
{ {
var idList = new ident_list(ValueStack[ValueStack.Depth-3].id, LocationStack[LocationStack.Depth-3]); var idList = new ident_list(ValueStack[ValueStack.Depth-3].id, LocationStack[LocationStack.Depth-3]);
var formalPars = new formal_parameters(new typed_parameters(idList, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), LocationStack[LocationStack.Depth-3]), parametr_kind.none, null, LocationStack[LocationStack.Depth-3]), LocationStack[LocationStack.Depth-3]); var formalPars = new formal_parameters(new typed_parameters(idList, new lambda_inferred_type(new lambda_any_type_node_syntax(), LocationStack[LocationStack.Depth-3]), parametr_kind.none, null, LocationStack[LocationStack.Depth-3]), LocationStack[LocationStack.Depth-3]);
CurrentSemanticValue.ex = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), LocationStack[LocationStack.Depth-3]), ValueStack[ValueStack.Depth-1].stn as statement_list, CurrentLocationSpan); CurrentSemanticValue.ex = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, new lambda_inferred_type(new lambda_any_type_node_syntax(), LocationStack[LocationStack.Depth-3]), ValueStack[ValueStack.Depth-1].stn as statement_list, CurrentLocationSpan);
} }
break; break;
case 411: // typed_var_init_expression -> tkRoundOpen, tkRoundClose, lambda_type_ref, case 411: // typed_var_init_expression -> tkRoundOpen, tkRoundClose, lambda_type_ref,
@ -4849,7 +4849,7 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
idList.idents.Add(el.expressions[j] as ident); idList.idents.Add(el.expressions[j] as ident);
} }
var any = new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), LocationStack[LocationStack.Depth-4]); var any = new lambda_inferred_type(new lambda_any_type_node_syntax(), LocationStack[LocationStack.Depth-4]);
var formalPars = new formal_parameters(new typed_parameters(idList, any, parametr_kind.none, null, LocationStack[LocationStack.Depth-4]), LocationStack[LocationStack.Depth-4]); var formalPars = new formal_parameters(new typed_parameters(idList, any, parametr_kind.none, null, LocationStack[LocationStack.Depth-4]), LocationStack[LocationStack.Depth-4]);
CurrentSemanticValue.ex = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, any, ValueStack[ValueStack.Depth-1].stn as statement_list, CurrentLocationSpan); CurrentSemanticValue.ex = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, any, ValueStack[ValueStack.Depth-1].stn as statement_list, CurrentLocationSpan);
@ -6729,9 +6729,6 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
if (ValueStack[ValueStack.Depth-4].ex is index) if (ValueStack[ValueStack.Depth-4].ex is index)
parsertools.AddErrorFromResource("UNEXPECTED_SYMBOL{0}", LocationStack[LocationStack.Depth-4], "^"); parsertools.AddErrorFromResource("UNEXPECTED_SYMBOL{0}", LocationStack[LocationStack.Depth-4], "^");
CurrentSemanticValue.ex = new method_call(ValueStack[ValueStack.Depth-4].ex as addressed_value,ValueStack[ValueStack.Depth-2].stn as expression_list, CurrentLocationSpan); CurrentSemanticValue.ex = new method_call(ValueStack[ValueStack.Depth-4].ex as addressed_value,ValueStack[ValueStack.Depth-2].stn as expression_list, CurrentLocationSpan);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
} }
break; break;
case 786: // variable -> identifier case 786: // variable -> identifier
@ -7467,10 +7464,10 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
case 978: // func_decl_lambda -> identifier, tkArrow, lambda_function_body case 978: // func_decl_lambda -> identifier, tkArrow, lambda_function_body
{ {
var idList = new ident_list(ValueStack[ValueStack.Depth-3].id, LocationStack[LocationStack.Depth-3]); var idList = new ident_list(ValueStack[ValueStack.Depth-3].id, LocationStack[LocationStack.Depth-3]);
var formalPars = new formal_parameters(new typed_parameters(idList, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), LocationStack[LocationStack.Depth-3]), parametr_kind.none, null, LocationStack[LocationStack.Depth-3]), LocationStack[LocationStack.Depth-3]); var formalPars = new formal_parameters(new typed_parameters(idList, new lambda_inferred_type(new lambda_any_type_node_syntax(), LocationStack[LocationStack.Depth-3]), parametr_kind.none, null, LocationStack[LocationStack.Depth-3]), LocationStack[LocationStack.Depth-3]);
//var sl = $3 as statement_list; //var sl = $3 as statement_list;
//if (sl.expr_lambda_body || SyntaxVisitors.HasNameVisitor.HasName($3, "Result") != null) // <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Result, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> //if (sl.expr_lambda_body || SyntaxVisitors.HasNameVisitor.HasName($3, "Result") != null) // <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Result, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
CurrentSemanticValue.ex = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), LocationStack[LocationStack.Depth-3]), ValueStack[ValueStack.Depth-1].stn as statement_list, CurrentLocationSpan); CurrentSemanticValue.ex = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, new lambda_inferred_type(new lambda_any_type_node_syntax(), LocationStack[LocationStack.Depth-3]), ValueStack[ValueStack.Depth-1].stn as statement_list, CurrentLocationSpan);
//else //else
//$$ = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, null, $3 as statement_list, @$); //$$ = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, null, $3 as statement_list, @$);
} }
@ -7502,7 +7499,7 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
// lambda_function_body // lambda_function_body
{ {
var idList = new ident_list(ValueStack[ValueStack.Depth-7].id, LocationStack[LocationStack.Depth-7]); var idList = new ident_list(ValueStack[ValueStack.Depth-7].id, LocationStack[LocationStack.Depth-7]);
var formalPars = new formal_parameters(new typed_parameters(idList, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null), parametr_kind.none, null, LocationStack[LocationStack.Depth-7]), LexLocation.MergeAll(LocationStack[LocationStack.Depth-7],LocationStack[LocationStack.Depth-6],LocationStack[LocationStack.Depth-5])); var formalPars = new formal_parameters(new typed_parameters(idList, new lambda_inferred_type(new lambda_any_type_node_syntax(), null), parametr_kind.none, null, LocationStack[LocationStack.Depth-7]), LexLocation.MergeAll(LocationStack[LocationStack.Depth-7],LocationStack[LocationStack.Depth-6],LocationStack[LocationStack.Depth-5]));
for (int i = 0; i < (ValueStack[ValueStack.Depth-5].stn as formal_parameters).Count; i++) for (int i = 0; i < (ValueStack[ValueStack.Depth-5].stn as formal_parameters).Count; i++)
formalPars.Add((ValueStack[ValueStack.Depth-5].stn as formal_parameters).params_list[i]); formalPars.Add((ValueStack[ValueStack.Depth-5].stn as formal_parameters).params_list[i]);
var sl = ValueStack[ValueStack.Depth-1].stn as statement_list; var sl = ValueStack[ValueStack.Depth-1].stn as statement_list;
@ -7563,7 +7560,7 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
lst_ex.Add(x); lst_ex.Add(x);
function_lambda_definition fld = null; //= new function_lambda_definition(lambdaHelper.CreateLambdaName(), null, function_lambda_definition fld = null; //= new function_lambda_definition(lambdaHelper.CreateLambdaName(), null,
//new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), @2), pair.exprs, @$); //new lambda_inferred_type(new lambda_any_type_node_syntax(), @2), pair.exprs, @$);
var sl1 = pair.exprs; var sl1 = pair.exprs;
if (sl1.expr_lambda_body || SyntaxVisitors.HasNameVisitor.HasName(sl1, "result") != null) // <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> if (sl1.expr_lambda_body || SyntaxVisitors.HasNameVisitor.HasName(sl1, "result") != null) // <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@ -7579,7 +7576,7 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
var idd = ValueStack[ValueStack.Depth-7].ex as ident; var idd = ValueStack[ValueStack.Depth-7].ex as ident;
if (idd==null) if (idd==null)
parsertools.AddErrorFromResource("ONE_TKIDENTIFIER",LocationStack[LocationStack.Depth-7]); parsertools.AddErrorFromResource("ONE_TKIDENTIFIER",LocationStack[LocationStack.Depth-7]);
var lambda_inf_type = new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null); var lambda_inf_type = new lambda_inferred_type(new lambda_any_type_node_syntax(), null);
var new_typed_pars = new typed_parameters(new ident_list(idd, idd.source_context), lambda_inf_type, parametr_kind.none, null, idd.source_context); var new_typed_pars = new typed_parameters(new ident_list(idd, idd.source_context), lambda_inf_type, parametr_kind.none, null, idd.source_context);
formal_pars.Add(new_typed_pars); formal_pars.Add(new_typed_pars);
foreach (var id in (ValueStack[ValueStack.Depth-5].stn as expression_list).expressions) foreach (var id in (ValueStack[ValueStack.Depth-5].stn as expression_list).expressions)
@ -7588,7 +7585,7 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
if (idd1==null) if (idd1==null)
parsertools.AddErrorFromResource("ONE_TKIDENTIFIER",id.source_context); parsertools.AddErrorFromResource("ONE_TKIDENTIFIER",id.source_context);
lambda_inf_type = new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null); lambda_inf_type = new lambda_inferred_type(new lambda_any_type_node_syntax(), null);
new_typed_pars = new typed_parameters(new ident_list(idd1, idd1.source_context), lambda_inf_type, parametr_kind.none, null, idd1.source_context); new_typed_pars = new typed_parameters(new ident_list(idd1, idd1.source_context), lambda_inf_type, parametr_kind.none, null, idd1.source_context);
formal_pars.Add(new_typed_pars); formal_pars.Add(new_typed_pars);
} }
@ -7641,7 +7638,7 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
var pair = ValueStack[ValueStack.Depth-1].ob as pair_type_stlist; var pair = ValueStack[ValueStack.Depth-1].ob as pair_type_stlist;
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - null. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - null. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CurrentSemanticValue.ex = new function_lambda_definition(lambdaHelper.CreateLambdaName(), null, CurrentSemanticValue.ex = new function_lambda_definition(lambdaHelper.CreateLambdaName(), null,
new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), LocationStack[LocationStack.Depth-2]), pair.exprs, CurrentLocationSpan); new lambda_inferred_type(new lambda_any_type_node_syntax(), LocationStack[LocationStack.Depth-2]), pair.exprs, CurrentLocationSpan);
// unpacked_params - <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // unpacked_params - <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
var lst_ex = new List<expression>(); var lst_ex = new List<expression>();
lst_ex.Add(ValueStack[ValueStack.Depth-2].ex as unpacked_list_of_ident_or_list); lst_ex.Add(ValueStack[ValueStack.Depth-2].ex as unpacked_list_of_ident_or_list);
@ -7711,7 +7708,7 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
CurrentSemanticValue.stn = new formal_parameters(); CurrentSemanticValue.stn = new formal_parameters();
foreach (var id in typed_pars.idents.idents) foreach (var id in typed_pars.idents.idents)
{ {
var lambda_inf_type = new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null); var lambda_inf_type = new lambda_inferred_type(new lambda_any_type_node_syntax(), null);
var new_typed_pars = new typed_parameters(new ident_list(id, id.source_context), lambda_inf_type, parametr_kind.none, null, id.source_context); var new_typed_pars = new typed_parameters(new ident_list(id, id.source_context), lambda_inf_type, parametr_kind.none, null, id.source_context);
(CurrentSemanticValue.stn as formal_parameters).Add(new_typed_pars); (CurrentSemanticValue.stn as formal_parameters).Add(new_typed_pars);
} }
@ -7735,7 +7732,7 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
break; break;
case 998: // lambda_type_ref -> /* empty */ case 998: // lambda_type_ref -> /* empty */
{ {
CurrentSemanticValue.td = new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null); CurrentSemanticValue.td = new lambda_inferred_type(new lambda_any_type_node_syntax(), null);
} }
break; break;
case 999: // lambda_type_ref -> tkColon, fptype case 999: // lambda_type_ref -> tkColon, fptype
@ -7745,7 +7742,7 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
break; break;
case 1000: // lambda_type_ref_noproctype -> /* empty */ case 1000: // lambda_type_ref_noproctype -> /* empty */
{ {
CurrentSemanticValue.td = new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null); CurrentSemanticValue.td = new lambda_inferred_type(new lambda_any_type_node_syntax(), null);
} }
break; break;
case 1001: // lambda_type_ref_noproctype -> tkColon, fptype_noproctype case 1001: // lambda_type_ref_noproctype -> tkColon, fptype_noproctype

View file

@ -365,5 +365,6 @@ script=

View file

@ -135,10 +135,6 @@
<Project>{a9ab4282-83b4-41a7-86c3-e5bf6a45e7e2}</Project> <Project>{a9ab4282-83b4-41a7-86c3-e5bf6a45e7e2}</Project>
<Name>SyntaxVisitors</Name> <Name>SyntaxVisitors</Name>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\..\TreeConverter\TreeConverter.csproj">
<Project>{1c9c945a-586d-42a2-a06b-65d84fa7ff78}</Project>
<Name>TreeConverter</Name>
</ProjectReference>
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.

View file

@ -105,6 +105,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PluginsSupportLinux", "Plug
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TeacherControlPlugin", "VisualPlugins\TraningControlPlugin\TeacherControlPlugin.csproj", "{536CC813-7C4E-42BC-AE3A-BA1427F38756}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TeacherControlPlugin", "VisualPlugins\TraningControlPlugin\TeacherControlPlugin.csproj", "{536CC813-7C4E-42BC-AE3A-BA1427F38756}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LambdaAnySynToSemConverter", "LambdaAnySynToSemConverter\LambdaAnySynToSemConverter.csproj", "{27D9800E-2689-4AA1-A2D6-128E4A9BAE98}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@ -487,6 +489,18 @@ Global
{536CC813-7C4E-42BC-AE3A-BA1427F38756}.Release|Mixed Platforms.Build.0 = Release|Any CPU {536CC813-7C4E-42BC-AE3A-BA1427F38756}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{536CC813-7C4E-42BC-AE3A-BA1427F38756}.Release|x86.ActiveCfg = Release|Any CPU {536CC813-7C4E-42BC-AE3A-BA1427F38756}.Release|x86.ActiveCfg = Release|Any CPU
{536CC813-7C4E-42BC-AE3A-BA1427F38756}.Release|x86.Build.0 = Release|Any CPU {536CC813-7C4E-42BC-AE3A-BA1427F38756}.Release|x86.Build.0 = Release|Any CPU
{27D9800E-2689-4AA1-A2D6-128E4A9BAE98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{27D9800E-2689-4AA1-A2D6-128E4A9BAE98}.Debug|Any CPU.Build.0 = Debug|Any CPU
{27D9800E-2689-4AA1-A2D6-128E4A9BAE98}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{27D9800E-2689-4AA1-A2D6-128E4A9BAE98}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{27D9800E-2689-4AA1-A2D6-128E4A9BAE98}.Debug|x86.ActiveCfg = Debug|Any CPU
{27D9800E-2689-4AA1-A2D6-128E4A9BAE98}.Debug|x86.Build.0 = Debug|Any CPU
{27D9800E-2689-4AA1-A2D6-128E4A9BAE98}.Release|Any CPU.ActiveCfg = Release|Any CPU
{27D9800E-2689-4AA1-A2D6-128E4A9BAE98}.Release|Any CPU.Build.0 = Release|Any CPU
{27D9800E-2689-4AA1-A2D6-128E4A9BAE98}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{27D9800E-2689-4AA1-A2D6-128E4A9BAE98}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{27D9800E-2689-4AA1-A2D6-128E4A9BAE98}.Release|x86.ActiveCfg = Release|Any CPU
{27D9800E-2689-4AA1-A2D6-128E4A9BAE98}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
@ -531,6 +545,7 @@ Global
{3BF3CEB4-0E08-485A-8E6D-924841818B01} = {26843C5D-9D7E-4C2C-AC14-2D227FA5592E} {3BF3CEB4-0E08-485A-8E6D-924841818B01} = {26843C5D-9D7E-4C2C-AC14-2D227FA5592E}
{E009E776-9280-4061-B5CA-7F0C3E2D3C2A} = {26843C5D-9D7E-4C2C-AC14-2D227FA5592E} {E009E776-9280-4061-B5CA-7F0C3E2D3C2A} = {26843C5D-9D7E-4C2C-AC14-2D227FA5592E}
{536CC813-7C4E-42BC-AE3A-BA1427F38756} = {EC68A3D8-6D63-4A79-ABA6-BF8E9D7756D7} {536CC813-7C4E-42BC-AE3A-BA1427F38756} = {EC68A3D8-6D63-4A79-ABA6-BF8E9D7756D7}
{27D9800E-2689-4AA1-A2D6-128E4A9BAE98} = {F8CE2712-826B-450B-A72F-D32D80C99858}
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {68E993E6-EE86-4DDF-B0A1-4FE884F8AC39} SolutionGuid = {68E993E6-EE86-4DDF-B0A1-4FE884F8AC39}

View file

@ -1 +1 @@
3.9.0.3293 3.9.0.3295

View file

@ -1 +1 @@
!define VERSION '3.9.0.3293' !define VERSION '3.9.0.3295'

View file

@ -5,6 +5,351 @@ using System.Text;
namespace PascalABCCompiler.SyntaxTree namespace PascalABCCompiler.SyntaxTree
{ {
#region Генерация новых узлов синтаксического дерева
/// <summary>
/// Класс для генерации новых узлов синтаксического дерева
/// </summary>
public class SyntaxTreeNodesConstructor
{
public static var_statement CreateVarStatementNode(string idName, type_definition varType, expression initValue)
{
var id = new ident(idName);
var idlist = new ident_list(id);
var vdef = new var_def_statement(idlist, varType, initValue, definition_attribute.None, false, null);
return new var_statement(vdef, null);
}
public static var_statement CreateVarStatementNode(string idName, string varTypeName, expression initValue)
{
var id = new ident(idName);
var idlist = new ident_list(id);
var varType = new named_type_reference(varTypeName, null);
var vdef = new var_def_statement(idlist, varType, initValue, definition_attribute.None, false, null);
return new var_statement(vdef, null);
}
public static var_statement CreateVarStatementNode(ident_list idlist, type_definition varType, expression initValue)
{
var vdef = new var_def_statement(idlist, varType, initValue, definition_attribute.None, false, null);
return new var_statement(vdef, null);
}
public static procedure_definition CreateProcedureDefinitionNode(method_name methName, formal_parameters formalPars, bool ofObject, bool classKeyword, statement procBody, SourceContext sc)
{
procedure_definition procDef = new procedure_definition();
procedure_header procHeader = new procedure_header();
procHeader.name = methName;
procHeader.source_context = sc;
if (procHeader.name.meth_name is template_type_name)
{
procHeader.template_args = (procHeader.name.meth_name as template_type_name).template_args;
ident id = new ident(procHeader.name.meth_name.name);
procHeader.name.meth_name = id;
}
procHeader.parameters = formalPars;
procHeader.of_object = ofObject;
procHeader.class_keyword = classKeyword;
statement_list stmtList = new statement_list();
stmtList.subnodes.Add(procBody);
block bl = new block(null, null);
bl.program_code = stmtList;
procDef.proc_header = procHeader;
procDef.proc_body = (proc_block)bl;
return procDef;
}
public static procedure_definition CreateFunctionDefinitionNode(method_name methName, formal_parameters formalPars, bool ofObject, bool classKeyword, statement procBody, type_definition returnType, SourceContext sc)
{
procedure_definition procDef = new procedure_definition();
function_header procHeader = new function_header();
procHeader.name = methName;
procHeader.source_context = sc;
if (procHeader.name.meth_name is template_type_name)
{
procHeader.template_args = (procHeader.name.meth_name as template_type_name).template_args;
ident id = new ident(procHeader.name.meth_name.name);
procHeader.name.meth_name = id;
}
procHeader.parameters = formalPars;
procHeader.of_object = ofObject;
procHeader.class_keyword = classKeyword;
procHeader.return_type = returnType;
statement_list stmtList = new statement_list();
stmtList.subnodes.Add(procBody);
block bl = new block(null, null);
bl.program_code = stmtList;
procDef.proc_header = procHeader;
procDef.proc_body = (proc_block)bl;
return procDef;
}
}
#endregion
public class SubtreeCreator
{
/// <summary>
/// Создать var-выражение
/// </summary>
/// <param name="name">Имя переменной</param>
/// <param name="initialValue">Начальное значение</param>
/// <returns></returns>
public static var_def_statement CreateVarDef(string name, expression initialValue)
{
ident_list list = new ident_list();
list.idents.Add(new ident(name));
var res = new var_def_statement();
res.inital_value = initialValue;
res.vars = list;
return res;
}
/// <summary>
/// Объявление пременной с именованным типом
/// </summary>
/// <param name="variableName"></param>
/// <param name="typeName"></param>
/// <returns></returns>
public static var_statement NamedTypeVariableDefinition(string variableName, string typeName)
{
var_def_statement varDefStatement = new var_def_statement();
varDefStatement.vars.Add(new ident(variableName));
varDefStatement.vars_type = new named_type_reference(typeName);
return new var_statement(varDefStatement);
}
/// <summary>
/// Создать var-выражение с несколькими переменными
/// </summary>
/// <param name="type">Тип переменных</param>
/// <param name="idents">Имена переменных</param>
/// <returns></returns>
public static var_def_statement CreateVarDef(named_type_reference type, params string[] names)
{
var_def_statement res = new var_def_statement();
foreach (string x in names)
res.vars.Add(new ident(x));
res.vars_type = type;
return res;
}
/// <summary>
/// Создать цикл for
/// </summary>
/// <param name="varName">Имя переменной цикла</param>
/// <param name="initValue">Начальное значение переменной цикла</param>
/// <param name="finishValue">Конечное значение переменной цикла</param>
/// <param name="body">Тело цикла</param>
/// <param name="type">Тип цикла(to / downto)</param>
/// <returns></returns>
public static SyntaxTree.for_node CreateFor(string varName, expression initValue, expression finishValue, statement body, for_cycle_type type)
{
SyntaxTree.for_node res = new SyntaxTree.for_node();
res.loop_variable = new ident(varName);
res.initial_value = initValue;
res.finish_value = finishValue;
res.statements = body;
res.cycle_type = type;
return res;
}
/// <summary>
/// Создать цикл while
/// </summary>
/// <param name="condition">Условие цикла</param>
/// <param name="body">Тело цикла</param>
/// <returns></returns>
public static SyntaxTree.while_node CreateWhile(expression condition, statement body)
{
SyntaxTree.while_node res = new SyntaxTree.while_node();
res.CycleType = WhileCycleType.While;
res.expr = condition;
res.statements = body;
return res;
}
private static SyntaxTree.if_node CreateIfElse(expression condition, statement thenBody, statement elseBody)
{
return new SyntaxTree.if_node(condition, thenBody, elseBody);
}
/// <summary>
/// Создать условный оператор
/// </summary>
/// <param name="condition">Условие</param>
/// <param name="thenBody">Тело, выполняемое если условие истино</param>
/// <returns></returns>
public static SyntaxTree.if_node CreateIf(expression condition, statement thenBody)
{
return CreateIfElse(condition, thenBody, null);
}
/// <summary>
/// Создать условный оператор
/// </summary>
/// <param name="condition">Условие</param>
/// <param name="thenBody">Тело, выполняемое если условие истино</param>
/// <param name="elseBody">Тело, выполняемое если условие ложно</param>
/// <returns></returns>
public static SyntaxTree.if_node CreateIf(expression condition, statement thenBody, statement elseBody)
{
return CreateIfElse(condition, thenBody, elseBody);
}
private static SyntaxTree.program_module InternalCreateProgramModule(statement_list statements, declarations defs)
{
block block = new block();
if (defs != null)
block.defs = defs;
statements.Add(new SyntaxTree.empty_statement());
statements.left_logical_bracket = new token_info("begin");
statements.right_logical_bracket = new token_info("end");
block.program_code = statements;
program_module res = new program_module();
res.program_block = block;
//res.used_units = create_standard_uses_list();
return res;
}
public static SyntaxTree.program_module CreateProgramModule(statement_list statements, declarations defs)
{
return InternalCreateProgramModule(statements, defs);
}
public static SyntaxTree.program_module CreateProgramModule(statement_list statements)
{
return InternalCreateProgramModule(statements, null);
}
//private SyntaxTree.uses_list CreateStandartUsesList()
//{
// uses_list res = new uses_list();
// unit_or_namespace pabcsystem = new unit_or_namespace();
// pabcsystem.name = new ident_list("PABCSystem");
// res.units.Add(pabcsystem);
// return res;
//}
/// <summary>
/// Создает узел вызова процедуры из PABCSystem
/// </summary>
/// <param name="procName">Имя процедуры</param>
/// <param name="exprList">Параметры процедуры</param>
/// <returns></returns>
public static procedure_call CreateSystemProcedureCall(string procName, params expression[] exprList)
{
var procedureCall = CreateProcedureCall(procName, exprList);
(procedureCall.func_name as method_call).dereferencing_value = new dot_node(new ident("PABCSystem"), new ident(procName));
return procedureCall;
}
/// <summary>
/// Создает узел вызова функции из PABCSystem
/// </summary>
/// <param name="funcName">Имя функции</param>
/// <param name="exprList">Параметры функции</param>
/// <returns></returns>
public static method_call CreateSystemFunctionCall(string funcName, params expression[] exprList)
{
return CreateMethodCall(funcName, "PABCSystem", exprList);
}
public static method_call CreateMethodCall(string funcName, string qualifier, params expression[] exprList)
{
var methodCall = CreateMethodCall(funcName, exprList);
methodCall.dereferencing_value = new dot_node(new ident(qualifier), new ident(funcName));
return methodCall;
}
public static procedure_call CreateProcedureCall(string procName, params expression[] exprList)
{
SyntaxTree.procedure_call pc = new SyntaxTree.procedure_call();
pc.func_name = CreateMethodCall(procName, exprList);
return pc;
}
private static method_call CreateMethodCall(string methodName, params expression[] exprList)
{
SyntaxTree.method_call mc = new SyntaxTree.method_call();
mc.dereferencing_value = new ident(methodName);
SyntaxTree.expression_list exl = new PascalABCCompiler.SyntaxTree.expression_list();
foreach (expression x in exprList)
exl.Add(x);
mc.parameters = exl;
return mc;
}
// From LamdaHelper
private static procedure_definition InternalCreateProcedureDefinitionNode(string methName, formal_parameters formalPars, bool classKeyword, statement procBody, SourceContext sc)
{
return SyntaxTreeNodesConstructor.CreateProcedureDefinitionNode(new method_name(methName),
formalPars,
false,
classKeyword,
procBody,
sc);
}
public static procedure_definition CreateProcedureDefinitionNode(string methName, formal_parameters formalPars, bool classKeyword, statement procBody, SourceContext sc)
{
return InternalCreateProcedureDefinitionNode(methName, formalPars, classKeyword, procBody, sc);
}
public static procedure_definition CreateProcedureDefinitionNode(string methName, formal_parameters formalPars, bool classKeyword, statement procBody)
{
return InternalCreateProcedureDefinitionNode(methName, formalPars, classKeyword, procBody, null);
}
private static procedure_definition InternalCreateFunctionDefinitionNode(string methName, formal_parameters formalPars, bool classKeyword, statement procBody, type_definition returnType, SourceContext sc)
{
return SyntaxTreeNodesConstructor.CreateFunctionDefinitionNode(new method_name(methName),
formalPars,
false,
classKeyword,
procBody,
returnType,
sc);
}
public static procedure_definition CreateFunctionDefinitionNode(string methName, formal_parameters formalPars, bool classKeyword, statement procBody, type_definition returnType, SourceContext sc)
{
return InternalCreateFunctionDefinitionNode(methName, formalPars, classKeyword, procBody, returnType, sc);
}
public static procedure_definition CreateFunctionDefinitionNode(string methName, formal_parameters formalPars, bool classKeyword, statement procBody, type_definition returnType)
{
return InternalCreateFunctionDefinitionNode(methName, formalPars, classKeyword, procBody, returnType, null);
}
// From !LamdaHelper
public static declarations CreateDeclarations(params declaration[] decls)
{
declarations res = new declarations();
foreach (declaration x in decls)
res.Add(x);
return res;
}
public static statement_list CreateStatementList(params statement[] stmts)
{
statement_list res = new statement_list();
foreach (statement x in stmts)
res.Add(x);
return res;
}
}
public class SyntaxTreeBuilder public class SyntaxTreeBuilder
{ {
public static SourceContext BuildGenSC = new SourceContext(0, 777777, 0, 0, 0, 0); public static SourceContext BuildGenSC = new SourceContext(0, 777777, 0, 0, 0, 0);

View file

@ -4,8 +4,6 @@ using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using PascalABCCompiler.SyntaxTree; using PascalABCCompiler.SyntaxTree;
using PascalABCCompiler.TreeConversion;
using PascalABCCompiler.TreeConverter;
namespace SyntaxVisitors.PatternsVisitors namespace SyntaxVisitors.PatternsVisitors
{ {
@ -86,11 +84,11 @@ namespace SyntaxVisitors.PatternsVisitors
{ {
private enum PatternLocation { Unknown, IfCondition, Assign } private enum PatternLocation { Unknown, IfCondition, Assign }
private const string DeconstructMethodName = compiler_string_consts.deconstruct_method_name; private const string DeconstructMethodName = "deconstruct";
private const string IsTestMethodName = compiler_string_consts.is_test_function_name; private const string IsTestMethodName = "__TypeCheckAndAssignForIsMatch";
private const string WildCardsTupleEqualFunctionName = compiler_string_consts.wild_cards_tuple_equal_function_name; private const string WildCardsTupleEqualFunctionName = "__WildCardsTupleEqual";
private const string SeqFunctionName = compiler_string_consts.seq_function_name; private const string SeqFunctionName = "Seq";
private const string CountPropertyName = compiler_string_consts.count_property_name; private const string CountPropertyName = "Count";
private const string GeneratedPatternNamePrefix = "<>pattern"; private const string GeneratedPatternNamePrefix = "<>pattern";
private const string GeneratedDeconstructParamPrefix = "<>deconstructParam"; private const string GeneratedDeconstructParamPrefix = "<>deconstructParam";
private const string GeneratedVisitElseBranchVariableName = "<>visitElseBranch"; private const string GeneratedVisitElseBranchVariableName = "<>visitElseBranch";

View file

@ -1,5 +1,4 @@
using PascalABCCompiler.SyntaxTree; using PascalABCCompiler.SyntaxTree;
using PascalABCCompiler.TreeConverter;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -9,6 +8,8 @@ namespace SyntaxVisitors
{ {
public class SingleDeconstructChecker : BaseEnterExitVisitor public class SingleDeconstructChecker : BaseEnterExitVisitor
{ {
private const string DeconstructMethodName = "deconstruct"; // в трех местах эту константу - если менять
private int deconstructCount = 0; private int deconstructCount = 0;
private bool isInClass = false; private bool isInClass = false;
@ -34,7 +35,7 @@ namespace SyntaxVisitors
if (!isInClass) if (!isInClass)
return; return;
if (_method_name?.meth_name?.name?.ToLower() == compiler_string_consts.deconstruct_method_name) if (_method_name?.meth_name?.name?.ToLower() == DeconstructMethodName)
deconstructCount++; deconstructCount++;
if (deconstructCount > 1) if (deconstructCount > 1)

View file

@ -6,7 +6,6 @@ using System.Linq;
using System.Text; using System.Text;
using PascalABCCompiler.SyntaxTree; using PascalABCCompiler.SyntaxTree;
using PascalABCCompiler.TreeRealization;
namespace SyntaxVisitors.SugarVisitors namespace SyntaxVisitors.SugarVisitors
{ {
@ -71,7 +70,7 @@ namespace SyntaxVisitors.SugarVisitors
{ {
if (param is unpacked_list_of_ident_or_list unpacked_param) if (param is unpacked_list_of_ident_or_list unpacked_param)
{ {
var lam_inft = new lambda_inferred_type(new lambda_any_type_node()); var lam_inft = new lambda_inferred_type(new lambda_any_type_node_syntax());
var param_id = CreateIdent(fld.source_context); var param_id = CreateIdent(fld.source_context);
var idlist = new ident_list(param_id, unpacked_param.source_context); var idlist = new ident_list(param_id, unpacked_param.source_context);
var typed_pars = new typed_parameters(idlist, lam_inft, parametr_kind.none, null, unpacked_param.source_context); var typed_pars = new typed_parameters(idlist, lam_inft, parametr_kind.none, null, unpacked_param.source_context);
@ -83,7 +82,7 @@ namespace SyntaxVisitors.SugarVisitors
} }
else if (param is ident id) else if (param is ident id)
{ {
var lam_inft = new lambda_inferred_type(new lambda_any_type_node()); var lam_inft = new lambda_inferred_type(new lambda_any_type_node_syntax());
var idlist = new ident_list(id,id.source_context); var idlist = new ident_list(id,id.source_context);
var typed_pars = new typed_parameters(idlist, lam_inft); var typed_pars = new typed_parameters(idlist, lam_inft);
fld.formal_parameters.Add(typed_pars, fld.source_context); fld.formal_parameters.Add(typed_pars, fld.source_context);

View file

@ -116,10 +116,6 @@
<Project>{c2cac65a-b2ae-4ccc-b067-e6b8e75df73a}</Project> <Project>{c2cac65a-b2ae-4ccc-b067-e6b8e75df73a}</Project>
<Name>SyntaxTree</Name> <Name>SyntaxTree</Name>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\TreeConverter\TreeConverter.csproj">
<Project>{1C9C945A-586D-42A2-A06B-65D84FA7FF78}</Project>
<Name>TreeConverter</Name>
</ProjectReference>
<ProjectReference Include="..\Yield\YieldHelpers\YieldHelpers.csproj"> <ProjectReference Include="..\Yield\YieldHelpers\YieldHelpers.csproj">
<Project>{ce5c55c2-a11c-4e94-a9fa-3fc6ca3e4c09}</Project> <Project>{ce5c55c2-a11c-4e94-a9fa-3fc6ca3e4c09}</Project>
<Name>YieldHelpers</Name> <Name>YieldHelpers</Name>

View file

@ -459,7 +459,7 @@ namespace PascalABCCompiler.TreeConverter
}*/ }*/
} }
#endregion #endregion
/*
#region Генерация новых узлов синтаксического дерева #region Генерация новых узлов синтаксического дерева
/// <summary> /// <summary>
/// Класс для генерации новых узлов синтаксического дерева /// Класс для генерации новых узлов синтаксического дерева
@ -549,5 +549,6 @@ namespace PascalABCCompiler.TreeConverter
} }
} }
#endregion #endregion
*/
} }
} }

View file

@ -11,6 +11,7 @@ using PascalABCCompiler.TreeConverter;
namespace PascalABCCompiler.TreeConversion namespace PascalABCCompiler.TreeConversion
{ {
/*
public class SubtreeCreator public class SubtreeCreator
{ {
syntax_tree_visitor _syntaxTreeVisitor; syntax_tree_visitor _syntaxTreeVisitor;
@ -278,4 +279,5 @@ namespace PascalABCCompiler.TreeConversion
return res; return res;
} }
} }
*/
} }

View file

@ -373,11 +373,11 @@ namespace PascalABCCompiler.TreeConverter
public static string ienumerable_auto_type_name = "IEnumerableAutoType"; // SSM 05.07.16 - тип, который определяется на этапе компиляции при первом присваивании public static string ienumerable_auto_type_name = "IEnumerableAutoType"; // SSM 05.07.16 - тип, который определяется на этапе компиляции при первом присваивании
public static string recort_printable_name_template = "record{0}end"; public static string recort_printable_name_template = "record{0}end";
public static string set_name = "TypedSet"; public static string set_name = "TypedSet";
public const string deconstruct_method_name = "deconstruct"; public const string deconstruct_method_name = "deconstruct"; // Есть дубль - если менять здесь, то и в дубле!!
public const string is_test_function_name = "__TypeCheckAndAssignForIsMatch"; //public const string is_test_function_name = "__TypeCheckAndAssignForIsMatch";
public const string wild_cards_tuple_equal_function_name = "__WildCardsTupleEqual"; //public const string wild_cards_tuple_equal_function_name = "__WildCardsTupleEqual";
public const string seq_function_name = "Seq"; //public const string seq_function_name = "Seq";
public const string count_property_name = "Count"; //public const string count_property_name = "Count";
public static string bounded_array_printable_name_template = "array [{0}..{1}] of {2}"; public static string bounded_array_printable_name_template = "array [{0}..{1}] of {2}";
public static string array_printable_name_template = "array of {0}"; public static string array_printable_name_template = "array of {0}";
public static string multi_dim_array_printable_name_template = "array [{0}] of {1}"; public static string multi_dim_array_printable_name_template = "array [{0}] of {1}";