0 / 0 / 0
Регистрация: 27.01.2019
Сообщений: 5
1

И снова "unexpected end of file"

29.01.2019, 15:50. Показов 7220. Ответов 11
Метки нет (Все метки)

В конце 2-го тысячелетия мной было написано комплекс программ для судейства соревнований по радиосвязи среди школьников. Сначала писал на ТВ, а потом перешел на ТР. Получилось 6 исполняемых файлов. Позже некоторые были модифицированы под изменения в Положение. Некоторое время сам занимался обслуживанием судейства. Потом ушел на пенсию, передав комплекс одному из серьезных и надежных коллективов.
В начале этого года обратились коллеги с просьбой обновить комплекс, т.к. некоторые файлы перестали работать должным образом или вообще не стартуют. И вот пенсионеру пришлось искать исходники. В общем, удалось найти/восстановить из удаленных..
Решил пробовать на FPC.
При запуске на выполнение выдает Unexpected end of file - курсор указывает на точку в конце кода.
Выбрав опцию компилятора Turbo Pascal compatible программа запускается, т.е. с синтаксисом порядок.
Как побороть этот unexpected end of file в FPC?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.01.2019, 15:50
Ответы с готовыми решениями:

Не могу разобрать концовку. пишет "unexpected end of file"
Товарищи, не могу разобратся, почему компилятор это не ест.. :) Задача стояла в том, чтобы...

Ошибка "Syntax error, "BEGIN" expected but "end of file" found"
В чём заключается ошибка в 73 строке под названием "Syntax error, "BEGIN" expected but "end of...

Unit1.pas(51,0) Fatal: Syntax error, "BEGIN" expected but "end of file" found
Вобщем, мне говорят что у меня ошибка в несуществующей строке. Пишет мне вот это; unit1.pas(51,0)...

Ошибка "Fatal: Syntax error, "BEGIN" expected but "END" found"
Ввожу unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil,...

11
Почетный модератор
64279 / 47578 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
29.01.2019, 16:08 2
Надо бы код видеть.
0
0 / 0 / 0
Регистрация: 27.01.2019
Сообщений: 5
29.01.2019, 16:56  [ТС] 3
{Пpогpама пеpевipки звiтiв TEST ЮТ та пiдpахунку набpаних очок}
{Версiя сiчень 2008р.}
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
uses crt,dos;
const pr0='позивний'; pr1='немае звiту'; pr2='немае пiдтв.';pr3='pозходж. в часi';
 pr4='дiапазон'; pr5='контp. номеp';pr6='повтоpний';pr7='час змагань';pr8='*';
type name=string[6];
var n,i,ii,iii,j,g,h,m,mo,tt,nn,z,count,pidtv,ptv,tur,turc,turn:integer;
  pz,kz,kt,pq,pc,po,pt,tpt,tpq,tpo,tp18,tp35,tp70,bp:integer;
                    p18,p35,p70,o18,o35,o70,q,c,o:integer;
                   pp:real;
                  pzt:array [1..4] of integer;
                  kzt:array [1..4] of integer;
                 call:array [1..2] of name;
                    b:array [1..2] of integer;
                    t:array [1..2] of integer;
                   n1:array [1..2] of string[7];
                   n2:array [1..2] of string[7];
                   pr:string[15];
                 calp:array[1..400] of name;
                bandp:array[1..400] of integer;
                bando:array[1..400] of integer;
                  trp:array[1..400] of integer;
                 oblp:array[1..400] of string[9];
                   cl:array[1..400] of name;
                  obl:array[1..400] of string[3];
                 {calc:array[1..400] of name;}
                   ob:string[3];
                   cp:string[6];
                  ccp:string[6];
   f,ff,f1,ff1,ff2,f2,fo,f3,f4,f5,f6:text;
 
            nam,calln:name;
                   bb:boolean;
                label 1,2,3;
 
 function tim(tm:integer):integer;
  begin
   tim:=(tm div 100)*60+(tm mod 100);
  end;
BEGIN
 ClrScr;
 write('час початку змагань (вводити без роздiлових знакiв) ');readln(pz);
 write('час закiнчення змагань ');readln(kz);
 write('кiлькiсть мiнi-турiв ');readln(kt);
  for i:=1 to kt do begin
   write(i,'-й тур: початок ');read(pzt[i]);
   write('         кiнець  ');readln(kzt[i])
  end;
 write('допустиме pозходження в часi (хв.) ');readln(tt);
 write('очок за зв"язок ');readln(q);
 write('очок за коpеспондента ');readln(c);
 write('очок за область ');readln(o);
 assign (f,'\refut\in\spysok.in'); assign (f1,'\refut\rez\spcall');
 assign (ff,'\refut\rez\2');rewrite(ff);
 
  reset (f);
 {-----Зчитування списку позивних i областей-----}
 assign (fo,'\refut\in\spysobl.in');reset(fo);i:=0;
  while not eof(fo) do begin
   while not eoln(fo) do begin
    inc(i);read(fo,cl[i]);read(fo,obl[i]);
   end;
    readln(fo);
  end;
  nn:=i;close(fo);
  {----------------------------------------------}
 
  repeat
   1: readln (f,nam);clrscr;gotoxy(5,10);
   write('Обробляється звiт ',nam);
    assign(ff1,'\refut\ot\'+nam);
     assign (f2,'\refut\rez\'+nam+'.rez');{write(' ','\refut\rez\'+nam+'.rez');}
     rewrite(f2);
     {if IOresult<>0 then goto 1;}
     reset(ff1);n:=0;m:=1;mo:=1;pidtv:=0;ptv:=0;pp:=0;tpt:=0;tpq:=0;tpo:=0;
     h:=0;p18:=0;p35:=0;p70:=0;o18:=0;o35:=0;o70:=0;
        assign (f3,'\refut\rez\povt');rewrite(f3);
  assign (f4,'\refut\rez\povt1');rewrite(f4);
  assign (f5,'\refut\rez\povt2');rewrite(f5);
  assign (f6,'\refut\rez\povt3');rewrite(f6);
  close(f3);close(f4);close(f5);close(f6);
                           for z:=1 to 300 do begin
                                 oblp[z]:='         ';
                                 bando[z]:=0;bandp[z]:=0;
                    end;
    repeat
     pr:='';pq:=q;pc:=c;po:=o;
     read (ff1,call[1]); read (ff1,b[1]); read (ff1,t[1]);
     read (ff1,n1[1]); readln (ff1,n2[1]);
      assign(ff2,'\refut\ot\'+call[1]);
      bb:=true;inc(n);
      for i:=1 to kt do begin    {------визначення номерiв мiнiтурiв------}
       if (t[1]>=pzt[i]) and (t[1]<=kzt[i]) then
         begin
          turn:=i;break;
         end;
      end;
      {$I-}
   3:   reset (ff2);
      {$I+}
        if IOresult<>0 then
                          begin
                           reset(f1);bb:=false;
                            repeat
                               read (f1,calln); readln (f1,count);
                                     if (calln=call[1]) then
                                      begin
                                       if count<7 then pr:=pr0 else pr:=pr1;
                                         pq:=0;pc:=0;close (f1);
                                        goto 2;
                                      end
                                     else begin
                                     end
                            until eof(f1);
                           close(f1);
                          end
         else begin
 
              repeat
              gotoxy(12,12);write(call[1]);
                read (ff2,call[2]);writeln('  ',call[2]);
                 read (ff2,b[2]);
                  {$I-};
                  read (ff2,t[2]);
                read (ff2,n1[2]); readln (ff2,n2[2]);{$I+};
               if (call[2]=nam) and ((n1[1]=n2[2]) or (n2[1]=n1[2])) then
                 begin
                 if abs(b[1]-b[2])>1 then pr:=pr4 else pr:='';
                 if abs(tim(t[2])-tim(t[1]))>tt then pr:=pr3;
                 if (n1[1]<>n2[2]) or (n1[2]<>n2[1]) then pr:=pr5;
                 break;
                 end
               else pr:=pr2;
              until eof(ff2);
            2: if pr<>'' then begin
                 pq:=0;pc:=0;
                 if pr<>pr1 then inc(pidtv) else inc(h)
                 end;
               {else}
      if pr='' then begin   {пеpевipка на повтоpи по дiапазону}
           reset(f3);
            while not eof(f3) do begin
             while not eoln(f3) do begin
              read(f3,cp);read(f3,bp);read(f3,tur);
               if (cp=call[1]) and (bp=b[1]) and (tur=turn) then
                         begin
                          pq:=0;pc:=0;pr:=pr6;break;
                         end
             end;
             if pr=pr6 then begin
              close(f3); break;end;
             readln(f3);
            end;
             if pq<>0 then begin
               append(f3);
                write(f3,call[1],' ',b[1],' ');writeln(f3,turn);
                close(f3);
               end;
 
              {  for ii:=1 to m+1 do begin
                 if (calp[ii]=call[1]) and (bandp[ii]=b[1]) and (tur[ii]then begin
                  pq:=0;pc:=0;pr:=pr6;
                  break;end;
                 {else}
               {  if (calp[ii]=call[1]) and (bandp[ii]<>b[1]) then begin
                   pc:=0;break;end;
                end;
                 inc(m);calp[m]:=call[1];bandp[m]:=b[1];;{запис в масив}
                 if b[1]=18 then p18:=p18+pq;           {пiдpахунок очок}
                 if b[1]=35 then p35:=p35+pq;           {по дiапазонах}
                 if b[1]=70 then p70:=p70+pq;
              { end;}
            if pr='' then begin   {пеpевipка на повтоpи областей}
       for j:=1 to nn+1 do {begin}
        if cl[j]=call[1] then ob:=obl[j];{break;end;}
         for iii:=1 to mo+1 do begin
          if (oblp[iii]=ob) and (bando[iii]=b[1]) and (trp[iii]=turn) then
             begin
              po:=0;break;
             end;
         end;
             oblp[mo]:=ob;bando[mo]:=b[1];trp[mo]:=turn;inc(mo);
                 if b[1]=18 then o18:=o18+po;           {пiдpахунок очок}
                 if b[1]=35 then o35:=o35+po;           {по дiапазонах}
                 if b[1]=70 then o70:=o70+po;
       end;
      end;
      if (t[1]<pz) or (t[1]>kz) then begin
       pr:=pr7;pq:=0;inc(ptv);{write(pr);} end;
                 if pr<>'' then po:=0;
 
          if pr='' then begin   {пеpевipка на повтоpи кореспондентiв в турi}
           reset(f6); pc:=c;
            while not eof(f6) do begin
             while not eoln(f6) do begin
              read(f6,ccp);read(f6,turc);
               if (ccp=call[1]) and (turn=turc) then
                         begin
                          pc:=0;pr:=pr8;break;
                         end
             end;
             if pr=pr8 then begin
              close(f6); break;end;
             readln(f6);
            end;
             if pc<>0 then begin
               append(f6);
                write(f6,call[1],' ');writeln(f6,turn);
                close(f6);
                end;
                end;
 
 
                            tp18:=o18+p18;tp35:=o35+p35;tp70:=o70+p70;
                            pt:=pq+po+pc; tpt:=tpt+pt; tpq:=tpq+pq;tpo:=tpo+po;
                           if (((pr=pr0) or (pr=pr1)) or (pr=pr2)) then begin
                                                      b[2]:=0;
                                                      t[2]:=0;n1[2]:='       ';n2[2]:='       '
                                                        end;
{writeln (nam,b[1]:3,t[1]:5,n1[1],n2[1],' ',call[1],b[2]:3,t[2]:5,n1[2],n2[2],pq:2,pc:2,pt:3,' ',pr);}
 
  writeln (f2,nam,b[1]:3,t[1]:5,n1[1],n2[1],' ',call[1],b[2]:3,t[2]:5,n1[2],n2[2],pq:2,po:3,pc:2,pt:3,' ',pr);
          if bb then close(ff2);
         end;
    until eof(ff1);
    { pp:=((n-pidtv-ptv-h)*100) div (n-h);}    {пpоцент пiдтвеpдження}
      pp:=(n-pidtv-h)*100/(n-h);
    {writeln(ff,nam,n:5,tpt:5,pp:8:2,p18:5,p35:5,p70:5,tpq:5,o18:5,o35:5,o70:5,tpo:5);}
writeln(ff,nam,n:5,tpt:5,pp:8:2,tp18:5,tp35:5,tp70:5,p18:5,p35:5,p70:5,tpq:5,o18:5,o35:5,o70:5,tpo:5);
     gotoxy(15,18);writeln(pp:8:2);
     close (ff1);close(f2);
    until eof(f);
   close (f);close(ff);{close(f3);close(f4);close(f5)}
END.
0
Почетный модератор
64279 / 47578 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
29.01.2019, 17:16 4
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Почистите код от ненужных закомментированных участков. Я что-то убрал и ошибка исчезла, сам не знаю что конкретно и почему из этого Фрее Паскаль не любит.

Добавлено через 3 минуты
Нашел что убрал, строки 158-167.
2
0 / 0 / 0
Регистрация: 27.01.2019
Сообщений: 5
29.01.2019, 17:45  [ТС] 5
Спасибо!
Буду пробовать.

Добавлено через 17 минут
Да, действительно закомментированные фрагменты мешали. Пока не засек касается ли это операторов или вообще любых комментариев.
0
Почетный модератор
64279 / 47578 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
29.01.2019, 17:48 6
Просто комментарии не мешают.
2
0 / 0 / 0
Регистрация: 27.01.2019
Сообщений: 5
29.01.2019, 19:32  [ТС] 7
Вот и славненько. Разобрались, а то поиск в нете ничего толкового не давал.
Кто бы мог подумать что проблема именно в закомментированных блоках кода.
Еще раз благодарю. Попричесываю остальные программы и допишу новые по желанию коллег и отправлю.
Здоровья и успехов.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7520 / 4384 / 2781
Регистрация: 22.11.2013
Сообщений: 12,546
Записей в блоге: 1
05.02.2019, 19:35 8
Цитата Сообщение от finick Посмотреть сообщение
Кто бы мог подумать что проблема именно в закомментированных блоках кода.
Как минимум тот, кто читал документацию по FPC. А интересующая тема -- про вложенные комментарии:
https://www.freepascal.org/doc... efse2.html

Ну и описание режимов:
FPC: https://www.freepascal.org/doc... gse72.html
ObjFPC: https://www.freepascal.org/doc... gse75.html
TP: https://www.freepascal.org/doc... gse73.html
Delphi: https://www.freepascal.org/doc... gse74.html
1
3405 / 1824 / 489
Регистрация: 28.02.2015
Сообщений: 3,699
05.02.2019, 20:49 9
Цитата Сообщение от finick Посмотреть сообщение
Спасибо!
Буду пробовать.
Да, действительно закомментированные фрагменты мешали.
Загрузил Ваш код в Лазарусе, программа, автоматически выделяет логические блоки и участки комментов,.

Комменты съедают все, вплоть до END.
В будущем, пишите код нормально, форматируя:
Pascal
1
2
3
4
5
6
             if pq<>0 then
               begin
                 append(f3);
                 write(f3,call[1],' ',b[1],' ');writeln(f3,turn);
                 close(f3);
               end;
Когда "операторные скобки, это те которые begin и end", расположены на одном уровне, начиная с начала строки. В PASCAL и потомках, код можно написать даже в одну строку, от program до end.
Миниатюры
И снова  "unexpected end of file"  
0
0 / 0 / 0
Регистрация: 27.01.2019
Сообщений: 5
05.02.2019, 21:18  [ТС] 10
Constantin Cat
И что Вы хотели сказать этим комментарием? Хотели пенсионера обидеть?
Это Вас не возвышает.
0
Модератор
Эксперт по электронике
8291 / 4194 / 1597
Регистрация: 01.02.2015
Сообщений: 13,040
Записей в блоге: 4
06.02.2019, 12:22 11
finick, где-то встречал негласное соглашение по применению комментариев.

// - однострочный комментарий для быстрого отключения строки с кодом, и немедленным принятием решения по строке - т.е. эти комментарии кода в исходнике не задерживаются
{} - для пояснительных комментариев, не для кода
(* *) - отключение фрагментов кода, после завершения работы с исходником эти фрагменты удаляют.
{$ifdef ... - отключение части кода при помощи условной компиляции, когда есть сомнения в его ценности (например, при оптимизации)

Так достигается непересечение комментариев.
Уже несколько подзабыл, но кажется ещё нужно директивой компилятора разрешать вложенные комментарии. Об этом bormant говорил.

Не по теме:

И ещё для себя попробуйте автоформаттеры исходного кода на Pascal - действительно удобно.
В IDE Lazarus встроенный автоформаттер JCF.
JCF можно использовать и отдельно.
Посмотрите
GunSmoker "Как писать понятный код - руководство для учащихся"
https://www.cyberforum.ru/post7676189.html

1
3405 / 1824 / 489
Регистрация: 28.02.2015
Сообщений: 3,699
06.02.2019, 16:03 12
Цитата Сообщение от finick Посмотреть сообщение
И что Вы хотели сказать этим комментарием? Хотели пенсионера обидеть?
Это Вас не возвышает.
Упс. Даже и не думал.

В принципе, Вам уже все ссылки дал Ю.Б..

Я Вам предложил, при написании кода использовать форматирование, это времени много не занимает, но позволяет быстро находить логические ошибки.
Если снова посмотрите мое сообщение выше, то код написанный Вами, но нормально отформатированный, а также Ваш код в Лазарусе, begin и end, подчеркнуты красными прямоугольниками. Еще посмотрите на строчки 147-151, они выше участка с выделенными скобками begin и end, вот тот
Pascal
1
2
3
4
             if pr=pr6 then begin
              close(f3); break;end;
             readln(f3);
            end;
end, который в конце второй строки, он замыкает begin, в первой, и его можно практически не заметить из-за отсутствия форматирования, и считать, что begin и end, находятся в первой и последней строках.

PS:Простите, что не смог сразу написать вразумительно.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.02.2019, 16:03
Помогаю со студенческими работами здесь

В каждом слове текста замените "а" на букву "е", если "а" стоит на четном месте
Задание 1. В каждом слове текста замените &quot;а&quot; на букву &quot;е&quot;, если &quot;а&quot; стоит на четном месте, и...

В каждом слове текста замените "а" на букву "е", если "а" стоит на четном месте
В каждом слове текста замените &quot;а&quot; на букву &quot;е&quot;, если &quot;а&quot; стоит на четном месте, и заменить букву...

Ошибка при компиляции "Syntax error "Begin" expected but ";" found"
При компиляции выдаёт ошибку &quot;Syntax error &quot;Begin&quot; expected but &quot;;&quot; found&quot; в блоке Procedure...

В словосочетании заменить два символа "ас" на один символы "_+_" и удалить знак "*"
В данном словосочетании заменить два символа &quot;ас&quot; на один символы &quot;_+_&quot; и удалить знак &quot;*&quot;.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru