if (System.Environment.OSVersion.Version.Major >= 6) and (System.Environment.OSVersion.Version.Minor >= 2) then System.Console.OutputEncoding := Encoding.UTF8;

School - таблица истинности - доп. параметр
This commit is contained in:
Mikhalkovich Stanislav 2021-09-23 18:29:37 +03:00
parent a33d2cdcf1
commit 70576addb0
15 changed files with 7673 additions and 5690 deletions

View file

@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3";
public const string Minor = "8";
public const string Build = "1";
public const string Revision = "2980";
public const string Revision = "2985";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%COREVERSION%=1
%REVISION%=2980
%MINOR%=8
%REVISION%=2985
%COREVERSION%=1
%MAJOR%=3

View file

@ -2,7 +2,7 @@
// This CSharp output file generated by Gardens Point LEX
// Version: 1.1.3.301
// Machine: DESKTOP-G8V08V4
// DateTime: 21.08.2021 17:29:06
// DateTime: 23.09.2021 17:46:26
// UserName: ?????????
// GPLEX input file <ABCPascal.lex>
// GPLEX frame file <embedded resource>

View file

@ -3474,10 +3474,16 @@ relop_expr
{ $$ = $1; }
| relop_expr relop simple_expr
{
if ($2.type == Operators.NotIn)
$$ = new un_expr(new bin_expr($1, $3, Operators.In, @$),Operators.LogicalNOT,@$);
else
$$ = new bin_expr($1, $3, $2.type, @$);
}
| relop_expr relop new_question_expr
{
if ($2.type == Operators.NotIn)
$$ = new un_expr(new bin_expr($1, $3, Operators.In, @$),Operators.LogicalNOT,@$);
else
$$ = new bin_expr($1, $3, $2.type, @$);
}
| is_type_expr tkRoundOpen pattern_out_param_list tkRoundClose
@ -3886,6 +3892,16 @@ relop
{ $$ = $1; }
| tkIn
{ $$ = $1; }
| tkNot tkIn
{
if (parsertools.build_tree_for_formatter)
$$ = $2;
else
{
$$ = $2;
$$.type = Operators.NotIn;
}
}
;
simple_expr

File diff suppressed because it is too large Load diff

View file

@ -347,6 +347,8 @@ script=

View file

@ -1 +1 @@
3.8.1.2980
3.8.1.2985

View file

@ -1 +1 @@
!define VERSION '3.8.1.2980'
!define VERSION '3.8.1.2985'

View file

@ -66,6 +66,7 @@ namespace PascalABCCompiler.SyntaxTree
//Other operators
Assignment, // := =
In, // in
NotIn, // not in
Is, // is
As, // as
Dereference, // ^ *

View file

@ -56,6 +56,7 @@ namespace PascalABCCompiler.SyntaxTreeConverters
// slice_expr и slice_expr_question
SliceDesugarVisitor.New.ProcessNode(root); // поставил раньше AssignTuplesDesugarVisitor из за var (a,b) := a[1:3];
// теперь коллизия с (a[1:6], a[6:11]):= (a[6:11], a[1:6]);
// assign_tuple и assign_var_tuple
AssignTuplesDesugarVisitor.New.ProcessNode(root); // теперь это - на семантике

File diff suppressed because it is too large Load diff

View file

@ -14068,6 +14068,7 @@ procedure __InitModule;
begin
try
DefaultEncoding := Encoding.GetEncoding(1251);
if (System.Environment.OSVersion.Version.Major >= 6) and (System.Environment.OSVersion.Version.Minor >= 2) then
System.Console.OutputEncoding := Encoding.UTF8;
except
DefaultEncoding := Encoding.UTF8;

View file

@ -111,7 +111,9 @@ function TrueTable(f: function(a, b, c, d, e: boolean): boolean):
/// Выводит на монитор таблицу истинности
/// f = 0 - только для значения функции False
/// f = 1 - только для значения функции True
procedure TrueTablePrint(a: array[,] of boolean; f: integer := -1);
/// f = 2 (или не 0, 1, или отсутствует) - полная таблица истинности
/// s = 'abcde' использует указанные буквы для именования колонок. Может отсутствовать.
procedure TrueTablePrint(a: array[,] of boolean; f: integer := 2; s: string := 'abcde');
/// Заменяет последнее вхождение подстроки в строку
procedure ReplaceLast(var Строка: string; ЧтоЗаменить, ЧемЗаменить: string);
@ -764,15 +766,17 @@ end;
/// Выводит на монитор таблицу истинности
/// f = 0 - только для значения функции False
/// f = 1 - только для значения функции True
procedure TrueTablePrint(a: array[,] of boolean; f: integer);
/// f = 2 (или не 0, 1, или отсутствует) - полная таблица истинности
/// s = 'abcde' использует указанные буквы для именования колонок. Может отсутствовать.
procedure TrueTablePrint(a: array[,] of boolean; f: integer; s: string);
begin
var (n, c) := (a.ColCount, 'a');
for var i := 0 to n - 2 do
begin
Write(' ' + c);
Inc(c)
end;
Writeln(' F');
s := s?[:n];
s := s.PadRight(n - 1, ' ');
Write(' ');
for var i := 1 to s.Length do
Print(s[i]);
Writeln('F');
Writeln(' ' + (2 * n - 1) * '-');
for var i := 0 to a.RowCount - 1 do
if not (((f = 0) and a[i, n - 1]) or ((f = 1) and not a[i, n - 1])) then

6
TestSuite/notin.pas Normal file
View file

@ -0,0 +1,6 @@
begin
var a := Arr(1, 2, 3);
Assert(6 not in a);
Assert(4 not in a);
Assert(not (1 not in a));
end.

View file

@ -111,7 +111,9 @@ function TrueTable(f: function(a, b, c, d, e: boolean): boolean):
/// Выводит на монитор таблицу истинности
/// f = 0 - только для значения функции False
/// f = 1 - только для значения функции True
procedure TrueTablePrint(a: array[,] of boolean; f: integer := -1);
/// f = 2 (или не 0, 1, или отсутствует) - полная таблица истинности
/// s = 'abcde' использует указанные буквы для именования колонок. Может отсутствовать.
procedure TrueTablePrint(a: array[,] of boolean; f: integer := 2; s: string := 'abcde');
/// Заменяет последнее вхождение подстроки в строку
procedure ReplaceLast(var Строка: string; ЧтоЗаменить, ЧемЗаменить: string);
@ -764,15 +766,17 @@ end;
/// Выводит на монитор таблицу истинности
/// f = 0 - только для значения функции False
/// f = 1 - только для значения функции True
procedure TrueTablePrint(a: array[,] of boolean; f: integer);
/// f = 2 (или не 0, 1, или отсутствует) - полная таблица истинности
/// s = 'abcde' использует указанные буквы для именования колонок. Может отсутствовать.
procedure TrueTablePrint(a: array[,] of boolean; f: integer; s: string);
begin
var (n, c) := (a.ColCount, 'a');
for var i := 0 to n - 2 do
begin
Write(' ' + c);
Inc(c)
end;
Writeln(' F');
s := s?[:n];
s := s.PadRight(n - 1, ' ');
Write(' ');
for var i := 1 to s.Length do
Print(s[i]);
Writeln('F');
Writeln(' ' + (2 * n - 1) * '-');
for var i := 0 to a.RowCount - 1 do
if not (((f = 0) and a[i, n - 1]) or ((f = 1) and not a[i, n - 1])) then