|
|
researchv10 Norman
%{
/*
* lex.l 1.3
*
* Lexical Analyzer Description for Spreadsheet Program `vis'
*
* A. F. Gettier
* Bell Laboratories
* Update made 11/1/82 11:12:08
* Retrieved 11/15/82 13:22:28
*/
#include <stdio.h>
#include <ctype.h>
#include "vis.h"
#include "y.tab.h"
#undef input()
#undef unput(c)
char input();
extern int Inrow, Incol;
extern char Inline[];
%}
D [0-9]
L [A-Za-z]
A [A-Za-z0-9]
%%
[ \t] ;
\"[^\"]*\" {
yytext[yyleng-1] = '\0';
yylval.sval = copystr( yytext + 1 );
return( STR );
}
\'[^\']*\' {
yytext[yyleng-1] = '\0';
yylval.sval = copystr( yytext + 1 );
return( STR );
}
^[ \t]*{L}+{D}+ {
int i;
(void)foldup( yytext );
yylval.vval.col = -1;
i = 0;
while ( yytext[i] == ' ' || yytext[i] == '\t' ) i++;
while ( ! isdigit( yytext[i] ) ) {
yylval.vval.col = ( yylval.vval.col + 1 ) * 26
+ yytext[i] - 'A';
i++;
}
yylval.vval.row = atoi( &(yytext[i]) ) - 1;
Inrow = yylval.vval.row;
Incol = yylval.vval.col;
yylval.vval.tval = copystr( Inline );
return( AVARIABLE );
}
{L}+{D}+ {
int i;
(void)foldup( yytext );
yylval.nval.col = -1;
i = 0;
while ( ! isdigit( yytext[i] ) ) {
yylval.nval.col = ( yylval.nval.col + 1 ) * 26
+ yytext[i] - 'A';
i++;
}
yylval.nval.row = atoi( &(yytext[i]) ) - 1;
return( VARIABLE );
}
{L}+ {
char tbuf[128];
int tval;
(void)strcpy( tbuf, yytext );
(void)foldup( tbuf );
tval = hashsearch( tbuf );
switch( tval ) {
/*
* Numbers
*/
case PI:
yylval.dval = 3.14159265358979;
return( NUMBER );
/*
* Functions
*/
case ABS:
case ACOS:
case ASIN:
case ATAN:
case ATAN2:
case COS:
case EXP:
case GAMMA:
case HYPOT:
case INT:
case LOG:
case POW:
case SIN:
case SQRT:
yylval.ival = tval;
return( FUNC );
/*
* Actual Tokens
*/
case AT:
case COL:
case DEBUG:
case DOWN:
case DUP:
case DUPLICATE:
case EDIT:
case HELP:
case LEFT:
case LIST:
case POSITION:
case REDRAW:
case REFRESH:
case REP:
case REPLICATE:
case RIGHT:
case ROW:
case SCALE:
case SHIFT:
case SLIDE:
case SHELL:
case SH:
case THRU:
case UP:
case VER:
case WIDTH:
case ZERO:
case QUIT:
return( tval );
case COPY:
case READ:
case WRITE:
yylval.sval = collect();
return( tval );
}
yylval.sval = copystr( yytext );
return( LETTERS );
}
{D}*\.?{D}*[eE][\+\-]?{D}+ { yylval.dval = atof(yytext);return(NUMBER); }
{D}*\.?{D}* { yylval.dval = atof(yytext);return(NUMBER); }
"=" return( '=' );
"," return( ',' );
"[" return( '[' );
"]" return( ']' );
"(" return( '(' );
")" return( ')' );
"+" return( '+' );
"%" return( '%' );
"-" return( '-' );
"**" return( EXPON );
"^" return( EXPON );
"*" return( '*' );
"/" return( '/' );
"\n" return( TERM );
. return( ERROR );
%%
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.