Составьте программу удаления из программы
{letter}({letter}|{digit})* begin yydone:=true; yyretval:=_IDENT; end;
\n ;
. ;
%%
function yywrap:integer;
begin
yywrap:=1;
end;
const
words:array[_AND.._XOR] of string=(
'AND',
'ASM',
'ARRAY',
'BEGIN',
'CASE',
'CONST',
'CONSTRUCTOR',
'DESTRUCTOR',
'DIV',
'DO',
'DOWNTO',
'ELSE',
'END',
'EXPORTS',
'FILE',
'FOR',
'FUNCTION',
'GOTO',
'IF',
'IMPLEMENTATION',
'IN',
'INHERITED',
'INLINE',
'INTERFACE',
'LABEL',
'LIBRARY',
'MOD',
'NIL',
'NOT',
'OBJECT',
'OF',
'OR',
'PACKED',
'PROCEDURE',
'PROGRAM',
'RECORD',
'REPEAT',
'SET',
'SHL',
'SHR',
'STRING',
'THEN',
'TO',
'TYPE',
'UNIT',
'UNTIL',
'USES',
'VAR',
'WHILE',
'WITH',
'XOR' );
var
kwcount:array [1..51] of integer;
token,i:integer;
begin
if paramcount<>1 then
begin
writeln('Используйте: ', paramstr(0), ' файл');
exit;
end;
assign(yyinput,paramstr(1));
{$I-}
reset(yyinput);
if ioresult<>0 then
begin
writeln('Ошибка открытия для чтения ', paramstr(1));
exit;
end;
for i:=_AND to _XOR do
kwcount[i]:=0;
token:=yylex;
while not eof(yyinput) do
begin
if token in [_AND.._XOR] then
inc(kwcount[token]);
token:=yylex;
end;
if token in [_AND.._XOR] then
inc(kwcount[token]);
for i:=_AND to _XOR do
if kwcount[i]<>0 then
writeln('Слово ', words[i], ' встречается ', kwcount[i], ' раз');
close(yyinput);
end.
Упражнение 13.67. Составьте программу удаления из программы на языке Си всех комментариев. Обратите внимание на особые случаи со строками в кавычках и символьными константами; так строка char s[] = "/*"; не является началом комментария! Комментарии записывайте в отдельный файл.
%{
uses lexlib;
const
STROKA=1;
COMMENT=2;
ANY=3;
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий