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