Fatal syntax error expected but while found

problem with Fatal: Syntax error, ";" expected but ":" found

Topic: problem with Fatal: Syntax error, «;» expected but «:» found  (Read 5365 times)

Hello, I am a beginner in Lazarus and the Pascal language.
my problem is that every time I try to run my program it gives me this error: Fatal: syntax error, «;» expected but found.
in case there is any doubt this is the program.
program division;
var
a,b,c:double;
begin
writeln(‘extra division’);
writeln(‘ingresa el divisor’);
readln(a);
writeln(‘ingresa el dividendo’);
readln(b);
if (b=0) then
begin
writeln(‘math error’);
readln;
end
else
begin
c:a/b;
writeln(‘el resultado de la division es’,c:4:2);
readln;
end;

I would be very grateful to you if you could help me solve this problem.


Logged



Logged


HOMEWORK ???

  1. PROGRAM Division;

  2. VAR dDividend,dDivisor,dQuotient:Double;

  3. BEGIN

  4. Writeln(‘extra division’);

  5. Writeln(‘ingresa el dividendo’);

  6. Readln(dDividend);

  7. Writeln(‘ingresa el divisor’);

  8. Readln(dDivisor);

  9. If (dDivisor = 0)

  10. Then

  11. Begin

  12. Writeln(‘math error’);

  13. Readln;

  14. End

  15. Else

  16. Begin

  17.     dQuotient:= dDividend/dDivisor;

  18. Writeln(‘el resultado de la division es:  ‘,dQuotient:4:2);

  19. Readln;

  20. END;

  21. END.


Logged

Windows 7 Pro (x64 Sp1) & Windows XP Pro (x86 Sp3).



Logged


Hello, I am a beginner in Lazarus and the Pascal language.
my problem is that every time I try to run my program it gives me this error: Fatal: syntax error, «;» expected but found.
in case there is any doubt this is the program.
program division;
var
a,b,c:double;
begin
writeln(‘extra division’);
writeln(‘ingresa el divisor’);
readln(a);
writeln(‘ingresa el dividendo’);
readln(b);
if (b=0) then
begin
writeln(‘math error’);
readln;
end
else
begin
c:a/b;
writeln(‘el resultado de la division es’,c:4:2);
readln;
end;

I would be very grateful to you if you could help me solve this problem.


Logged

One System to rule them all, One Code to find them,
One IDE to bring them all, and to the Framework bind them,
in the Land of Redmond, where the Windows lie
———————————————————————
Code is like a joke: If you have to explain it, it’s bad


This line:

  1. c:a/b;

Needs to be changed to this:

  1. c := a/b;

Also, you need to add the following at the bottom of the file to close your 1st ‘begin’ and the unit as a whole:

  1. end.

So, the entire code should look like this:

  1. program division;

  2. var

  3.   a, b, c : double;

  4. begin

  5. WriteLn(‘extra division’);

  6. WriteLn(‘ingresa el divisor’);

  7. ReadLn(a);

  8. WriteLn(‘ingresa el dividendo’);

  9. ReadLn(b);

  10. if (b=0) then

  11. begin

  12. WriteLn(‘math error’);

  13. ReadLn;

  14. end

  15. else

  16. begin

  17.     c := a / b; // <— CHANGED!!!

  18. WriteLn(‘el resultado de la division es’, c:4:2);

  19. ReadLn;

  20. end;

  21. end. // <— ADDED!!!

« Last Edit: June 19, 2020, 08:31:39 pm by Remy Lebeau »


Logged


@Remy Lebeau: almost … one is missing …  :P
You don’t get the flower pot !


Logged

Windows 7 Pro (x64 Sp1) & Windows XP Pro (x86 Sp3).


@Remy Lebeau: almost … one is missing …  :P

Which one?  I don’t see anything missing in the code I posted.


Logged


I don’t see anything missing in the code I posted.

Correct, nothing is missing, but the «WriteLn» order is not optimal…

Divisor (a), Dividend (b), Check b = 0 (Dividend?), Divisor/Dividend ?

In my world you have to do it like this:
Dividend / Divisor = Quotient   :)

As I said, you don’t get the flower pot …  :D


Logged

Windows 7 Pro (x64 Sp1) & Windows XP Pro (x86 Sp3).


Hi!

Dont battle about the poor dividende.

We could teach him the way the C boys do it:
Division by zero is no error. Never.

SetExceptionMask([exZeroDivide, exInvalidOp, exDenormalized, exOverflow, exUnderflow, exPrecision]);
….

You dont have to ask for dividing by zero anymore.
The price you have to pay:
Incorrect results and a system crash every now and then.
We all know that from Windows.

Winni


Logged


Dont battle about the poor dividende.

We could teach him the way the C boys do it:
Division by zero is no error. Never.

I think RAW is referring just to the terminology in the WriteLn’s: Remy’s code asks for the divisor when he means the dividend and viceversa. Just a small oversight ;D


Logged

Turbo Pascal 3 CP/M — Amstrad PCW 8256 (512 KB !!!) :P
Lazarus/FPC 2.0.8/3.0.4 & 2.0.12/3.2.0 — 32/64 bits on:
(K|L|X)Ubuntu 12..18, Windows XP, 7, 10 and various DOSes.


…code asks for the divisor when he means the dividend and viceversa…

@lucamar: the flowers are all yours …  :)

by the way: no battle at all, just a little hint that the code isn’t optimal …  :)


Logged

Windows 7 Pro (x64 Sp1) & Windows XP Pro (x86 Sp3).


I think RAW is referring just to the terminology in the WriteLn’s: Remy’s code asks for the divisor when he means the dividend and viceversa. Just a small oversight ;D

It is not MY code, it is the OP’s code.  I just fixed the syntax errors, not the logic errors.


Logged


Содержание

  1. Pascal fatal error «;» expected but else founded
  2. 2 Answers 2
  3. [Паскалъ] Need Help
  4. Fatal: Syntax error, «.» expected but «;» found
  5. 1 Answer 1
  6. Fatal syntax error expected but else found
  7. Re: Ошибка в коде программы!
  8. Re: Ошибка в коде программы!
  9. Re: Ошибка в коде программы!
  10. Re: Ошибка в коде программы!
  11. Re: Ошибка в коде программы!
  12. Re: Ошибка в коде программы!
  13. Re: Ошибка в коде программы!

Pascal fatal error «;» expected but else founded

What is causing the fatal error «;» expected but else founded message?

2 Answers 2

Unlike C, in Pascal a semicolon ; separates statements, it does not terminate them, and the then clause requires a single statement. then WriteLn(. ); else is two statements; you want then WriteLn(. ) else .

Let’s take this opportunity to learn how to read and use error messages to your advantage.

The compiler tells you exactly what the error is (it’s a ; before an else , because both of those are mentioned in the error message). It also gives you the exact line number where it’s reporting the error; that’s the number (usually in parentheses right before the error message, like (from Delphi):

[DCC Error] Project2.dpr(14): E2153 ‘;’ not allowed before ‘ELSE’

So the error is happening on line 14 (in my code — your number will be different). Let’s look at that line and a few before and after:

So look at the error message:

That clearly tells you that the ; in the line before the else is the problem (that’s very clear, because it says not allowed), so remove it.

BTW, now you’re going to get another error:

[DCC Error] Project2.dpr(15): E2003 Undeclared identifier: ‘wrtieln’

I think you should be able to figure that one out; again, the compiler gives you the exact line number.

You’re going to get another one, if you’ve posted your entire code:

[DCC Error] Project2.dpr(18): E2029 Statement expected but end of file found

This is because you’ve left out the end. that marks the end of a program file in Pascal. If you’ve not posted your entire code, you may not get it.

It’s important to learn to actually read the words when you get an error message from the compiler. In most languages, the messages are clearly worded, and they all have information you can use to try to figure out (or at least narrow down) the problems in your code.

Источник

[Паскалъ] Need Help

Что программа должна делать(на пхп)

ЕМНИП перед else там точка с запятой не ставится.

Не, ругается на другое, и спасибо это пофиксил.

> перед else там точка с запятой не ставится.

> ругается на другое

Условия в скобки попробуй.

Перед else ; не ставится.

У readln точно такой синтаксис? (я уже запамятовал)

Условия в скобки не надо?

Операции сравнения в скобки возьми.

А теперь, дружище, запомни, что вот этот выхлоп

untitled.pas(26,7) Error: Incompatible types: got «Boolean» expected «LongInt»
untitled.pas(28,2) Fatal: Syntax error, «;» expected but «ELSE» found

должен читать ТЫ сам, а не ЛОР.

Свободно говорю на Русском, Литовском, Английском.

Свободно говорю на Английском

Error: Incompatible types: got «Boolean» expected «LongInt»

Fatal: Syntax error, «;» expected but «ELSE» found

Источник

Fatal: Syntax error, «.» expected but «;» found

1 Answer 1

The reason for this is that your begin s and end s are not balanced; disregarding the opening begin and closing end. for the program’s syntax to be correct, you should have equal numbers of each, but you have 4 begin s and 8 end s.

Obviously, your code is to compute the solutions of a quadratic equation. What I think you should do is to adjust the layout of your code so that it reflects that and then correctly the begin s and end s. In particular, your program is trying to detect whether any of a, b and d is zero and, if so, write a diagnostic message, otherwise calculate the roots by the usual formula.

Unfortunately, your begin s and end s do not reflect that. Either the whole of the block starting d := . needs to be executed or none of it does, so the else on the line before needs to be followed by a begin , as in

(You don’t say which Pascal compiler you are using, but the above fixes two points which are flagged as errors in FreePascal.

If you need more help than that, please ask in a comment.

Btw, there are some grammatical constructs in Pascal implementations where an end can appear without a matching preceding begin such as case . of . end .

Источник

Fatal syntax error expected but else found

Анна Бак » 27.10.2014 17:40:51

Re: Ошибка в коде программы!

Дож » 27.10.2014 18:07:56

Видимо, проблема в том, что Вы отсканировали текст и не почистили от фигни.

Вместо короткого тире − должен знак минус -,
вместо обратной кавычки ’ — знак апострофа ‘.

Re: Ошибка в коде программы!

Анна Бак » 27.10.2014 20:02:42

Дож писал(а): Видимо, проблема в том, что Вы отсканировали текст и не почистили от фигни.

Вместо короткого тире − должен знак минус -,
вместо обратной кавычки ’ — знак апострофа ‘.

Я отсканировала текст только для того, чтобы задать вопрос.
А в Free Pascal вводила все в ручную и все знаки переписывала уже несколько раз, ничего не помогает.

Re: Ошибка в коде программы!

Little_Roo » 27.10.2014 20:40:10

Re: Ошибка в коде программы!

Анна Бак » 27.10.2014 21:35:18

Re: Ошибка в коде программы!

Little_Roo » 27.10.2014 21:38:27

Re: Ошибка в коде программы!

Анна Бак » 27.10.2014 22:11:59

Re: Ошибка в коде программы!

Дож » 27.10.2014 23:28:21

Дож писал(а): Видимо, проблема в том, что Вы отсканировали текст и не почистили от фигни.

Вместо короткого тире − должен знак минус -,
вместо обратной кавычки ’ — знак апострофа ‘.

Я отсканировала текст только для того, чтобы задать вопрос.
А в Free Pascal вводила все в ручную и все знаки переписывала уже несколько раз, ничего не помогает.

Источник

// Распознавание программы на простом языке. Распознаватель лексем (лексер)
{ 
  Лексемы:
  ;  :=  +=  -=  *=  id  num  begin  end  cycle
 
  Ключевые слова:
  begin  end  cycle
}
unit leksanalyz;
 
interface
 
// TLex - перечислимый тип - все лексемы грамматики
// lexEot - конец текста программы
type 
  Tok = (EOF, ID, INUM, COLON, SEMICOLON, ASSIGN, &BEGIN, &END, CYCLE);
 
var 
  fname: string;           // Имя файла программы
  LexRow,LexCol: integer;  // Строка-столбец начала лексемы. Конец лексемы = LexCol+Length(LexText)
  LexKind: Tok;            // Тип лексемы   
  LexText: string;         // Текст лексемы
  LexValue: integer;       // Целое значение, связанное с лексемой lexNum
 
procedure NextLexem;
procedure Init(fn: string);
procedure Done;
function TokToString(t: Tok): string;
 
implementation
 
var 
  ch: Char;         // Текущий символ
  f: text;          // Текущий файл
  row,col: integer; // Текущие строка и столбец в файле
  KeywordsMap := new Dictionary<string,Tok>; // Словарь, сопоставляющий ключевым словам константы типа TLex. Инициализируется процедурой InitKeywords
 
 
procedure LexError(message: string); // ошибка лексического анализатора
begin
  var ss := System.IO.File.ReadLines(fname).Skip(row-1).First(); // Строка row файла
  writeln('Лексическая ошибка в строке ',row,':');
  writeln(ss);
  writeln('^':col-1);
  if message<>'' then 
    writeln(message);
  Done;
  halt;
end;
 
procedure NextCh;
begin
  // В LexText накапливается предыдущий символ и считывается следующий символ
  LexText += ch;
  if not f.Eof then
  begin
    read(f,ch);
    if ch<>#10 then
      col += 1
    else
    begin
      row += 1;
      col := 1;
    end;
  end
  else 
  begin
    ch := #0; // если достигнут конец файла, то возвращается #0
    Done;
  end;
end; 
 
procedure PassSpaces;
begin
  while char.IsWhiteSpace(ch) do
    NextCh;
end;
 
procedure NextLexem;
begin
  PassSpaces;
  // R К этому моменту первый символ лексемы считан в ch
  LexText := '';
  LexRow := Row;
  LexCol := Col;
// Тип лексемы определяется по ее первому символу
// Для каждой лексемы строится синтаксическая диаграмма
  case ch of
  ';': begin
         NextCh;
         LexKind := Tok.SEMICOLON;
       end;  
  ':': begin
         NextCh;
         if ch<>'=' then 
           lexerror('= ожидалось');
         NextCh;
         LexKind := Tok.ASSIGN;
       end;
  'a'..'z': begin
         while ch in ['a'..'z','0'..'9'] do
           NextCh;
         if KeywordsMap.ContainsKey(LexText) then
           LexKind := KeywordsMap[LexText]
         else LexKind := Tok.ID;
       end;
  '0'..'9': begin
         while char.IsDigit(ch) do
           NextCh;
         LexValue := integer.Parse(LexText);
         LexKind := Tok.INUM;
       end;
    #0: LexKind := Tok.EOF;   
    else lexerror('Неверный символ '+ch);
  end;  
end;
 
procedure InitKeywords;
begin
  KeywordsMap['begin'] := Tok.&BEGIN;
  KeywordsMap['end'] := Tok.&END;
  KeywordsMap['cycle'] := Tok.CYCLE;
end;
 
procedure Init(fn: string);
begin
  InitKeywords;
  fname := fn;
  AssignFile(f,fname);
  reset(f);
  row := 1; col := 1;
  NextCh;    // Считать первый символ в ch
  NextLexem; // Считать первую лексему, заполнив LexText, LexKind и, возможно, LexValue
end;
 
procedure Done;
begin
  close(f);
end;
 
function TokToString(t: Tok): string;
begin
  Result := t.ToString;
  case t of
Tok.ID:   Result += ' ' + LexText;
Tok.INUM: Result += ' ' + LexValue; 
  end;
end;
 
end.

Почему при компиляции ошибка leksanalyz.pas(36,15) Fatal: Syntax error, «:» expected but «:=» found?

Понравилась статья? Поделить с друзьями:
  • Fallout 4 имя содержит запрещенные символы как исправить
  • Fatal python error initfsencoding unable to get the locale encoding
  • Fall guys anti cheat error
  • Fatal protocol error bad pack header
  • Failure ошибка проверки источника запроса обновите модуль обмена