4.4BSD/usr/src/contrib/xns/compiler/scanner.l
%{
#ifndef lint
static char RCSid[] = "$Header: scanner.l,v 2.1 86/07/29 06:48:21 jqj Exp $";
#endif
/*
* scanner.l -- scanner for the XNS courier compiler
*/
/* $Log: scanner.l,v $
* Revision 2.1 86/07/29 06:48:21 jqj
* added support for 37D style comments.
*
* Revision 2.0 85/11/21 07:21:45 jqj
* 4.3BSD standard release
*
* Revision 1.1 85/11/20 12:56:17 jqj
* Initial revision
*
* Revision 1.3 85/03/11 16:40:08 jqj
* Public alpha-test version, released 11 March 1985
*
* Revision 1.2 85/02/21 11:05:51 jqj
* alpha test version
*
* Revision 1.1 85/02/15 13:55:58 jqj
* Initial revision
*
*/
#include "compiler.h"
#include "y.tab.h"
%}
%%
"--"$ |
"----" |
\-(\-[^\n-]+)+(\n|"--") |
[ \t\n] /* whitespace */;
ARRAY { return (ARRAY); }
BEGIN { return (_BEGIN); }
BOOLEAN { return (BOOLEAN); }
CARDINAL { return (CARDINAL); }
CHOICE { return (CHOICE); }
DEPENDS { return (DEPENDS); }
END { return (END); }
ERROR { return (ERROR); }
INTEGER { return (INTEGER); }
LONG { return (LONG); }
OF { return (OF); }
PROCEDURE { return (PROCEDURE); }
PROGRAM { return (PROGRAM); }
RECORD { return (RECORD); }
REPORTS { return (REPORTS); }
RETURNS { return (RETURNS); }
SEQUENCE { return (SEQUENCE); }
STRING { return (STRING); }
TYPE { return (TYPE); }
UNSPECIFIED { return (UNSPECIFIED); }
UPON { return (UPON); }
VERSION { return (VERSION); }
TRUE { return (TRUE); }
FALSE { return (FALSE); }
"=>" { return (_CHOOSES); }
"-"?[0-9]+ {
/*
* decimal constant.
*/
yylval.stringvalue = copy(yytext);
return (number);
}
"-"?[0-9]+[Dd] {
/*
* decimal constant.
*/
yytext[yyleng-1] = '\0';
yylval.stringvalue = copy(yytext);
return (number);
}
"-"?[0-7]+[Bb] {
char buf[BUFSIZ];
/*
* octal constant.
* change to C representation
*/
yytext[yyleng-1] = '\0';
if (*yytext != '-')
sprintf(buf,"0%s", yytext);
else
sprintf(buf,"-0%s", yytext+1);
yylval.stringvalue = copy(buf);
return (number);
}
"-"?[0-9][0-9A-Fa-f]*[Xx] {
char buf[BUFSIZ];
/*
* hex constant.
* change to C representation
*/
yytext[yyleng-1] = '\0';
if (*yytext != '-')
sprintf(buf,"0x%s", yytext);
else
sprintf(buf,"-0x%s", yytext+1);
yylval.stringvalue = copy(buf);
return (number);
}
\"[^"\n"]*\" {
/*
* string constant
*/
yylval.stringvalue = copy(yytext);
return (string);
}
\"([^\n"]|\"\")*\" {
register char *p;
/*
* string constant with embedded ""
*/
for (p=yytext+1; p<yytext+yyleng-1; p++)
if (*p == '"') *p++='\\';
yylval.stringvalue = copy(yytext);
return (string);
}
[a-zA-Z_][a-zA-Z0-9_]* {
yylval.stringvalue = copy(yytext);
return (identifier);
}
. {
return ((int) yytext[0]);
}
%%