|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T w
Length: 4645 (0x1225)
Types: TextFile
Names: »web2c.lex«
└─⟦060c9c824⟧ Bits:30007080 DKUUG TeX 2/12/89
└─⟦this⟧ »./tex82/web2cdir/web2c.lex«
%{
#include "web2c.h"
#include "web2cy.h"
char conditional[20], negbuf[2], temp[20];
extern int doing_statements;
%}
DIGIT [0-9]
ALPHA [a-zA-Z]
ALPHANUM ({DIGIT}|{ALPHA})
IDENTIFIER ({ALPHA}{ALPHANUM}*)
NUMBER ({DIGIT}+)
SIGN ("+"|"-")
SIGNED ({SIGN}?{NUMBER})
WHITE [ \n\t]+
REAL ({NUMBER}"."{NUMBER}("e"{SIGNED})?)|({NUMBER}"e"{SIGNED})
COMMENT (("{"[^}]*"}")|("(*"([^*]|"*"[^)])*"*)"))
W ({WHITE}|"packed")+
WW ({WHITE}|{COMMENT}|"packed")*
HHB0 ("hh"{WW}"."{WW}"b0")
HHB1 ("hh"{WW}"."{WW}"b1")
%%
{W} ;
"{" {while (input() != '}');
}
"#" {
register int c;
(void) putc('#', std);
while ((c = input()) && c != ';')
(void) putc(c, std);
(void) putc('\n', std);
}
"ifdef(" {register int c;
extern char my_routine[];
register char *cp=conditional;
new_line();
(void) input();
while ((c = input()) != '\'')
*cp++ = c;
*cp = '\0';
(void) input();
if (doing_statements) fputs("\t;\n", std);
(void) fprintf(std,
"#ifdef %s\n", conditional);
}
"endif(" {register int c;
new_line();
fputs("#endif /* ", std);
(void) input();
while ((c = input()) != '\'')
(void) putc(c, std);
(void) input();
conditional[0] = '\0';
fputs(" */\n", std);
}
"procedure "[a-z]+";"[ \n\t]*"forward;" ;
"@define" return(last_tok=define_tok);
"@field" return(last_tok=field_tok);
"and" return(last_tok=and_tok) ;
"array" return(last_tok=array_tok) ;
"begin" return(last_tok=begin_tok) ;
"case" return(last_tok=case_tok) ;
"const" return(last_tok=const_tok) ;
"div" return(last_tok=div_tok) ;
"break" return(last_tok=break_tok);
"do" return(last_tok=do_tok) ;
"downto" return(last_tok=downto_tok) ;
"else" return(last_tok=else_tok) ;
"end" return(last_tok=end_tok) ;
"file" return(last_tok=file_tok) ;
"for" return(last_tok=for_tok) ;
"function" return(last_tok=function_tok) ;
"goto" return(last_tok=goto_tok) ;
"if" return(last_tok=if_tok) ;
"label" return(last_tok=label_tok) ;
"mod" return(last_tok=mod_tok) ;
"not" return(last_tok=not_tok) ;
"of" return(last_tok=of_tok) ;
"or" return(last_tok=or_tok) ;
"procedure" return(last_tok=procedure_tok) ;
"program" return(last_tok=program_tok) ;
"record" return(last_tok=record_tok) ;
"repeat" return(last_tok=repeat_tok) ;
{HHB0} return(last_tok=hhb0_tok) ;
{HHB1} return(last_tok=hhb1_tok) ;
"then" return(last_tok=then_tok) ;
"to" return(last_tok=to_tok) ;
"type" return(last_tok=type_tok) ;
"until" return(last_tok=until_tok) ;
"var" return(last_tok=var_tok) ;
"while" return(last_tok=while_tok) ;
"others" return(last_tok=others_tok) ;
{REAL} {
(void) sprintf(temp, "%s%s", negbuf, yytext);
negbuf[0] = '\0';
return(last_tok=r_num_tok) ;
}
{NUMBER} {
(void) sprintf(temp, "%s%s", negbuf, yytext);
negbuf[0] = '\0';
return(last_tok=i_num_tok) ;
}
("'"([^']|"''")"'") return(last_tok=single_char_tok) ;
("'"([^']|"''")*"'") return(last_tok=string_literal_tok) ;
"+" { if ((last_tok>=undef_id_tok &&
last_tok<=field_id_tok) ||
last_tok==i_num_tok ||
last_tok==r_num_tok ||
last_tok==')' ||
last_tok==']')
return(last_tok='+') ;
else return(last_tok=unary_plus_tok) ; }
"-" { if ((last_tok>=undef_id_tok &&
last_tok<=field_id_tok) ||
last_tok==i_num_tok ||
last_tok==r_num_tok ||
last_tok==')' ||
last_tok==']')
return(last_tok='-') ;
else {
int c;
while ((c = input()) == ' ' || c == '\t');
unput(c);
if (c < '0' || c > '9') {
return(last_tok = unary_minus_tok);
}
negbuf[0] = '-';
}}
"*" return(last_tok='*') ;
"/" return(last_tok='/') ;
"=" return(last_tok='=') ;
"<>" return(last_tok=not_eq_tok) ;
"<" return(last_tok='<') ;
">" return(last_tok='>') ;
"<=" return(last_tok=less_eq_tok) ;
">=" return(last_tok=great_eq_tok) ;
"(" return(last_tok='(') ;
")" return(last_tok=')') ;
"[" return(last_tok='[') ;
"]" return(last_tok=']') ;
":=" return(last_tok=assign_tok) ;
".." return(last_tok=two_dots_tok) ;
"." return(last_tok='.') ;
"," return(last_tok=',') ;
";" return(last_tok=';') ;
":" return(last_tok=':') ;
"^" return(last_tok='^') ;
{IDENTIFIER} { (void) strcpy(last_id,yytext) ;
l_s=search_table(last_id) ;
if (l_s == -1) return(last_tok=undef_id_tok);
return(last_tok=sym_table[l_s].typ);
}
. return(last_tok=unknown_tok) ;
%%