more simplification, got gtk.c under 3k lines
[gcalctool.git] / gcalctool / lr_tokeniser.l
blob300de4022610f55e2dc72a62da9ae644bce76abc
1 %option noyywrap
3 %{
5 /*  $Header: /cvs/gnome/gcalctool/gcalctool/lr_tokeniser.l,v 1.7 2005/12/19 15:46:57 richb Exp $
6  *
7  *  Copyright (C) 2004-2007 Sami Pietila
8  *
9  *  This program is free software; you can redistribute it and/or modify
10  *  it under the terms of the GNU General Public License as published by
11  *  the Free Software Foundation; either version 2, or (at your option)
12  *  any later version.
13  *           
14  *  This program is distributed in the hope that it will be useful, but 
15  *  WITHOUT ANY WARRANTY; without even the implied warranty of
16  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 
17  *  General Public License for more details.
18  *           
19  *  You should have received a copy of the GNU General Public License
20  *  along with this program; if not, write to the Free Software
21  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
22  *  02111-1307, USA.
23  */
25 #include <stdlib.h>
26 #include <locale.h>
27 #include <string.h>
28 #include <sys/types.h>
29 #include "calctool.h"
30 #include "display.h"
31 #include "functions.h" /* FIXME: Needed for gc_strdup() */
32 #include "lr_parser.h"
33 #include "lr_parser.tab.h"
36 DIGIT   [0-9]
37 DECIMAL "."
38 SIGN    "+"|"-" 
39 CHARACTER [a-z]|[A-Z]
40 HEX     [0-9]|[A-F]|[a-f]
41 BIN     "0"|"1"
42 OCT     [0-7]
43 NUMBER  [DIGIT}*{DECIMAL}{DIGIT}+|{DIGIT}
44 SEPARATOR "e+"|"e-"
45 HEXS [0-9]|[A-F]|" "
49 "Abs" {return tABS;}
50 "Acosh" {return tACOSH;}
51 "Acos" {return tACOS;}
52 "AND" {return tAND;}
53 "Asinh" {return tASINH;}
54 "Asin" {return tASIN;}
55 "Atanh" {return tATANH;}
56 "Atan" {return tATAN;}
57 "Cbrt" {return tCBRT;}
58 "Chs" {return tCHS;}
59 "Cosh" {return tCOSH;}
60 "Cos" {return tCOS;}
61 "Ddb" {return tDDB;}
62 "Exp" {return tEXP;}
63 "Frac" {return tFRAC;}
64 "Fv" {return tFV;}
65 "Int" {return tINT;}
66 "Ln" {return tLN;}
67 "Log" {return tLOG10;}
68 "NOT" {return tNOT;}
69 "OR" {return tOR;}
70 "Pi" {return tPI;}
71 "Pmt" {return tPMT;}
72 "Pv" {return tPV;}
73 "Rand" {return tRAND;}
74 "Rate" {return tRATE;}
75 "Sinh" {return tSINH;}
76 "Sin" {return tSIN;}
77 "Sln" {return tSLN;}
78 "Sqrt" {return tSQRT;}
79 "Syd" {return tSYD;}
80 "Tanh" {return tTANH;}
81 "Tan" {return tTAN;}
82 "Term" {return tTERM;}
83 "u16" {return tU16;}
84 "u32" {return tU32;}
85 "XNOR" {return tXNOR;}
86 "XOR" {return tXOR;}
88 "Rcl" {return tRCL;}
89 "Sto" {return tSTO;}
90 "Clr" {return tCLR;}
92 {HEXS}+ {
93   if (strlen(yytext) > 40) parser_state.error = EINVAL;
94   MPstr_to_num(yytext, v->base, lrlval.int_t);
95   return tINUMBER;
98 {HEXS}*{DECIMAL}{HEXS}+ {
99   if (strlen(yytext) > 40) parser_state.error = EINVAL;
100   MPstr_to_num(yytext, v->base, lrlval.int_t);
101   return tDNUMBER;
104 {HEXS}+{SEPARATOR}{HEXS}+ {
105   MPstr_to_num(yytext, v->base, lrlval.int_t);
106   return tDNUMBER;
109 [ \t\n]
110 .        {return *yytext; }
112 %% 
114 void
115 reset_lr_tokeniser()
117 lr_flush_buffer(YY_CURRENT_BUFFER);