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(); }
|
||
|
|
||
|
%%
|