x → x (стрелочка :))

|1,2,3|.Print
This commit is contained in:
Mikhalkovich Stanislav 2020-07-29 11:29:51 +03:00
parent b0ea0a30ca
commit 15a9445216
17 changed files with 1347 additions and 1257 deletions

View file

@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3";
public const string Minor = "6";
public const string Build = "3";
public const string Revision = "2603";
public const string Revision = "2604";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%MINOR%=6
%REVISION%=2603
%COREVERSION%=3
%REVISION%=2604
%MINOR%=6
%MAJOR%=3

File diff suppressed because it is too large Load diff

View file

@ -218,7 +218,9 @@ UNICODEARROW \x890
"<>" { yylval = new Union(); yylval.op = new op_type_node(Operators.NotEqual); return (int)Tokens.tkNotEqual; }
"^" { yylval = new Union(); yylval.op = new op_type_node(Operators.Deref); return (int)Tokens.tkDeref; }
"->" { yylval = new Union(); yylval.ti = new token_info(yytext); return (int)Tokens.tkArrow; }
\x2192 { yylval = new Union(); yylval.ti = new token_info(yytext); return (int)Tokens.tkArrow; }
\u2192 { yylval = new Union(); yylval.ti = new token_info(yytext); return (int)Tokens.tkArrow; }
\<\<expression\>\> { return (int)Tokens.tkParseModeExpression; }
\<\<statement\>\> { return (int)Tokens.tkParseModeStatement; }
\<\<type\>\> { return (int)Tokens.tkParseModeType; }

View file

@ -3934,10 +3934,6 @@ factor
{
$$ = new pascal_set_constant($2 as expression_list, @$);
}
| tkVertParen elem_list tkVertParen
{
$$ = new array_const_new($2 as expression_list, @$);
}
| tkNot factor
{
$$ = new un_expr($2, $1.type, @$);
@ -4110,6 +4106,10 @@ variable
}
$$ = new slice_expr_question($1 as addressed_value,fe.expr,fe.format1,fe.format2,@$);
}
| tkVertParen elem_list tkVertParen
{
$$ = new array_const_new($2 as expression_list, @$);
}
| variable tkRoundOpen optional_expr_list tkRoundClose
{
$$ = new method_call($1 as addressed_value,$3 as expression_list, @$);

File diff suppressed because it is too large Load diff

View file

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

View file

@ -1 +1 @@
3.6.3.2603
3.6.3.2604

View file

@ -1 +1 @@
!define VERSION '3.6.3.2603'
!define VERSION '3.6.3.2604'

View file

@ -4426,7 +4426,7 @@ namespace PascalABCCompiler.SyntaxTree
public void read_array_const_new(array_const_new _array_const_new)
{
read_expression(_array_const_new);
read_addressed_value(_array_const_new);
_array_const_new.elements = _read_node() as expression_list;
}

View file

@ -6917,7 +6917,7 @@ namespace PascalABCCompiler.SyntaxTree
public void write_array_const_new(array_const_new _array_const_new)
{
write_expression(_array_const_new);
write_addressed_value(_array_const_new);
if (_array_const_new.elements == null)
{
bw.Write((byte)0);

View file

@ -54037,7 +54037,7 @@ namespace PascalABCCompiler.SyntaxTree
///
///</summary>
[Serializable]
public partial class array_const_new : expression
public partial class array_const_new : addressed_value
{
///<summary>

View file

@ -3270,7 +3270,7 @@
<TagIndices />
</Tags>
</SyntaxNode>
<SyntaxNode Name="array_const_new" BaseName="expression">
<SyntaxNode Name="array_const_new" BaseName="addressed_value">
<Fields>
<SyntaxField Name="elements" SyntaxType="expression_list" />
</Fields>

View file

@ -1941,7 +1941,7 @@ function TryReadIntegerFromString(s: string; var from: integer; var res: integer
function TryReadRealFromString(s: string; var from: integer; var res: real): boolean;
///-procedure Val(s: string; var value: число; var err: integer);
/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value.
/// Преобразует строковое представление s целого или вещественного числа к числовому значению и записывает его в переменную value.
///Если преобразование успешно, то err=0, иначе err>0
procedure Val(s: string; var value: integer; var err: integer);
///--
@ -2122,6 +2122,9 @@ procedure Reverse(var s: string);
procedure Reverse(var s: string; index, count: integer);
/// Перемешивает динамический массив случайным образом
procedure Shuffle<T>(a: array of T);
/// Возвращает, совпадают ли массивы
function ArrEqual<T>(a, b: array of T): boolean;
/// Сравнивает матрицы на равенство
function MatrEqual<T>(a, b: array [,] of T): boolean;
/// Перемешивает список случайным образом
@ -2254,8 +2257,6 @@ function ReadArrReal(prompt: string; n: integer): array of real;
/// Выводит приглашение к вводу и возвращает массив из n строк, введенных с клавиатуры
function ReadArrString(prompt: string; n: integer): array of string;
/// Возвращает, совпадают ли массивы
function ArrEqual<T>(a, b: array of T): boolean;
// -----------------------------------------------------
//>> Подпрограммы для создания двумерных динамических массивов # Subroutines for matrixes

View file

@ -11,6 +11,7 @@ function RI64 := ReadInt64;
function RR := ReadReal;
function RC := ReadChar;
function RS := ReadString;
function RL := ReadLexem;
function RlnI := ReadlnInteger;
function RlnBI := ReadlnBigInteger;
@ -68,36 +69,126 @@ function Prln(Self: char): char; extensionmethod := Self.Println;
function Prln(Self: boolean): boolean; extensionmethod := Self.Println;
function Prln(Self: string): string; extensionmethod := Self.Println;
/// Записывает в min значение x если x<min
procedure ReMin(var min: integer; x: integer);
begin
if x < min then
min := x
end;
/// Записывает в max значение x если x>max
procedure ReMax(var max: integer; x: integer);
begin
if x > max then
max := x
end;
/// Записывает в min значение x если x<min
procedure ReMin(var min: real; x: real);
begin
if x < min then
min := x
end;
/// Записывает в max значение x если x>max
procedure ReMax(var max: real; x: real);
begin
if x > max then
max := x
end;
/// Преобразует строку в целое
function ToI(Self: string); extensionmethod := Self.ToInteger;
/// Преобразует строку в вещественное
function ToR(Self: string); extensionmethod := Self.ToReal;
/// Преобразует строку в массив целых
function ToIs(Self: string); extensionmethod := Self.ToIntegers;
/// Преобразует строку в массив вещественных
function ToRs(Self: string); extensionmethod := Self.ToReals;
function operator-(c,c1: char): integer; extensionmethod := Ord(c) - Ord(c1);
/// Возвращает длину строки
function Len(Self: string): integer; extensionmethod := Self.Length;
/// Возвращает длину массива
function Len<T>(Self: array of T): integer; extensionmethod := Self.Length;
/// Возвращает среднее элементов последовательности
function Av(Self: sequence of integer): real; extensionmethod := Self.Average;
/// Возвращает среднее элементов последовательности
function Av(Self: sequence of real): real; extensionmethod := Self.Average;
function Dst<T>(Self: sequence of T): sequence of T; extensionmethod := Self.Distinct;
function Ord<T>(Self: sequence of T): sequence of T; extensionmethod := Self.Order;
function OrdD<T>(Self: sequence of T): sequence of T; extensionmethod := Self.OrderDescending;
/// Преобразует последовательность в строку
function Str<T>(Self: sequence of T): string; extensionmethod := Self.JoinToString;
/// Выводит последовательность, разделяя элементы пробелами
function Pr<T>(Self: sequence of T): sequence of T; extensionmethod := Self.Print;
/// Выводит последовательность, разделяя элементы пробелами, и переходит на новую строку
function Prln<T>(Self: sequence of T): sequence of T; extensionmethod := Self.Println;
/// Возвращает инвертированную последовательность
function Rev<T>(Self: sequence of T): sequence of T; extensionmethod := Self.Reverse;
/// Преобразует последовательность, используя функцию transform
function Sel<T,T1>(Self: sequence of T; transform: T->T1): sequence of T1; extensionmethod := Self.Select(transform);
/// Фильтрует последовательность по условию cond
function Wh<T>(Self: sequence of T; cond: T->boolean): sequence of T; extensionmethod := Self.Where(cond);
/// Преобразует последовательность в массив
function ToA<T>(Self: sequence of T): array of T; extensionmethod := Self.ToArray;
/// Преобразует последовательность в список
function ToL<T>(Self: sequence of T): List<T>; extensionmethod := Self.ToList;
/// Преобразует последовательность в HashSet
function ToHS<T>(Self: sequence of T): HashSet<T>; extensionmethod := Self.ToHashSet;
/// Преобразует последовательность в SortedSet
function ToSS<T>(Self: sequence of T): SortedSet<T>; extensionmethod := Self.ToSortedSet;
/// Преобразует последовательность в HashSet
function HS<T>(s: sequence of T): HashSet<T> := s.ToHashSet;
/// Преобразует последовательность в SortedSet
function SS<T>(s: sequence of T): SortedSet<T> := s.ToSortedSet;
/// Инвертирует последовательность
procedure Rev<T>(a: array of T) := Reverse(a);
/// Возвращает индекс минимального элемента
function IMin<T>(Self: array of T): integer; extensionmethod; where T: IComparable<T>;
begin
Result := Self.IndexMin;
end;
/// Возвращает индекс максимального элемента
function IMax<T>(Self: array of T): integer; extensionmethod; where T: IComparable<T>;
begin
Result := Self.IndexMax;
end;
/// Возвращает True если массивы равны
function Eq<T>(Self,b: array of T): boolean; extensionmethod := Self.ArrEqual(b);
/// Возвращает в виде массива все элементы, удовлетворяющие cond
function Filt<T>(Self: array of T; cond: T->boolean): array of T; extensionmethod := Self.FindAll(cond);
/// Возвращает массив с элементами, преобразованными по правилу transform
function Tr<T>(Self: array of T; transform: T->T): array of T; extensionmethod := Self.ConvertAll(transform);
/// Преобразует массив по правилу transform
procedure Tr<T>(a: array of T; transform: T->T) := a.Transform(transform);
/// Возвращает индекс последнего элемента массива
function H<T>(Self: array of T): integer; extensionmethod := Self.High;
end.

View file

@ -1941,7 +1941,7 @@ function TryReadIntegerFromString(s: string; var from: integer; var res: integer
function TryReadRealFromString(s: string; var from: integer; var res: real): boolean;
///-procedure Val(s: string; var value: число; var err: integer);
/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value.
/// Преобразует строковое представление s целого или вещественного числа к числовому значению и записывает его в переменную value.
///Если преобразование успешно, то err=0, иначе err>0
procedure Val(s: string; var value: integer; var err: integer);
///--

View file

@ -187,5 +187,8 @@ function Tr<T>(Self: array of T; transform: T->T): array of T; extensionmethod :
/// Преобразует массив по правилу transform
procedure Tr<T>(a: array of T; transform: T->T) := a.Transform(transform);
/// Возвращает индекс последнего элемента массива
function H<T>(Self: array of T): integer; extensionmethod := Self.High;
end.