aboutsummaryrefslogtreecommitdiff
path: root/sem1/osc/mm11/regn/regn.l
diff options
context:
space:
mode:
Diffstat (limited to 'sem1/osc/mm11/regn/regn.l')
-rw-r--r--sem1/osc/mm11/regn/regn.l40
1 files changed, 40 insertions, 0 deletions
diff --git a/sem1/osc/mm11/regn/regn.l b/sem1/osc/mm11/regn/regn.l
new file mode 100644
index 0000000..bbaadb8
--- /dev/null
+++ b/sem1/osc/mm11/regn/regn.l
@@ -0,0 +1,40 @@
+%{
+#include <math.h>
+#include <string.h>
+#include "symtab.h"
+#include "regn.tab.h"
+%}
+
+realtal ([0-9]+|([0-9]*\.[0-9]+))([eE][-+]?[0-9]+)?
+var_begin let
+op_log log
+op_exp exp
+op_sqrt sqrt
+var [A-Za-z][A-Za-z0-9]*
+
+%%
+{realtal} {yylval.dval = atof(yytext);
+ return TAL;}
+{var_begin} {return VAR_BEGIN;}
+{op_log} {return LOG;}
+{op_exp} {return EXP;}
+{op_sqrt} {return SQRT;}
+
+{var} {yylval.string = strdup(yytext); return VAR;}
+
+[ \t] ;
+
+
+'$' {return 0;}
+
+\n|. {return yytext[0];}
+
+%%
+
+void init_sym()
+{
+ int i;
+ for (i = 0; i < HASHSIZE; i++)
+ symbolarray[i] = NULL;
+}
+