55 lines
1.6 KiB
Plaintext
55 lines
1.6 KiB
Plaintext
%{
|
|
#define YYSTYPE double
|
|
#include "cal_tab.h"
|
|
int c;
|
|
|
|
extern YYSTYPE yylval;
|
|
double translate(int type);
|
|
void count(void);
|
|
void setLastVar(void);
|
|
int lookup(int *typeOfObject);
|
|
struct lextab *lexswitch(struct lextab *lp);
|
|
|
|
|
|
#define INTCONST 1
|
|
#define DBLCONST 2
|
|
#define HEXCONST 3
|
|
#define VARIABLE 4
|
|
#define OTHER 5
|
|
|
|
%}
|
|
|
|
digit = [0-9];
|
|
letter = [a-zA-Z_];
|
|
hex = [a-fA-F0-9];
|
|
/* -- */
|
|
space = [\40];
|
|
/*number = (digit* | "-" digit*);*/
|
|
number = digit*;
|
|
exp = [Ee] number;
|
|
doubl = number "." (digit* | digit* exp);
|
|
|
|
%%
|
|
hex hex* [hH] { count(); yylval = translate(HEXCONST); return VALUE; }
|
|
digit* { count(); yylval = translate(INTCONST); return VALUE; }
|
|
digit digit* [Dd] { count(); yylval = translate(INTCONST); return VALUE; }
|
|
doubl { count(); yylval = translate(DBLCONST); return VALUE; }
|
|
letter* { count(); { int typeOfObject; setLastVar(); yylval = lookup(&typeOfObject); return typeOfObject; }}
|
|
letter (letter|digit)* { count(); { int typeOfObject; setLastVar(); yylval = lookup(&typeOfObject); return typeOfObject; }}
|
|
'+' { count(); return '+'; }
|
|
'-' { count(); return '-'; }
|
|
'*' { count(); return '*'; }
|
|
'/' { count(); return '/'; }
|
|
'%' { count(); return '%'; }
|
|
'&' { count(); return '&'; }
|
|
'|' { count(); return '|'; }
|
|
'(' { count(); return '('; }
|
|
')' { count(); return ')'; }
|
|
'=' { count(); return '='; }
|
|
',' { count(); return ','; }
|
|
';' { count(); return ';'; }
|
|
[ \t\v\f] { count(); }
|
|
. { count(); }
|
|
|
|
%%
|