SF Prm Cmb для строк
This commit is contained in:
parent
6ef11f249c
commit
a53dcd9ed2
|
|
@ -15,7 +15,7 @@ internal static class RevisionClass
|
||||||
public const string Major = "3";
|
public const string Major = "3";
|
||||||
public const string Minor = "10";
|
public const string Minor = "10";
|
||||||
public const string Build = "2";
|
public const string Build = "2";
|
||||||
public const string Revision = "3589";
|
public const string Revision = "3593";
|
||||||
|
|
||||||
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;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
%MINOR%=10
|
%MINOR%=10
|
||||||
%REVISION%=3589
|
%REVISION%=3593
|
||||||
%COREVERSION%=2
|
%COREVERSION%=2
|
||||||
%MAJOR%=3
|
%MAJOR%=3
|
||||||
|
|
|
||||||
14
InstallerSamples/WhatsNew/3_10_2/SquareBrForArr.pas
Normal file
14
InstallerSamples/WhatsNew/3_10_2/SquareBrForArr.pas
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
begin
|
||||||
|
var a := [1,2,3]; // по умолчанию - массив
|
||||||
|
Println(a,TypeName(a));
|
||||||
|
var s := [2..4]; // если есть диапазон, то множество
|
||||||
|
Println(s,TypeName(s));
|
||||||
|
var s1: set of byte := [3,4,5]; // множество инициализируется значениями в []
|
||||||
|
Println(s1,TypeName(s1));
|
||||||
|
// Если один из операндов - множество, то результат - множество
|
||||||
|
Println(s + [1,2,3], s * [1,2,3], [1,2,3] - s, s - [1,2,3]);
|
||||||
|
// Это - операции с массивами
|
||||||
|
Println(a + [7,8,9], a * 3);
|
||||||
|
// Операция in для массива и для множества. Внешний вид одинаков
|
||||||
|
Println(5 in [3,5,7], 5 in [3..5,7]);
|
||||||
|
end.
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
//
|
//
|
||||||
// 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: LAPTOP-TE3HP881
|
||||||
// DateTime: 19.07.2024 12:42:46
|
// DateTime: 14.12.2024 15:20:04
|
||||||
// UserName: ?????????
|
// UserName: miks
|
||||||
// GPLEX input file <ABCPascal.lex>
|
// GPLEX input file <ABCPascal.lex>
|
||||||
// GPLEX frame file <embedded resource>
|
// GPLEX frame file <embedded resource>
|
||||||
//
|
//
|
||||||
|
|
@ -2193,7 +2193,7 @@ if (parserTools.buildTreeForFormatter)
|
||||||
parserTools.ParseDirective(yytext, CurrentLexLocation, out var directiveName, out var directiveParams);
|
parserTools.ParseDirective(yytext, CurrentLexLocation, out var directiveName, out var directiveParams);
|
||||||
var orgDirectiveName = directiveName;
|
var orgDirectiveName = directiveName;
|
||||||
|
|
||||||
if (directiveName == "") // сл<EFBFBD>?<3F>?ай п<>?с<>?ой ди<D0B4>?ек<D0B5>?ив<D0B8>?
|
if (directiveName == "") // Ñ<EFBFBD>лÑ?Ñ?ай пÑ?Ñ<>Ñ?ой диÑ?екÑ?ивÑ?
|
||||||
break;
|
break;
|
||||||
|
|
||||||
directiveName = directiveName.ToUpper();
|
directiveName = directiveName.ToUpper();
|
||||||
|
|
@ -2290,7 +2290,7 @@ BEGIN(INITIAL);
|
||||||
parserTools.ParseDirective(yytext, CurrentLexLocation, out directiveName, out directiveParams);
|
parserTools.ParseDirective(yytext, CurrentLexLocation, out directiveName, out directiveParams);
|
||||||
orgDirectiveName = directiveName;
|
orgDirectiveName = directiveName;
|
||||||
|
|
||||||
if (directiveName == "") // сл<EFBFBD>?<3F>?ай п<>?с<>?ой ди<D0B4>?ек<D0B5>?ив<D0B8>?
|
if (directiveName == "") // Ñ<EFBFBD>лÑ?Ñ?ай пÑ?Ñ<>Ñ?ой диÑ?екÑ?ивÑ?
|
||||||
break;
|
break;
|
||||||
|
|
||||||
directiveName = directiveName.ToUpper();
|
directiveName = directiveName.ToUpper();
|
||||||
|
|
|
||||||
|
|
@ -140,7 +140,7 @@
|
||||||
%type <stn> program_header
|
%type <stn> program_header
|
||||||
%type <stn> parameter_decl
|
%type <stn> parameter_decl
|
||||||
%type <stn> parameter_decl_list property_parameter_list
|
%type <stn> parameter_decl_list property_parameter_list
|
||||||
%type <ex> const_set
|
%type <ex> const_set pascal_set_const
|
||||||
%type <ex> question_expr question_constexpr new_question_expr
|
%type <ex> question_expr question_constexpr new_question_expr
|
||||||
%type <ex> record_const const_field_list_1 const_field_list
|
%type <ex> record_const const_field_list_1 const_field_list
|
||||||
%type <stn> const_field
|
%type <stn> const_field
|
||||||
|
|
@ -987,9 +987,9 @@ const_factor
|
||||||
// $$ = new roof_dereference($2 as addressed_value, @$);
|
// $$ = new roof_dereference($2 as addressed_value, @$);
|
||||||
// }
|
// }
|
||||||
;
|
;
|
||||||
|
|
||||||
const_set
|
pascal_set_const
|
||||||
: tkSquareOpen elem_list tkSquareClose
|
: tkSquareOpen elem_list tkSquareClose
|
||||||
{
|
{
|
||||||
// Если elem_list пуст или содержит диапазон, то это множество, иначе массив. С PascalABC.NET 3.10
|
// Если elem_list пуст или содержит диапазон, то это множество, иначе массив. С PascalABC.NET 3.10
|
||||||
/*var is_set = false;
|
/*var is_set = false;
|
||||||
|
|
@ -1002,6 +1002,13 @@ const_set
|
||||||
$$ = new pascal_set_constant($2 as expression_list, @$);
|
$$ = new pascal_set_constant($2 as expression_list, @$);
|
||||||
//else $$ = new array_const_new($2 as expression_list, @$);
|
//else $$ = new array_const_new($2 as expression_list, @$);
|
||||||
}
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
const_set
|
||||||
|
: pascal_set_const
|
||||||
|
{
|
||||||
|
$$ = $1;
|
||||||
|
}
|
||||||
| tkVertParen elem_list tkVertParen
|
| tkVertParen elem_list tkVertParen
|
||||||
{
|
{
|
||||||
$$ = new array_const_new($2 as expression_list, @$);
|
$$ = new array_const_new($2 as expression_list, @$);
|
||||||
|
|
@ -2915,6 +2922,11 @@ proc_call
|
||||||
{
|
{
|
||||||
$$ = new procedure_call($1 as addressed_value, $1 is ident, @$);
|
$$ = new procedure_call($1 as addressed_value, $1 is ident, @$);
|
||||||
}
|
}
|
||||||
|
/*| pascal_set_const tkPoint identifier_keyword_operatorname
|
||||||
|
{
|
||||||
|
var abcd = new dot_node($1 as addressed_value, $3 as addressed_value, @$);
|
||||||
|
$$ = new procedure_call(abcd as addressed_value, abcd is ident, @$);
|
||||||
|
} */
|
||||||
;
|
;
|
||||||
|
|
||||||
goto_stmt
|
goto_stmt
|
||||||
|
|
@ -4164,6 +4176,8 @@ factor_without_unary_op
|
||||||
| var_reference
|
| var_reference
|
||||||
{ $$ = $1; }
|
{ $$ = $1; }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
factor
|
factor
|
||||||
: tkNil
|
: tkNil
|
||||||
|
|
@ -4175,19 +4189,18 @@ factor
|
||||||
{ $$ = $1; }
|
{ $$ = $1; }
|
||||||
| default_expr
|
| default_expr
|
||||||
{ $$ = $1; }
|
{ $$ = $1; }
|
||||||
| tkSquareOpen elem_list tkSquareClose
|
| pascal_set_const
|
||||||
{
|
{
|
||||||
// Если elem_list пуст или содержит диапазон, то это множество, иначе массив. С PascalABC.NET 3.10
|
$$ = $1;
|
||||||
/*var is_set = false;
|
|
||||||
var el = $2 as expression_list;
|
|
||||||
if (el == null || el.Count == 0)
|
|
||||||
is_set = true;
|
|
||||||
else if (el.expressions.Count(x => x is diapason_expr_new) > 0)
|
|
||||||
is_set = true;
|
|
||||||
if (is_set)*/
|
|
||||||
$$ = new pascal_set_constant($2 as expression_list, @$);
|
|
||||||
//else $$ = new array_const_new($2 as expression_list, @$);
|
|
||||||
}
|
}
|
||||||
|
| factor tkPoint identifier_keyword_operatorname
|
||||||
|
{
|
||||||
|
$$ = new dot_node($1 as addressed_value, $3 as addressed_value, @$);
|
||||||
|
}
|
||||||
|
| factor tkRoundOpen optional_expr_list_func_param tkRoundClose
|
||||||
|
{
|
||||||
|
$$ = new method_call($1 as addressed_value,$3 as expression_list, @$);
|
||||||
|
}
|
||||||
| tkNot factor
|
| tkNot factor
|
||||||
{
|
{
|
||||||
$$ = new un_expr($2, $1.type, @$);
|
$$ = new un_expr($2, $1.type, @$);
|
||||||
|
|
@ -4375,6 +4388,7 @@ variable
|
||||||
}
|
}
|
||||||
| variable_or_literal_or_number tkSquareOpen expr_list tkSquareClose
|
| variable_or_literal_or_number tkSquareOpen expr_list tkSquareClose
|
||||||
{
|
{
|
||||||
|
//$$ = NewIndexerOrSlice($1 as addressed_value,$3 as expression_list,@$);
|
||||||
var el = $3 as expression_list; // SSM 10/03/16
|
var el = $3 as expression_list; // SSM 10/03/16
|
||||||
if (el.Count==1 && el.expressions[0] is format_expr)
|
if (el.Count==1 && el.expressions[0] is format_expr)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -14,7 +14,6 @@
|
||||||
<name value="const_elem" />
|
<name value="const_elem" />
|
||||||
<name value="record_const" />
|
<name value="record_const" />
|
||||||
<name value="const_term" />
|
<name value="const_term" />
|
||||||
<name value="const_set" />
|
|
||||||
<name value="relop_expr" />
|
<name value="relop_expr" />
|
||||||
<name value="as_is_expr" />
|
<name value="as_is_expr" />
|
||||||
<name value="term" />
|
<name value="term" />
|
||||||
|
|
@ -43,10 +42,7 @@
|
||||||
<name value="const_elem_list" />
|
<name value="const_elem_list" />
|
||||||
<name value="const_elem_list1" />
|
<name value="const_elem_list1" />
|
||||||
<name value="head_compiler_directives" />
|
<name value="head_compiler_directives" />
|
||||||
<name value="template_param_list" />
|
|
||||||
<name value="one_or_some_attribute" />
|
<name value="one_or_some_attribute" />
|
||||||
<name value="enumeration_id_list" />
|
|
||||||
<name value="simple_type_list" />
|
|
||||||
<name value="class_attributes" />
|
<name value="class_attributes" />
|
||||||
<name value="class_attributes1" />
|
<name value="class_attributes1" />
|
||||||
<name value="base_classes_names_list" />
|
<name value="base_classes_names_list" />
|
||||||
|
|
@ -74,9 +70,7 @@
|
||||||
<name value="program_param" />
|
<name value="program_param" />
|
||||||
<name value="used_unit_name" />
|
<name value="used_unit_name" />
|
||||||
<name value="abc_decl_sect" />
|
<name value="abc_decl_sect" />
|
||||||
<name value="template_param" />
|
|
||||||
<name value="one_attribute" />
|
<name value="one_attribute" />
|
||||||
<name value="simple_type_or_" />
|
|
||||||
<name value="class_attribute" />
|
<name value="class_attribute" />
|
||||||
<name value="base_class_name" />
|
<name value="base_class_name" />
|
||||||
<name value="where_part" />
|
<name value="where_part" />
|
||||||
|
|
@ -103,7 +97,6 @@
|
||||||
<name value="assign_operator" />
|
<name value="assign_operator" />
|
||||||
</tag>
|
</tag>
|
||||||
<tag value="Константные выражения">
|
<tag value="Константные выражения">
|
||||||
<name value="const_set" />
|
|
||||||
<name value="const_factor" />
|
<name value="const_factor" />
|
||||||
<name value="const_term" />
|
<name value="const_term" />
|
||||||
<name value="unsigned_number" />
|
<name value="unsigned_number" />
|
||||||
|
|
@ -137,12 +130,10 @@
|
||||||
<name value="literal_list" />
|
<name value="literal_list" />
|
||||||
</tag>
|
</tag>
|
||||||
<tag value="Описания">
|
<tag value="Описания">
|
||||||
<name value="simple_type_decl" />
|
|
||||||
<name value="only_const_decl" />
|
<name value="only_const_decl" />
|
||||||
<name value="const_decl" />
|
<name value="const_decl" />
|
||||||
<name value="type_decl" />
|
<name value="type_decl" />
|
||||||
<name value="const_field" />
|
<name value="const_field" />
|
||||||
<name value="proc_type_decl" />
|
|
||||||
<name value="method_or_property_decl" />
|
<name value="method_or_property_decl" />
|
||||||
<name value="simple_field_or_const_definition" />
|
<name value="simple_field_or_const_definition" />
|
||||||
<name value="field_definition" />
|
<name value="field_definition" />
|
||||||
|
|
@ -174,9 +165,6 @@
|
||||||
<name value="unit_name" />
|
<name value="unit_name" />
|
||||||
<name value="label_name" />
|
<name value="label_name" />
|
||||||
<name value="const_field_name" />
|
<name value="const_field_name" />
|
||||||
<name value="type_decl_identifier" />
|
|
||||||
<name value="template_identifier_with_equal" />
|
|
||||||
<name value="simple_type_identifier" />
|
|
||||||
<name value="proc_name" />
|
<name value="proc_name" />
|
||||||
<name value="func_name" />
|
<name value="func_name" />
|
||||||
<name value="func_class_name_ident" />
|
<name value="func_class_name_ident" />
|
||||||
|
|
@ -220,22 +208,8 @@
|
||||||
<name value="func_header" />
|
<name value="func_header" />
|
||||||
</tag>
|
</tag>
|
||||||
<tag value="Типы">
|
<tag value="Типы">
|
||||||
<name value="type_decl_type" />
|
|
||||||
<name value="type_ref" />
|
|
||||||
<name value="template_type" />
|
|
||||||
<name value="pointer_type" />
|
|
||||||
<name value="structured_type" />
|
|
||||||
<name value="unsized_array_type" />
|
|
||||||
<name value="set_type" />
|
|
||||||
<name value="file_type" />
|
|
||||||
<name value="string_type" />
|
|
||||||
<name value="procedural_type" />
|
|
||||||
<name value="object_type" />
|
<name value="object_type" />
|
||||||
<name value="record_type" />
|
<name value="record_type" />
|
||||||
<name value="proc_type_decl" />
|
|
||||||
<name value="sequence_type" />
|
|
||||||
<name value="enumeration_id" />
|
|
||||||
<name value="template_param" />
|
|
||||||
</tag>
|
</tag>
|
||||||
<tag value="Ключевые слова">
|
<tag value="Ключевые слова">
|
||||||
<name value="meth_modificator" />
|
<name value="meth_modificator" />
|
||||||
|
|
@ -250,19 +224,15 @@
|
||||||
</tag>
|
</tag>
|
||||||
<tag value="new_expr" />
|
<tag value="new_expr" />
|
||||||
<tag value="TemplateTypeName">
|
<tag value="TemplateTypeName">
|
||||||
<name value="type_decl_identifier" />
|
|
||||||
<name value="template_identifier_with_equal" />
|
|
||||||
<name value="func_name_ident" />
|
<name value="func_name_ident" />
|
||||||
</tag>
|
</tag>
|
||||||
<tag value="FuncName">
|
<tag value="FuncName">
|
||||||
<name value="func_name" />
|
<name value="func_name" />
|
||||||
<name value="simple_type_identifier" />
|
|
||||||
</tag>
|
</tag>
|
||||||
<tag value="Проблема с атрибутами">
|
<tag value="Проблема с атрибутами">
|
||||||
<name value="type_decl_sect" />
|
<name value="type_decl_sect" />
|
||||||
<name value="type_decl" />
|
<name value="type_decl" />
|
||||||
<name value="attribute_declarations" />
|
<name value="attribute_declarations" />
|
||||||
<name value="simple_type_decl" />
|
|
||||||
</tag>
|
</tag>
|
||||||
<tag value="Лямбда-выражения">
|
<tag value="Лямбда-выражения">
|
||||||
<name value="full_lambda_fp_list" />
|
<name value="full_lambda_fp_list" />
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,19 @@
|
||||||
lex=ABCPascal.lex
|
lex=ABCPascal.lex
|
||||||
yacc=ABCPascal.y
|
yacc=ABCPascal.y
|
||||||
lexGen=D:\PABC_Git\Parsers\PascalABCParserNewSaushkin\GPLex_GPPG\Gplex.exe
|
lexGen=D:\PABC_GIT\pascalabcnet\Parsers\PascalABCParserNewSaushkin\GPLex_GPPG\Gplex.exe
|
||||||
yaccGen=D:\PABC_Git\Parsers\PascalABCParserNewSaushkin\GPLex_GPPG\gppg.exe
|
yaccGen=D:\PABC_GIT\pascalabcnet\Parsers\PascalABCParserNewSaushkin\GPLex_GPPG\gppg.exe
|
||||||
lexGenOpt=/unicode
|
lexGenOpt=/unicode
|
||||||
yaccGenOpt=/gplex
|
yaccGenOpt=/gplex
|
||||||
useCustomScript
|
|
||||||
script=
|
script=
|
||||||
"D:\PABC_Git\Parsers\PascalABCParserNewSaushkin\GPLex_GPPG\gplex.exe" /unicode "D:\PABC_Git\Parsers\PascalABCParserNewSaushkin\ABCPascal.lex"
|
"D:\PABC_GIT\pascalabcnet\Parsers\PascalABCParserNewSaushkin\GPLex_GPPG\gplex.exe" /unicode "D:\PABC_Git\Parsers\PascalABCParserNewSaushkin\ABCPascal.lex"
|
||||||
|
|
||||||
|
"D:\PABC_GIT\pascalabcnet\Parsers\PascalABCParserNewSaushkin\GPLex_GPPG\gppg.exe" /no-lines /gplex "D:\PABC_Git\Parsers\PascalABCParserNewSaushkin\ABCPascal.y"
|
||||||
|
|
||||||
|
"D:\PABC_GIT\pascalabcnet\Parsers\PascalABCParserNewSaushkin\convert4.exe"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
"D:\PABC_Git\Parsers\PascalABCParserNewSaushkin\GPLex_GPPG\gppg.exe" /no-lines /gplex "D:\PABC_Git\Parsers\PascalABCParserNewSaushkin\ABCPascal.y"
|
|
||||||
|
|
||||||
"D:\PABC_Git\Parsers\PascalABCParserNewSaushkin\convert4.exe"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
// Copyright (c) Ivan Bondarev, Stanislav Mikhalkovich (for details please see \doc\copyright.txt)
|
// 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)
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||||
using System;
|
using System;
|
||||||
|
using System.Linq;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using QUT.Gppg;
|
using QUT.Gppg;
|
||||||
|
|
@ -566,6 +567,52 @@ namespace Languages.Pascal.Frontend.Core
|
||||||
return sl;
|
return sl;
|
||||||
}/**/
|
}/**/
|
||||||
|
|
||||||
|
public expression NewIndexerOrSlice(addressed_value av, expression_list el, LexLocation loc)
|
||||||
|
{
|
||||||
|
if (el.Count == 1 && el.expressions[0] is format_expr)
|
||||||
|
{
|
||||||
|
var fe = el.expressions[0] as format_expr;
|
||||||
|
if (!parserTools.buildTreeForFormatter)
|
||||||
|
{
|
||||||
|
if (fe.expr == null)
|
||||||
|
fe.expr = new int32_const(int.MaxValue,el.source_context);
|
||||||
|
if (fe.format1 == null)
|
||||||
|
fe.format1 = new int32_const(int.MaxValue, el.source_context);
|
||||||
|
}
|
||||||
|
return new slice_expr(av, fe.expr, fe.format1, fe.format2, el.source_context);
|
||||||
|
}
|
||||||
|
// многомерные срезы
|
||||||
|
else if (el.expressions.Any(e => e is format_expr))
|
||||||
|
{
|
||||||
|
// Срезы многомерных массивов разрешены только для массивов размерности < 5
|
||||||
|
if (el.expressions.Count > 4)
|
||||||
|
parserTools.AddErrorFromResource("SLICES_OF MULTIDIMENSIONAL_ARRAYS_ALLOW_ONLY_FOR_RANK_LT_5",loc);
|
||||||
|
var ll = new List<Tuple<expression, expression, expression>>();
|
||||||
|
foreach (var ex in el.expressions)
|
||||||
|
{
|
||||||
|
if (ex is format_expr fe)
|
||||||
|
{
|
||||||
|
if (fe.expr == null)
|
||||||
|
fe.expr = new int32_const(int.MaxValue, fe.source_context);
|
||||||
|
if (fe.format1 == null)
|
||||||
|
fe.format1 = new int32_const(int.MaxValue, fe.source_context);
|
||||||
|
if (fe.format2 == null)
|
||||||
|
fe.format2 = new int32_const(1, fe.source_context);
|
||||||
|
ll.Add(Tuple.Create(fe.expr, fe.format1, fe.format2));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// скалярное значение вместо среза
|
||||||
|
ll.Add(Tuple.Create(ex, (expression)new int32_const(0, ex.source_context), (expression)new int32_const(int.MaxValue, ex.source_context)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var sle = new slice_expr(av, null, null, null,loc);
|
||||||
|
sle.slices = ll;
|
||||||
|
return sle;
|
||||||
|
}
|
||||||
|
else return new indexer(av, el, loc);
|
||||||
|
}
|
||||||
|
|
||||||
public procedure_definition CreateAndAddToClassReadFunc(expression ex, ident id, SourceContext sc)
|
public procedure_definition CreateAndAddToClassReadFunc(expression ex, ident id, SourceContext sc)
|
||||||
{
|
{
|
||||||
var fd = SyntaxTreeBuilder.BuildShortFuncDefinition(new formal_parameters(), null, new method_name(id.name, sc), new no_type(), ex, sc);
|
var fd = SyntaxTreeBuilder.BuildShortFuncDefinition(new formal_parameters(), null, new method_name(id.name, sc), new no_type(), ex, sc);
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
cls
|
cls
|
||||||
GPLex_GPPG\gplex.exe /unicode ABCPascal.lex
|
GPLex_GPPG\gplex.exe /unicode ABCPascal.lex
|
||||||
GPLex_GPPG\gppg.exe /no-lines /gplex ABCPascal.y
|
GPLex_GPPG\gppg.exe /report /no-lines /gplex ABCPascal.y
|
||||||
convert4.exe
|
convert4.exe
|
||||||
pause
|
pause
|
||||||
|
|
@ -1 +1 @@
|
||||||
3.10.1.3589
|
3.10.2.3593
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
!define VERSION '3.10.2.3589'
|
!define VERSION '3.10.2.3593'
|
||||||
|
|
|
||||||
|
|
@ -14832,30 +14832,31 @@ begin
|
||||||
Result := (Self[0], Self[1], Self[2], Self[3], Self[4], Self[5], v);
|
Result := (Self[0], Self[1], Self[2], Self[3], Self[4], Self[5], v);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
/// Выводит кортеж
|
/// Выводит кортеж на экран, после чего выводит пробел
|
||||||
procedure Print<T1, T2>(Self: (T1, T2)); extensionmethod := Print(Self);
|
procedure Print<T1, T2>(Self: (T1, T2)); extensionmethod := Print(Self);
|
||||||
/// Выводит кортеж
|
/// Выводит кортеж на экран, после чего выводит пробел
|
||||||
procedure Print<T1, T2, T3>(Self: (T1, T2, T3)); extensionmethod := Print(Self);
|
procedure Print<T1, T2, T3>(Self: (T1, T2, T3)); extensionmethod := Print(Self);
|
||||||
/// Выводит кортеж
|
/// Выводит кортеж на экран, после чего выводит пробел
|
||||||
procedure Print<T1, T2, T3, T4>(Self: (T1, T2, T3, T4)); extensionmethod := Print(Self);
|
procedure Print<T1, T2, T3, T4>(Self: (T1, T2, T3, T4)); extensionmethod := Print(Self);
|
||||||
/// Выводит кортеж
|
/// Выводит кортеж на экран, после чего выводит пробел
|
||||||
procedure Print<T1, T2, T3, T4, T5>(Self: (T1, T2, T3, T4, T5)); extensionmethod := Print(Self);
|
procedure Print<T1, T2, T3, T4, T5>(Self: (T1, T2, T3, T4, T5)); extensionmethod := Print(Self);
|
||||||
/// Выводит кортеж
|
/// Выводит кортеж на экран, после чего выводит пробел
|
||||||
procedure Print<T1, T2, T3, T4, T5, T6>(Self: (T1, T2, T3, T4, T5, T6)); extensionmethod := Print(Self);
|
procedure Print<T1, T2, T3, T4, T5, T6>(Self: (T1, T2, T3, T4, T5, T6)); extensionmethod := Print(Self);
|
||||||
/// Выводит кортеж
|
/// Выводит кортеж на экран, после чего выводит пробел
|
||||||
procedure Print<T1, T2, T3, T4, T5, T6, T7>(Self: (T1, T2, T3, T4, T5, T6, T7)); extensionmethod := Print(Self);
|
procedure Print<T1, T2, T3, T4, T5, T6, T7>(Self: (T1, T2, T3, T4, T5, T6, T7)); extensionmethod := Print(Self);
|
||||||
/// Выводит кортеж и переходит на новую строку
|
/// Выводит кортеж на экран и переходит на новую строку
|
||||||
procedure Println<T1, T2>(Self: (T1, T2)); extensionmethod := Println(Self);
|
procedure Println<T1, T2>(Self: (T1, T2)); extensionmethod := Println(Self);
|
||||||
/// Выводит кортеж и переходит на новую строку
|
/// Выводит кортеж на экран и переходит на новую строку
|
||||||
procedure Println<T1, T2, T3>(Self: (T1, T2, T3)); extensionmethod := Println(Self);
|
procedure Println<T1, T2, T3>(Self: (T1, T2, T3)); extensionmethod := Println(Self);
|
||||||
/// Выводит кортеж и переходит на новую строку
|
/// Выводит кортеж на экран и переходит на новую строку
|
||||||
procedure Println<T1, T2, T3, T4>(Self: (T1, T2, T3, T4)); extensionmethod := Println(Self);
|
procedure Println<T1, T2, T3, T4>(Self: (T1, T2, T3, T4)); extensionmethod := Println(Self);
|
||||||
/// Выводит кортеж и переходит на новую строку
|
/// Выводит кортеж на экран и переходит на новую строку
|
||||||
procedure Println<T1, T2, T3, T4, T5>(Self: (T1, T2, T3, T4, T5)); extensionmethod := Println(Self);
|
procedure Println<T1, T2, T3, T4, T5>(Self: (T1, T2, T3, T4, T5)); extensionmethod := Println(Self);
|
||||||
/// Выводит кортеж и переходит на новую строку
|
/// Выводит кортеж на экран и переходит на новую строку
|
||||||
procedure Println<T1, T2, T3, T4, T5, T6>(Self: (T1, T2, T3, T4, T5, T6)); extensionmethod := Println(Self);
|
procedure Println<T1, T2, T3, T4, T5, T6>(Self: (T1, T2, T3, T4, T5, T6)); extensionmethod := Println(Self);
|
||||||
/// Выводит кортеж и переходит на новую строку
|
/// Выводит кортеж на экран и переходит на новую строку
|
||||||
procedure Println<T1, T2, T3, T4, T5, T6, T7>(Self: (T1, T2, T3, T4, T5, T6, T7)); extensionmethod := Println(Self);
|
procedure Println<T1, T2, T3, T4, T5, T6, T7>(Self: (T1, T2, T3, T4, T5, T6, T7)); extensionmethod := Println(Self);
|
||||||
|
|
||||||
/// Преобразует кортеж элементов одного типа в массив
|
/// Преобразует кортеж элементов одного типа в массив
|
||||||
function ToArray<T>(Self: (T,T)): array of T; extensionmethod := |Self[0],Self[1]|;
|
function ToArray<T>(Self: (T,T)): array of T; extensionmethod := |Self[0],Self[1]|;
|
||||||
/// Преобразует кортеж элементов одного типа в массив
|
/// Преобразует кортеж элементов одного типа в массив
|
||||||
|
|
|
||||||
|
|
@ -127,10 +127,6 @@ begin
|
||||||
max := x
|
max := x
|
||||||
end;
|
end;
|
||||||
|
|
||||||
/// Возвращает все перестановки
|
|
||||||
function Prm<T>(Self: array of T): sequence of array of T; extensionmethod
|
|
||||||
:= Self.Permutations;
|
|
||||||
|
|
||||||
/// Возвращает все сочетания по m элементов
|
/// Возвращает все сочетания по m элементов
|
||||||
function Cmb<T>(Self: array of T; m: integer): sequence of array of T; extensionmethod
|
function Cmb<T>(Self: array of T; m: integer): sequence of array of T; extensionmethod
|
||||||
:= Self.Combinations(m);
|
:= Self.Combinations(m);
|
||||||
|
|
@ -281,42 +277,67 @@ procedure Tr<T>(a: array of T; transform: T->T) := a.Transform(transform);
|
||||||
function H<T>(Self: array of T): integer; extensionmethod := Self.High;
|
function H<T>(Self: array of T): integer; extensionmethod := Self.High;
|
||||||
|
|
||||||
/// Возвращает все перестановки множества элементов, заданного массивом
|
/// Возвращает все перестановки множества элементов, заданного массивом
|
||||||
function Prm<T>(Self: array of T): sequence of array of T; extensionmethod := Self.Permutations;
|
function Prm<T>(Self: array of T): sequence of array of T; extensionmethod
|
||||||
|
:= Self.Permutations;
|
||||||
|
|
||||||
/// Возвращает все перестановки множества элементов, заданного массивом
|
/// Возвращает все перестановки множества элементов, заданного массивом
|
||||||
function Prm<T>(Self: sequence of T): sequence of array of T; extensionmethod := Self.Permutations;
|
function Prm<T>(Self: sequence of T): sequence of array of T; extensionmethod
|
||||||
|
:= Self.Permutations;
|
||||||
|
|
||||||
/// Возвращает все частичные перестановки из n элементов по m
|
/// Возвращает все частичные перестановки из n элементов по m
|
||||||
function Prm<T>(Self: array of T; m: integer): sequence of array of T; extensionmethod := Self.Permutations(m);
|
function Prm<T>(Self: array of T; m: integer): sequence of array of T; extensionmethod
|
||||||
|
:= Self.Permutations(m);
|
||||||
|
|
||||||
/// Возвращает все частичные перестановки из n элементов по m
|
/// Возвращает все частичные перестановки из n элементов по m
|
||||||
function Prm<T>(Self: sequence of T; m: integer): sequence of array of T; extensionmethod := Self.Permutations(m);
|
function Prm<T>(Self: sequence of T; m: integer): sequence of array of T; extensionmethod
|
||||||
|
:= Self.Permutations(m);
|
||||||
|
|
||||||
|
/// Возвращает все перестановки букв в строке в виде последовательности строк
|
||||||
|
function Prm(Self: string): sequence of string; extensionmethod
|
||||||
|
:= Self.Permutations;
|
||||||
|
|
||||||
|
/// Возвращает все частичные перестановки букв строки по m символов в виде последовательности строк
|
||||||
|
function Prm(Self: string; m: integer): sequence of string; extensionmethod
|
||||||
|
:= Self.Permutations(m);
|
||||||
|
|
||||||
/// Возвращает n-тую декартову степень множества элементов, заданного массивом
|
/// Возвращает n-тую декартову степень множества элементов, заданного массивом
|
||||||
function Cart<T>(Self: array of T; n: integer): sequence of array of T; extensionmethod := Self.Cartesian(n);
|
function Cart<T>(Self: array of T; n: integer): sequence of array of T; extensionmethod
|
||||||
|
:= Self.Cartesian(n);
|
||||||
|
|
||||||
/// Возвращает n-тую декартову степень множества элементов, заданного массивом
|
/// Возвращает n-тую декартову степень множества элементов, заданного массивом
|
||||||
function Cart<T>(Self: sequence of T; n: integer): sequence of array of T; extensionmethod := Self.Cartesian(n);
|
function Cart<T>(Self: sequence of T; n: integer): sequence of array of T; extensionmethod
|
||||||
|
:= Self.Cartesian(n);
|
||||||
|
|
||||||
/// Возвращает n-тую декартову степень множества символов, заданного строкой
|
/// Возвращает n-тую декартову степень множества символов, заданного строкой
|
||||||
function Cart(Self: string; n: integer): sequence of string; extensionmethod := Self.CartesianPower(n);
|
function Cart(Self: string; n: integer): sequence of string; extensionmethod
|
||||||
|
:= Self.CartesianPower(n);
|
||||||
|
|
||||||
/// Возвращает декартово произведение последовательностей в виде последовательности пар
|
/// Возвращает декартово произведение последовательностей в виде последовательности пар
|
||||||
function Cart<T, T1>(Self: sequence of T; b: sequence of T1): sequence of (T, T1); extensionmethod := Self.Cartesian(b);
|
function Cart<T, T1>(Self: sequence of T; b: sequence of T1): sequence of (T, T1); extensionmethod
|
||||||
|
:= Self.Cartesian(b);
|
||||||
|
|
||||||
/// Возвращает декартово произведение последовательностей, проектируя каждую пару на значение
|
/// Возвращает декартово произведение последовательностей, проектируя каждую пару на значение
|
||||||
function Cart<T, T1, T2>(Self: sequence of T; b: sequence of T1; func: (T,T1)->T2): sequence of T2; extensionmethod := Self.Cartesian(b,func);
|
function Cart<T, T1, T2>(Self: sequence of T; b: sequence of T1; func: (T,T1)->T2): sequence of T2; extensionmethod
|
||||||
|
:= Self.Cartesian(b,func);
|
||||||
|
|
||||||
|
|
||||||
|
/// Возвращает все сочетания по m элементов
|
||||||
|
function Cmb<T>(Self: array of T; m: integer): sequence of array of T; extensionmethod
|
||||||
|
:= Self.Combinations(m);
|
||||||
|
|
||||||
|
/// Возвращает все сочетания по m элементов
|
||||||
|
function Cmb<T>(Self: sequence of T; m: integer): sequence of array of T; extensionmethod
|
||||||
|
:= Self.Combinations(m);
|
||||||
|
|
||||||
|
/// Возвращает все сочетания по m элементов
|
||||||
|
function Cmb(Self: string; m: integer): sequence of string; extensionmethod
|
||||||
|
:= Self.Combinations(m);
|
||||||
|
|
||||||
|
|
||||||
/// Возвращает исходную последовательность или одноэлементную последовательность если исходная последовательность пуста
|
/// Возвращает исходную последовательность или одноэлементную последовательность если исходная последовательность пуста
|
||||||
function DefIfE<T>(Self: sequence of T; def: T): sequence of T; extensionmethod := Self.DefaultIfEmpty(def);
|
function DefIfE<T>(Self: sequence of T; def: T): sequence of T; extensionmethod := Self.DefaultIfEmpty(def);
|
||||||
|
|
||||||
/// Возвращает все сочетания по m элементов
|
/// Выводит кортеж на экран, после чего выводит пробел
|
||||||
function Cmb<T>(Self: array of T; m: integer): sequence of array of T; extensionmethod := Self.Combinations(m);
|
|
||||||
|
|
||||||
/// Возвращает все сочетания по m элементов
|
|
||||||
function Cmb<T>(Self: sequence of T; m: integer): sequence of array of T; extensionmethod := Self.Combinations(m);
|
|
||||||
|
|
||||||
/// Выводит кортеж
|
|
||||||
function Pr<T1,T2>(Self: (T1,T2)): (T1,T2); extensionmethod;
|
function Pr<T1,T2>(Self: (T1,T2)): (T1,T2); extensionmethod;
|
||||||
begin
|
begin
|
||||||
Result := Self;
|
Result := Self;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue