Category : C Source Code
Archive   : TCLEX.ZIP
Filename : CLEX.LXI

 
Output of file : CLEX.LXI contained in archive : TCLEX.ZIP

/*
* C lex
*/
%{
extern char *install();
%}
digit = [0-9];
letter = [a-zA-Z_$];
name = letter (letter|digit)*;
integer = digit digit*;
%{
main()
{
register int i;
char buffer[80];
extern char *token();

while (i = yylex()) {
gettoken(buffer, sizeof buffer);
printf("yylex returns %d, token = \"%s\"\n",
i, buffer);
if (i == LEXERR) {
error("LEXERR -- abort");
break;
}
}
}
%}
%%
%{
register int c;
%}
#DEFINE { return(__na__); }
#ELSE { return(__na__); }
#ENDIF { return(__na__); }
#IFDEF { return(__na__); }
#INCLUDE { return(__na__); }
STRUCT { return(-1); }
AUTO { return(__na__); }
EXTERN { return(__na__); }
STATIC { return(__na__); }
REGISTER { return(__na__); }
GOTO { return(__na__); }
RETURN { return(__na__); }
IF { return(__na__); }
WHILE { return(__na__); }
ELSE { return(__na__); }
SWITCH { return(__na__); }
CASE { return(__na__); }
BREAK { return(__na__); }
CONTINUE { return(__na__); }
DO { return(__na__); }
DEFAULT { return(__na__); }
FOR { return(__na__); }
SIZEOF { return(__na__); }
TYPEDEF { return(__na__); }
UNION { return(__na__); }
name {
lexval = install();
return(6);
}
integer {

lexval = install();
return(7);
}
"<" { return(__na__); }
"<=" { return(__na__); }
"=" { return(__na__); }
"!=" { return(__na__); }
">=" { return(__na__); }
">" { return(__na__); }
"<<" { return(__na__); }
">>" { return(__na__); }
"=+" { return(__na__); }
"=-" { return(__na__); }
"=/" { return(__na__); }
"=%" { return(__na__); }
"%" { return(__na__); }
"/" { return(__na__); }
"*" { return(__na__); }
"=*" { return(__na__); }
"=<<" { return(__na__); }
"=>>" { return(__na__); }
"&" { return(__na__); }
"|" { return(__na__); }
"=|" { return(__na__); }
"=&" { return(__na__); }
"+" { return(__na__); }
"-" { return(__na__); }
"++" { return(__na__); }
"--" { return(__na__); }
";" { return(__na__); }
"?" { return(__na__); }
"." { return(__na__); }
"," { return(__na__); }
"/*" {
comment("*/");
return(LEXSKIP);
}
"'" {
if ((c = mapch('\'', '\\')) != -1)
while (mapch('\'', '\\') != -1)
lexerror("Long character constant");
printf("%c", c);
return(__na__);
}
"\"" { return(__na__); } /* This should call "lexswitch" */
"\n" { return(__na__); }
" " { return(__na__); }
"\t" { return(__na__); }
"||" { return(__na__); }
"&&" { return(__na__); }
"(" { return(__na__); }
")" { return(__na__); }
"[" { return(__na__); }
"]" { return(__na__); }
"{" { return(__na__); }
"}" { return(__na__); }
%%
char *
install()
/*
* Install the current token in the symbol table
*/

{
register char *buffer; /* Where to put the character */
register char *first; /* -> first byte of the token */
char *last; /* Can't be in a register */
extern char *token();

first = token(&last); /* Find first/last of token */
if ((buffer = alloc((last - first) + 1)) == NULL) {
error("Out of space in install");
exit(1);
}
first = copy(buffer, first, (last - first));
*first = '\0';
return(buffer);
}


  3 Responses to “Category : C Source Code
Archive   : TCLEX.ZIP
Filename : CLEX.LXI

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/