Updated Danish translation
[gcalctool.git] / src / mp-equation-lexer.l
blob1172aa04d1edc54b1bf08f2b1de05d29b5264451
1 %option 8bit reentrant bison-locations
2 %option never-interactive
3 %option noyywrap noinput nounput
4 %option prefix="_mp_equation_"
5 %option extra-type="MPEquationParserState *"
6 %option outfile="mp-equation-lexer.c" header-file="mp-equation-lexer.h"
8 %{
9 /*  Copyright (c) 2004-2008 Sami Pietila
10  *  Copyright (c) 2008-2009 Robert Ancell
11  *
12  *  This program is free software; you can redistribute it and/or modify
13  *  it under the terms of the GNU General Public License as published by
14  *  the Free Software Foundation; either version 2, or (at your option)
15  *  any later version.
16  *
17  *  This program is distributed in the hope that it will be useful, but
18  *  WITHOUT ANY WARRANTY; without even the implied warranty of
19  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20  *  General Public License for more details.
21  *
22  *  You should have received a copy of the GNU General Public License
23  *  along with this program; if not, write to the Free Software
24  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
25  *  02111-1307, USA.
26  */
28 #include <stdlib.h>
29 #include <locale.h>
30 #include <string.h>
31 #include <sys/types.h>
33 #include "mp-equation-private.h"
34 #include "mp-equation-parser.h"
35 #include "mp-equation.h"
39 ZERO          "0"|"٠"|"۰"|"߀"|"०"|"০"|"੦"|"૦"|"୦"|"௦"|"౦"|"೦"|"൦"|"๐"|"໐"|"༠"|"၀"|"႐"|"០"|"᠐"|"᥆"|"᧐"|"᭐"|"᮰"|"᱀"|"᱐"|"꘠"|"꣐"|"꤀"|"꩐"|"𐒠"
40 ONE           "1"|"١"|"۱"|"߁"|"१"|"১"|"੧"|"૧"|"୧"|"௧"|"౧"|"೧"|"൧"|"๑"|"໑"|"༡"|"၁"|"႑"|"១"|"᠑"|"᥇"|"᧑"|"᭑"|"᮱"|"᱁"|"᱑"|"꘡"|"꣑"|"꤁"|"꩑"|"𐒡"
41 TWO           "2"|"٢"|"۲"|"߂"|"२"|"২"|"੨"|"૨"|"୨"|"௨"|"౨"|"೨"|"൨"|"๒"|"໒"|"༢"|"၂"|"႒"|"២"|"᠒"|"᥈"|"᧒"|"᭒"|"᮲"|"᱂"|"᱒"|"꘢"|"꣒"|"꤂"|"꩒"|"𐒢"
42 THREE         "3"|"٣"|"۳"|"߃"|"३"|"৩"|"੩"|"૩"|"୩"|"௩"|"౩"|"೩"|"൩"|"๓"|"໓"|"༣"|"၃"|"႓"|"៣"|"᠓"|"᥉"|"᧓"|"᭓"|"᮳"|"᱃"|"᱓"|"꘣"|"꣓"|"꤃"|"꩓"|"𐒣"
43 FOUR          "4"|"٤"|"۴"|"߄"|"४"|"৪"|"੪"|"૪"|"୪"|"௪"|"౪"|"೪"|"൪"|"๔"|"໔"|"༤"|"၄"|"႔"|"៤"|"᠔"|"᥊"|"᧔"|"᭔"|"᮴"|"᱄"|"᱔"|"꘤"|"꣔"|"꤄"|"꩔"|"𐒤"
44 FIVE          "5"|"٥"|"۵"|"߅"|"५"|"৫"|"੫"|"૫"|"୫"|"௫"|"౫"|"೫"|"൫"|"๕"|"໕"|"༥"|"၅"|"႕"|"៥"|"᠕"|"᥋"|"᧕"|"᭕"|"᮵"|"᱅"|"᱕"|"꘥"|"꣕"|"꤅"|"꩕"|"𐒥"
45 SIX           "6"|"٦"|"۶"|"߆"|"६"|"৬"|"੬"|"૬"|"୬"|"௬"|"౬"|"೬"|"൬"|"๖"|"໖"|"༦"|"၆"|"႖"|"៦"|"᠖"|"᥌"|"᧖"|"᭖"|"᮶"|"᱆"|"᱖"|"꘦"|"꣖"|"꤆"|"꩖"|"𐒦"
46 SEVEN         "7"|"٧"|"۷"|"߇"|"७"|"৭"|"੭"|"૭"|"୭"|"௭"|"౭"|"೭"|"൭"|"๗"|"໗"|"༧"|"၇"|"႗"|"៧"|"᠗"|"᥍"|"᧗"|"᭗"|"᮷"|"᱇"|"᱗"|"꘧"|"꣗"|"꤇"|"꩗"|"𐒧"
47 EIGHT         "8"|"٨"|"۸"|"߈"|"८"|"৮"|"੮"|"૮"|"୮"|"௮"|"౮"|"೮"|"൮"|"๘"|"໘"|"༨"|"၈"|"႘"|"៨"|"᠘"|"᥎"|"᧘"|"᭘"|"᮸"|"᱈"|"᱘"|"꘨"|"꣘"|"꤈"|"꩘"|"𐒨"
48 NINE          "9"|"٩"|"۹"|"߉"|"९"|"৯"|"੯"|"૯"|"୯"|"௯"|"౯"|"೯"|"൯"|"๙"|"໙"|"༩"|"၉"|"႙"|"៩"|"᠙"|"᥏"|"᧙"|"᭙"|"᮹"|"᱉"|"᱙"|"꘩"|"꣙"|"꤉"|"꩙"|"𐒩"
49 DECIMAL       "."|","
50 DEC           {ZERO}|{ONE}|{TWO}|{THREE}|{FOUR}|{FIVE}|{SIX}|{SEVEN}|{EIGHT}|{NINE}
51 HEX           {DEC}|[A-F]|[a-f]
52 SUPER_DIGITS  "⁰"|"¹"|"²"|"³"|"⁴"|"⁵"|"⁶"|"⁷"|"⁸"|"⁹"
53 SUPER_MINUS   "⁻"
54 SUB_DIGITS    "₀"|"₁"|"₂"|"₃"|"₄"|"₅"|"₆"|"₇"|"₈"|"₉"
55 FRACTION      "½"|"⅓"|"⅔"|"¼"|"¾"|"⅕"|"⅖"|"⅗"|"⅘"|"⅙"|"⅚"|"⅛"|"⅜"|"⅝"|"⅞"
56 GREEKS        "α"|"β"|"γ"|"δ"|"ε"|"ζ"|"η"|"θ"|"ι"|"κ"|"λ"|"μ"|"ν"|"ξ"|"ο"|"π"|"ρ"|"ς"|"σ"|"τ"|"υ"|"φ"|"χ"|"ψ"|"ω"
57 LETTERS       [a-zA-Z]|{GREEKS}
59 SUP_NUM  {SUPER_DIGITS}+
60 NSUP_NUM {SUPER_MINUS}{SUPER_DIGITS}+
61 SUB_NUM  {SUB_DIGITS}+
62 WORD     {LETTERS}+
63 DEC_NUM  {DEC}+|{DEC}*{DECIMAL}{DEC}+
64 BASE_NUM {HEX}+{SUB_NUM}|{HEX}*{DECIMAL}{HEX}+{SUB_NUM}
66 NUMBER   {DEC_NUM}|{BASE_NUM}|{FRACTION}|{DEC_NUM}{FRACTION}
67 VARIABLE {WORD}|{WORD}{SUB_NUM}|{WORD}"⁻¹"|{GREEKS}
69 MOD  [mM][oO][dD]
70 AND  "∧"|[aA][nN][dD]
71 OR   "∨"|[oO][rR]
72 XOR  "⊕"|[xX][oO][rR]
73 NOT  "¬"|"~"|[nN][oO][tT]
74 IN   [iI][nN]
78 "+"         {return tADD;}
79 "-"|"−"     {return tSUBTRACT;}
80 "*"|"×"     {return tMULTIPLY;}
81 "/"|"∕"|"÷" {return tDIVIDE;}
82 {MOD}       {return tMOD;}
83 "√"         {return tROOT;}
84 "∛"         {return tROOT3;}
85 "∜"         {return tROOT4;}
86 {NOT}       {return tNOT;}
87 {AND}       {return tAND;}
88 {OR}        {return tOR;}
89 {XOR}       {return tXOR;}
90 {IN}        {return tIN;}
91 {NUMBER}    {if (mp_set_from_string(yytext, &yylval->int_t) != 0) REJECT; return tNUMBER;}
92 {SUP_NUM}   {yylval->integer = super_atoi(yytext); return tSUPNUM;}
93 {NSUP_NUM}  {yylval->integer = super_atoi(yytext); return tNSUPNUM;}
94 {SUB_NUM}   {yylval->integer = sub_atoi(yytext); return tSUBNUM;}
95 {VARIABLE}  {\
96     MPEquationParserState *state = _mp_equation_get_extra(yyscanner);\
97     if (state->function_is_defined(state, yytext)) {\
98         yylval->name = strdup(yytext);\
99         return tFUNCTION;\
100     }\
101     else {\
102         yylval->name = strdup(yytext);\
103         return tVARIABLE;\
104     }\
106 [ \t\n]
107 .           {return *yytext;}