%{ (* Lexical analyzer for the YREF program, V1.1 4-30-91 AG implements a lexical analyzer for Yacc grammars *) function yywrap : Boolean; begin yywrap := true; (* files are closed by main program *) end(*yywrap*); %} L [A-Za-z_] D [0-9] Q \\([0-7]{1,3}|.) P [\\%] %% %{ var c : Char; %} (* whitespace: *) [ \t\n] ; (* comments: *) "/*" skip('*/'); (* identifiers, literals and numbers: *) {L}({L}|{D})* begin symlineno := yylineno; yylval := key(yytext, max_syms, lookup, entry); scan(c); if c=':' then return(C_ID) else return(ID); end; '([^'\n\\]|{Q})+' | \"([^"\n\\]|{Q})+\" return(LITERAL); {D}+ return(NUMBER); (* keywords (various synonyms): *) {P}token | {P}term | {P}0 return(PTOKEN); {P}left | {P}< return(PLEFT); {P}right | {P}> return(PRIGHT); {P}nonassoc | {P}binary | {P}2 return(PNONASSOC); {P}type return(PTYPE); {P}start return(PSTART); {P}prec | {P}= return(PPREC); {P}{P} return(PP); {P}\{ return(LCURL); {P}\} return(RCURL); (* others: *) . returnc(yytext[1]);