Системное программирование в UNIX средствами Free Pascal

. Генератор лексических анализаторов lex


Упражнение 13.66. Составьте вариант программы подсчета служебных слов языка Си, не учитывающий появление этих слов, заключенных в кавычки.

%{

uses lexlib;

const

_AND=1;

_ASM=2;

_ARRAY=3;

_BEGIN=4;

_CASE=5;

_CONST=6;

_CONSTRUCTOR=7;

_DESTRUCTOR=8;

_DIV=9;



_DO=10;

_DOWNTO=11;

_ELSE=12;

_END=13;

_EXPORTS=14;

_FILE=15;

_FOR=16;

_FUNCTION=17;

_GOTO=18;

_IF=19;

_IMPLEMENTATION=20;

_IN=21;

_INHERITED=22;

_INLINE=23;

_INTERFACE=24;

_LABEL=25;

_LIBRARY=26;

_MOD=27;

_NIL=28;

_NOT=29;

_OBJECT=30;

_OF=31;

_OR=32;

_PACKED=33;

_PROCEDURE=34;

_PROGRAM=35;

_RECORD=36;

_REPEAT=37;

_SET=38;

_SHL=39;

_SHR=40;

_STRING=41;

_THEN=42;

_TO=43;

_TYPE=44;

_UNIT=45;

_UNTIL=46;

_USES=47;

_VAR=48;

_WHILE=49;

_WITH=50;

_XOR=51;

_STR=52;

_IDENT=53;

%}

letter  [a-zA-Z]

digit   [0-9]

%%

'[^']*'            begin yydone:=true; yyretval:=_STR; end;

\"[^\"]\"   begin yydone:=true; yyretval:=_STR; end;

"end."          begin yydone:=true; yyretval:=_END; end;

and             begin yydone:=true; yyretval:=_AND; end;

asm             begin yydone:=true; yyretval:=_ASM; end;

array           begin yydone:=true; yyretval:=_ARRAY; end;

begin           begin yydone:=true; yyretval:=_BEGIN; end;

case            begin yydone:=true; yyretval:=_CASE; end;

const           begin yydone:=true; yyretval:=_CONST; end;

constructor     begin yydone:=true; yyretval:=_CONSTRUCTOR; end;

destructor      begin yydone:=true; yyretval:=_DESTRUCTOR; end;

div             begin yydone:=true; yyretval:=_DIV; end;

do              begin yydone:=true; yyretval:=_DO; end;

downto          begin yydone:=true; yyretval:=_DOWNTO; end;

else            begin yydone:=true; yyretval:=_ELSE; end;

end             begin yydone:=true; yyretval:=_END; end;

exports         begin yydone:=true; yyretval:=_EXPORTS; end;

file            begin yydone:=true; yyretval:=_FILE; end;

for             begin yydone:=true; yyretval:=_FOR; end;

function        begin yydone:=true; yyretval:=_FUNCTION; end;



Содержание раздела