Консультация № 177660
04.04.2010, 03:31
0.00 руб.
0 2 1
Добрый вечер! Имеется программа, лексический анализатор, он предусматривает ввод комментариев, но при их слитном написании с вводимым текстом выдает ошибку. URL >> Надеюсь на ваш совет, буду очень признательна.

Обсуждение

Неизвестный
04.04.2010, 06:41
общий
это ответ
Здравствуйте, sunny91.
Если быть точным, комментарии у вас вообще не распознаются, а не только при слитном написании.
Надо внести след.изменения в ваш текст (выделены жирным):
Код:
  while i <= length(line) do
begin
chr := line[i];
inc(i);

comment:=(chr='{') or (chr<>'}') and comment; {Исключение комментариев из анализа, вложенность не учитывается}

if (chr = ' ') or (chr = #13) or (chr = #10) or comment then
continue;

if (not (chr in SymbOfFirstGr)) and (not (chr in SymbOfSecondGr)) and (not (chr in commentSymb)) then
begin
Dialogs.MessageDlg('Ошибка '+IntToStr(i-1)+' символ не верен ',mtError,[mbOk],0);
exit;
end;

if chr in SymbOfFirstGr then
begin
start := i-1;
while (chr <> ' ') and (chr <> #13) and (chr <> #10) and (chr<>'{') and ( i <= length(line)+1) do
begin
chr := line [i];
inc(i);
end;
curword := copy(line, start, i-start-1);
CheckFirstGrammar(curword);
dec(i);
continue;
end;

if chr in SymbOfSecondGr then
begin
start := i-1;
while (chr <> ' ') and (chr <> #13) and (chr <> #10) and (chr<>'{') and ( i <= length(line)+1) do
begin
chr := line [i];
inc(i);
end;
curword := copy(line, start, i-start-1);
CheckSecondGrammar(curword);
dec(i);
continue;
end;

end;

Так вроде работает как надо, хотя код можно было бы и подоптимизировать.
5
Неизвестный
04.04.2010, 18:53
общий
Спасибо огромное!
Форма ответа