Newer
Older
xmpp-bot / src / expenses / lex.l
/* expenses.l: Expenses lexical anasis file
 * TODO free memory allocated with g_string_new AFTER the parser is done (see grammar.y)
 * TODO support italian-style floating point numbers e.g. 12,34
*/

%{
#include <stdio.h>
#include <glib.h>
#include "grammar.tab.h"
%}

%option caseless
                        
DIGIT    [0-9]

%%

{DIGIT}+                       yylval.res=atoi(yytext); return TOK_INT;
{DIGIT}+"."{DIGIT}*            yylval.val=atof(yytext); return TOK_DOUBLE;
"-"|out|spesa                  yylval.cmd=BOT_CMD_OUT; return TOK_CMD_OUT;
"+"|in|ricavo                  yylval.cmd=BOT_CMD_IN; return TOK_CMD_IN;
del|storno                     yylval.cmd=BOT_CMD_DELETE; return TOK_CMD_DEL;
reminder|ricordami             yylval.cmd=BOT_CMD_REMINDER; return TOK_CMD_REMINDER;
report                         yylval.cmd=BOT_CMD_REPORT; return TOK_CMD_REPORT;
day|days|giorno|giorni              yylval.tsp=BOT_TS_DAY; return TOK_TS_DAY;
week|weeks|sett|settimana|settimane  yylval.tsp=BOT_TS_WEEK; return TOK_TS_WEEK;
month|months|mese|mesi                yylval.tsp=BOT_TS_MONTH; return TOK_TS_MONTH;
year|years|anno|anni                 yylval.tsp=BOT_TS_YEAR; return TOK_TS_YEAR;
[a-zA-Z0-9_]+                  yylval.str=g_string_new(yytext); return TOK_USER; /* user can't have special characters */
\"[^\n]+\"                     yylval.str=g_string_new(yytext); return TOK_STR;  /* anything excepts '\n'; needs to be at the bottom of flex rules here */
[ \t]+                         /* ignore whitespace */;
\n                             /* ignore end of line */;

%%