Удалил коммит со step

This commit is contained in:
miks1965 2017-06-21 21:19:38 +03:00
parent 4a448b38eb
commit 389e9d27b2
11 changed files with 1850 additions and 1937 deletions

View file

@ -2,7 +2,7 @@
// This CSharp output file generated by Gardens Point LEX
// Version: 1.1.3.301
// Machine: DESKTOP-8EAQPI9
// DateTime: 20.06.2017 20:13:30
// DateTime: 08.06.2017 12:30:07
// UserName: ?????????
// GPLEX input file <ABCPascal.lex>
// GPLEX frame file <embedded resource>
@ -1940,7 +1940,6 @@ string cur_yytext = yytext;
case (int)Tokens.tkSealed:
case (int)Tokens.tkPartial:
case (int)Tokens.tkParams:
case (int)Tokens.tkStep:
case (int)Tokens.tkTo:
case (int)Tokens.tkDownto:
case (int)Tokens.tkUnit:

View file

@ -345,7 +345,6 @@ UNICODEARROW \x890
case (int)Tokens.tkSealed:
case (int)Tokens.tkPartial:
case (int)Tokens.tkParams:
case (int)Tokens.tkStep:
case (int)Tokens.tkTo:
case (int)Tokens.tkDownto:
case (int)Tokens.tkUnit:

View file

@ -34,7 +34,7 @@
%token <ti> tkDirectiveName tkAmpersend tkColon tkDotDot tkPoint tkRoundOpen tkRoundClose tkSemiColon tkSquareOpen tkSquareClose tkQuestion tkQuestionPoint tkDoubleQuestion tkQuestionSquareOpen
%token <ti> tkSizeOf tkTypeOf tkWhere tkArray tkCase tkClass tkAuto tkConst tkConstructor tkDestructor tkElse tkExcept tkFile tkFor tkForeach tkFunction
%token <ti> tkIf tkImplementation tkInherited tkInterface tkProcedure tkOperator tkProperty tkRaise tkRecord tkSet tkType tkThen tkUses tkVar tkWhile tkWith tkNil
%token <ti> tkGoto tkOf tkLabel tkLock tkProgram tkEvent tkDefault tkTemplate tkPacked tkExports tkResourceString tkThreadvar tkSealed tkPartial tkTo tkDownto tkStep
%token <ti> tkGoto tkOf tkLabel tkLock tkProgram tkEvent tkDefault tkTemplate tkPacked tkExports tkResourceString tkThreadvar tkSealed tkPartial tkTo tkDownto
%token <ti> tkLoop
%token <ti> tkSequence tkYield
%token <id> tkNew
@ -2528,11 +2528,7 @@ foreach_stmt_ident_dype_opt
for_stmt
: tkFor optional_var identifier for_stmt_decl_or_assign expr_l1 for_cycle_type expr_l1 optional_tk_do unlabelled_stmt
{
$$ = NewForStmt((bool)$2, $3, $4, $5, (for_cycle_type)$6, $7, null, $8, $9 as statement, @$);
}
| tkFor optional_var identifier for_stmt_decl_or_assign expr_l1 for_cycle_type expr_l1 tkStep expr_l1 optional_tk_do unlabelled_stmt
{
$$ = NewForStmt((bool)$2, $3, $4, $5, (for_cycle_type)$6, $7, $9, $10, $11 as statement, @$);
$$ = NewForStmt((bool)$2, $3, $4, $5, (for_cycle_type)$6, $7, $8, $9 as statement, @$);
}
;

File diff suppressed because it is too large Load diff

View file

@ -102,7 +102,6 @@ namespace GPPGParserScanner
keywords.Add(Convert("record"), (int)Tokens.tkRecord);
keywords.Add(Convert("repeat"), (int)Tokens.tkRepeat);
keywords.Add(Convert("set"), (int)Tokens.tkSet);
keywords.Add(Convert("step"), (int)Tokens.tkStep);
keywords.Add(Convert("try"), (int)Tokens.tkTry);
keywords.Add(Convert("type"), (int)Tokens.tkType);
keywords.Add(Convert("then"), (int)Tokens.tkThen);

View file

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

View file

@ -274,9 +274,9 @@ namespace GPPGParserScanner
return nws;
}
public for_node NewForStmt(bool opt_var, ident identifier, type_definition for_stmt_decl_or_assign, expression expr1, for_cycle_type fc_type, expression expr2, expression IncrementValue, token_info opt_tk_do, statement stmt, LexLocation loc)
public for_node NewForStmt(bool opt_var, ident identifier, type_definition for_stmt_decl_or_assign, expression expr1, for_cycle_type fc_type, expression expr2, token_info opt_tk_do, statement stmt, LexLocation loc)
{
var nfs = new for_node(identifier, expr1, expr2, stmt, fc_type, IncrementValue, for_stmt_decl_or_assign, opt_var != false, loc);
var nfs = new for_node(identifier, expr1, expr2, stmt, fc_type, null, for_stmt_decl_or_assign, opt_var != false, loc);
if (opt_tk_do == null)
{
file_position fp = expr2.source_context.end_position;

View file

@ -25,17 +25,6 @@ var
ZazY1 := 5;
ZazX2 := 10;
ZazY2 := 16;
HelpStr := 'Разработчик исполнителя Чертежник: Михалкович С.С., 2002-17 '#10#13#10#13+
'Команды исполнителя Чертежник:'#10#13+
' PenDown - опустить перо'#10#13+
' PenUp - поднять перо'#10#13
' ToPoint(x,y) - переместиться в точку с координатами (x,y)'#10#13+
' OnVector(a,b) - переместиться из текущей точки на вектор (a,b)'#10#13
' a>0 - вправо, a<0 - влево, b>0 - вверх, b<0 - вниз'#10#13
' Task(name) - вызвать задание с указанным именем'#10#13
' StandardField - вызвать стандартное поле'#10#13
' Field(n,m) - вызвать поле размера n на m'#10#13#10#13;
type
TDMField = class
@ -612,7 +601,18 @@ end;
procedure buttonHelpClick(o: Object; e: EventArgs);
begin
MessageBox.Show(HelpStr,'Исполнитель Чертежник - Справка');
MessageBox.Show('Разработчик исполнителя Чертежник: Михалкович С.С., 2002-07 '#10#13#10#13+
'Команды исполнителя Чертежник:'#10#13+
' PenDown - опустить перо'#10#13+
' PenUp - поднять перо'#10#13
' ToPoint(x,y) - переместиться в точку с координатами (x,y)'#10#13+
' OnVector(a,b) - переместиться из текущей точки на вектор (a,b)'#10#13
' a>0 - вправо, a<0 - влево, b>0 - вверх, b<0 - вниз'#10#13
' Speed(n) - установить скорость n (n=0..10)'#10#13
' Stop - остановить Чертежника'#10#13
' Start - запустить Чертежника'#10#13,
'Исполнитель Чертежник - Справка');
(GraphABCControl as Control).Focus;
end;

View file

@ -27,29 +27,6 @@ var
LabelBadEndColor: Color;
LabelGoodEndColor: Color;
HelpStr :=
'Разработчик исполнителя Робот: Михалкович С.С., 2002-17 '#10#13#10#13+
'Команды исполнителя Робот:'#10#13+
' Right - вправо'#10#13+
' Left - влево'#10#13
' Up - вверх'#10#13+
' Down - вниз'#10#13
' Paint - закрасить текущую клетку'#10#13
' Task(name) - вызвать задание с указанным именем'#10#13
' StandardField - вызвать стандартное поле'#10#13
' Field(n,m) - вызвать поле размера n на m'#10#13#10#13
'Условия, проверяемые исполнителем Робот:'#10#13
' WallFromRight - справа стена'#10#13
' WallFromLeft - слева стена'#10#13
' WallFromUp - сверху стена'#10#13
' WallFromDown - снизу стена'#10#13
' FreeFromRight - справа свободно'#10#13
' FreeFromLeft - слева свободно'#10#13
' FreeFromUp - сверху свободно'#10#13
' FreeFromDown - снизу свободно'#10#13
' CellIsPainted - клетка закрашена'#10#13
' CellIsFree - клетка не закрашена'#10#13;
type
TRobotField = class
private
@ -254,33 +231,35 @@ begin
end;
procedure TRobotField.DrawFieldOnly;
var ix,iy,w,h: integer;
begin
var w := CellSize*DimX;
var h := CellSize*DimY;
w := CellSize*DimX;
h := CellSize*DimY;
Brush.Color := clWhite;
FillRectangle(X0,Y0,X0+w+1,Y0+h+1);
Pen.Width := 1;
Pen.Color := RGB(191,191,191);
for var ix:=0 to DimX do
for ix:=0 to DimX do
Line(X0+ix*CellSize,Y0,X0+ix*CellSize,Y0+h);
for var iy:=0 to DimY do
for iy:=0 to DimY do
Line(X0,Y0+iy*CellSize,X0+w,Y0+iy*CellSize);
end;
procedure TRobotField.Draw0;
var x,y: integer;
begin
DrawFieldOnly;
Pen.Color:=clBlack;
Pen.Width:=3;
for var x:=1 to DimX do
for var y:=0 to DimY do
for x:=1 to DimX do
for y:=0 to DimY do
if HorizWalls[x,y] then
begin
MoveTo(X0+(x-1)*CellSize,Y0+y*CellSize);
LineTo(X0+x*CellSize,Y0+y*CellSize);
end;
for var x:=0 to DimX do
for var y:=1 to DimY do
for x:=0 to DimX do
for y:=1 to DimY do
if VertWalls[x,y] then
begin
MoveTo(X0+x*CellSize,Y0+(y-1)*CellSize);
@ -289,8 +268,8 @@ begin
Pen.Color:=clBlack;
Pen.Width:=1;
for var x:=1 to DimX do
for var y:=1 to DimY do
for x:=1 to DimX do
for y:=1 to DimY do
DrawCell(x,y);
end;
@ -386,9 +365,10 @@ begin
end;
procedure TRobotField.SetTagRect(x1,y1,x2,y2: integer);
var x,y: integer;
begin
for var x:=x1 to x2 do
for var y:=y1 to y2 do
for x:=x1 to x2 do
for y:=y1 to y2 do
SetTag(x,y);
end;
@ -568,14 +548,16 @@ begin
end;
procedure TRobotField.HorizWall(x,y,len: integer);
var xx: integer;
begin
for var xx:=x to x+len-1 do
for xx:=x to x+len-1 do
HorizWalls[xx,y] := True;
end;
procedure TRobotField.VertWall(x,y,len: integer);
var yy: integer;
begin
for var yy:=y to y+len-1 do
for yy:=y to y+len-1 do
VertWalls[x,yy] := True;
end;
@ -622,15 +604,16 @@ begin
end;
procedure TRobotField.Clear;
var x,y: integer;
begin
for var x:=1 to Max_DimX do
for var y:=0 to Max_DimY do
for x:=1 to Max_DimX do
for y:=0 to Max_DimY do
HorizWalls[x,y] := False;
for var x:=0 to Max_DimX do
for var y:=1 to Max_DimY do
for x:=0 to Max_DimX do
for y:=1 to Max_DimY do
VertWalls[x,y] := False;
for var x:=1 to Max_DimX do
for var y:=1 to Max_DimY do
for x:=1 to Max_DimX do
for y:=1 to Max_DimY do
begin
Painted[x,y] := 0;
Tags[x,y] := False;
@ -645,10 +628,12 @@ end;
function TRobotField.IsSolution: boolean;
label 1;
var x,y: integer;
ID: boolean;
begin
var ID:=True;
for var x:=1 to DimX do
for var y:=1 to DimY do
ID:=True;
for x:=1 to DimX do
for y:=1 to DimY do
begin
//ID := ID and (((Tags[x,y]=True) and ((Painted[x,y]=1) or (Painted[x,y]=2))) or ((Tags[x,y]=False) and ((Painted[x,y]=0) or (Painted[x,y]=2))));
ID := ID and (((Tags[x,y]=True) and (Painted[x,y] in [1,2])) or ((Tags[x,y]=False) and (Painted[x,y] in [0,2])));
@ -661,8 +646,9 @@ end;
//--------- Интерфейс и обработчики
procedure LoadIni(var settings: IniSettings);
var Ini: TIniFile;
begin
var Ini := new TIniFile(IniFileName);
Ini := new TIniFile(IniFileName);
settings.Width := Ini.ReadInteger('RobotWindow','Width',679);
settings.Height := Ini.ReadInteger('RobotWindow','Height',490);
settings.Left := Ini.ReadInteger('RobotWindow','Left',(Screen.PrimaryScreen.Bounds.Width-settings.Width) div 2);
@ -692,10 +678,11 @@ begin
end;
procedure SaveIni;
var Ini: TIniFile;
begin
if (MainForm.Left<0) or (MainForm.Top<0) then
exit;
var Ini := new TIniFile(IniFileName);
Ini := new TIniFile(IniFileName);
Ini.WriteInteger('RobotWindow','Width',MainForm.Width);
Ini.WriteInteger('RobotWindow','Height',MainForm.Height);
Ini.WriteInteger('RobotWindow','Left',MainForm.Left);
@ -710,9 +697,15 @@ begin
halt;
end;
procedure ABCWindowResize(o: Object; e: EventArgs) := CorrectWHLT;
procedure ABCWindowResize(o: Object; e: EventArgs);
begin
CorrectWHLT;
end;
procedure MainWindowClose := SaveIni;
procedure MainWindowClose;
begin
SaveIni;
end;
procedure buttonStartClick(o: Object; e: EventArgs);
begin
@ -741,7 +734,28 @@ end;
procedure buttonHelpClick(o: Object; e: EventArgs);
begin
MessageBox.Show(HelpStr,'Исполнитель Робот - Справка');
MessageBox.Show('Разработчик исполнителя Робот: Михалкович С.С., 2002-07 '#10#13#10#13+
'Команды исполнителя Робот:'#10#13+
' Right - вправо'#10#13+
' Left - влево'#10#13
' Up - вверх'#10#13+
' Down - вниз'#10#13
' Paint - закрасить текущую клетку'#10#13
' Speed(n) - установить скорость n (n=0..10)'#10#13
' Stop - остановить Робота'#10#13
' Start - запустить Робота'#10#13#10#13
'Условия, проверяемые исполнителем Робот:'#10#13
' WallFromRight - справа стена'#10#13
' WallFromLeft - слева стена;'#10#13
' WallFromUp - сверху стена;'#10#13
' WallFromDown - снизу стена;'#10#13
' FreeFromRight - справа свободно;'#10#13
' FreeFromLeft - слева свободно;'#10#13
' FreeFromUp - сверху свободно;'#10#13
' FreeFromDown - снизу свободно;'#10#13
' CellIsPainted - клетка закрашена;'#10#13
' CellIsFree - клетка не закрашена.'#10#13,
'Исполнитель Робот - Справка');
(GraphABCControl as Control).Focus;
end;

View file

@ -1,52 +0,0 @@
// Copyright (c) Ivan Bondarev, Stanislav Mihalkovich (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
///Исполнитель Робот действует на прямоугольном клеточном поле. Между некоторыми клетками, а также по периметру поля находятся стены.
///Основная цель Робота – закрасить указанные клетки и переместиться в конечную клетку.
unit Робот;
uses Robot,RobotField;
procedure Вправо := Right;
procedure Влево := Left;
procedure Вверх := Up;
procedure Вниз := Down;
procedure Закрасить := Paint;
function СправаСвободно := FreeFromRight;
function СлеваСвободно := FreeFromLeft;
function СверхуСвободно := FreeFromUp;
function СнизуСвободно := FreeFromDown;
function СправаСтена := WallFromRight;
function СлеваСтена := WallFromLeft;
function СверхуСтена := WallFromUp;
function СнизуСтена := WallFromDown;
function КлеткаНеЗакрашена := CellIsFree;
function КлеткаЗакрашена := CellIsPainted;
procedure Задание(имя: string) := Task(имя);
procedure СтандартноеПоле := StandardField;
procedure Поле(n,m: integer) := Field(n,m);
begin
HelpStr :=
'Разработчик исполнителя Робот: Михалкович С.С., 2002-17 '#10#13#10#13+
'Команды исполнителя Робот:'#10#13+
' Вправо'#10#13+
' Влево'#10#13
' Вверх'#10#13+
' Вниз'#10#13
' Закрасить - закрасить текущую клетку'#10#13
' Задание(имя) - вызвать задание с указанным именем'#10#13
' СтандартноеПоле - вызвать стандартное поле'#10#13
' Поле(n,m) - вызвать поле размера n на m'#10#13
'Условия, проверяемые исполнителем Робот:'#10#13
' СправаСтена'#10#13
' СлеваСтена'#10#13
' СверхуСтена'#10#13
' СнизуСтена'#10#13
' СправаСвободно'#10#13
' СлеваСвободно'#10#13
' СверхуСвободно'#10#13
' СнизуСвободно'#10#13
' КлеткаЗакрашена'#10#13
' КлеткаНеЗакрашена'#10#13;
end.

View file

@ -1,29 +0,0 @@
// Copyright (c) Ivan Bondarev, Stanislav Mihalkovich (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
///Исполнитель Чертежник предназначен для построения рисунков и чертежей на плоскости с координатами.
///Чертежник имеет перо, которое он может поднимать, опускать и перемещать. При перемещении опущенного пера за ним остается след.
unit Чертежник;
uses Drawman,DrawManField;
procedure ОпуститьПеро := PenDown;
procedure ПоднятьПеро := PenUp;
procedure КТочке(x,y: integer) := ToPoint(x,y);
procedure НаВектор(a,b: integer) := OnVector(a,b);
procedure Задание(имя: string) := Task(имя);
procedure СтандартноеПоле := StandardField;
procedure Поле(n,m: integer) := Field(n,m);
begin
HelpStr := 'Разработчик исполнителя Чертежник: Михалкович С.С., 2002-17 '#10#13#10#13+
'Команды исполнителя Чертежник:'#10#13+
' ОпуститьПеро'#10#13+
' ПоднятьПеро'#10#13
' КТочке(x,y) - переместиться в точку с координатами (x,y)'#10#13+
' НаВектор(a,b) - переместиться из текущей точки на вектор (a,b)'#10#13
' a>0 - вправо, a<0 - влево, b>0 - вверх, b<0 - вниз'#10#13
' Задание(name) - вызвать задание с указанным именем'#10#13
' СтандартноеПоле - вызвать стандартное поле'#10#13
' Поле(n,m) - вызвать поле размера n на m'#10#13#10#13;
end.