Warning, /frameworks/kholidays/src/parsers/plan2/holidayscannerplan.lpp is written in an unsupported language. File is not indexed.

0001 /*
0002     Original version from plan:
0003         SPDX-FileCopyrightText: Thomas Driemeyer <thomas@bitrot.de>
0004 
0005     Adapted for use in KOrganizer:
0006         SPDX-FileCopyrightText: Preston Brown <pbrown@kde.org> and
0007         SPDX-FileCopyrightText: Reinhold Kainhofer <reinhold@kainhofer.com>
0008 
0009     Major rewrite using Bison C++ skeleton:
0010         SPDX-FileCopyrightText: 2010 John Layt <john@layt.net>
0011 
0012     SPDX-License-Identifier: LGPL-2.0-or-later
0013 */
0014 
0015 %{ /*** C/C++ Declarations ***/
0016 # include <cstdlib>
0017 # include <errno.h>
0018 # include <limits.h>
0019 # include <string>
0020 
0021 # include <kholidays_debug.h>
0022 
0023 # include "holidayscannerplan_p.h"
0024 # include "holidayparserdriverplan_p.h"
0025 # include "holidayparserplan.hpp"
0026 
0027 /* import the parser's token type into a local typedef */
0028 typedef KHolidays::HolidayParserPlan::token token;
0029 typedef KHolidays::HolidayParserPlan::token_type token_type;
0030 
0031 /* By default yylex returns int, we use token_type. Unfortunately yyterminate
0032  * by default returns 0, which is not of token_type. */
0033 # define yyterminate() return token::END
0034 
0035 /* This disables inclusion of unistd.h, which is not available under Visual C++
0036  * on Win32. The C++ scanner uses STL streams instead. */
0037 # define YY_NO_UNISTD_H
0038 %}
0039 
0040 /*** Flex Declarations and Options ***/
0041 
0042 /* enable c++ scanner class generation */
0043 %option c++
0044 
0045 /* change the name of the scanner class. results in "HolidayScannerFlexLexer" */
0046 %option prefix="HolidayScanner"
0047 
0048 /* the manual says "somewhat more optimized" */
0049 %option batch
0050 
0051 /* enable scanner to generate debug output. disable this for release
0052  * versions. */
0053 %option debug
0054 
0055 /* no support for include files is planned */
0056 %option yywrap nounput
0057 
0058 /* enables the use of start condition stacks */
0059 %option stack
0060 
0061 %option 8bit
0062 
0063 /* The following paragraph suffices to track locations accurately. Each time
0064  * yylex is invoked, the begin position is moved onto the end position. */
0065 %{
0066 # define YY_USER_ACTION  yylloc->columns( yyleng );
0067 %}
0068 
0069 %% /*** Regular Expressions Part ***/
0070 
0071 %{
0072     /* code to place at the beginning of yylex() */
0073     // reset location
0074     yylloc->step();
0075 %}
0076 
0077 #.*\n               { yylloc->lines( yyleng ); yylloc->step(); }
0078 ^:.*\n              { yylloc->lines( yyleng ); yylloc->step(); }
0079 [ \t\r]+            { yylloc->step(); }
0080 [\n]+               { yylloc->lines( yyleng ); yylloc->step(); }
0081 [-+*/%.!?:()\[\]]   { return KHolidays::HolidayParserPlan::token_type( *yytext ); }
0082 
0083 country             { return token::COUNTRY; }
0084 language            { return token::LANGUAGE; }
0085 name                { return token::NAME; }
0086 description         { return token::DESCRIPTION; }
0087 
0088 [0-9]+              { yylval->ival = atoi( yytext ); return token::NUMBER; }
0089 
0090 \"[^"]*\"           { yylval->sval = strdup( yytext + 1 );
0091                       yylval->sval[ strlen( yylval->sval ) - 1 ] = 0;
0092                       return token::STRING; }
0093 
0094 every               ;
0095 day                 ;
0096 days                ;
0097 on                  ;
0098 to                  ;
0099 in                  { return token::INOP; }
0100 if                  { return token::IF; }
0101 plus                { return token::PLUS; }
0102 minus               { return token::MINUS; }
0103 year                { return token::YEAR; }
0104 leapyear            { return token::LEAPYEAR; }
0105 easter              { return token::EASTER; }
0106 pascha              { return token::PASCHA; }
0107 length              { return token::LENGTH; }
0108 shift               { return token::SHIFT; }
0109 
0110 "=="                { return token::EQ; }
0111 "!="                { return token::NE; }
0112 "<="                { return token::LE; }
0113 ">="                { return token::GE; }
0114 "<"                 { return token::LT; }
0115 ">"                 { return token::GT; }
0116 "&&"                { return token::AND;}
0117 "||"                { return token::OR; }
0118 
0119 1st|first           { yylval->ival =      1; return token::NUMBER; }
0120 2nd|second          { yylval->ival =      2; return token::NUMBER; }
0121 3rd|third           { yylval->ival =      3; return token::NUMBER; }
0122 4th|fourth          { yylval->ival =      4; return token::NUMBER; }
0123 5th|fifth           { yylval->ival =      5; return token::NUMBER; }
0124 last                { yylval->ival =  99999; return token::NUMBER; }
0125 any                 { yylval->ival = -99999; return token::NUMBER; }
0126 noop                { yylval->ival =      0; return token::NUMBER; }
0127 
0128 before              { yylval->ival =  -1; return token::NUMBER; }
0129 after               { yylval->ival =   1; return token::NUMBER; }
0130 
0131 public              { yylval->sval = (char *)"public"; return token::CATEGORY; }
0132 civil               { yylval->sval = (char *)"civil"; return token::CATEGORY; }
0133 religious           { yylval->sval = (char *)"religious"; return token::CATEGORY; }
0134 school              { yylval->sval = (char *)"school"; return token::CATEGORY; }
0135 government          { yylval->sval = (char *)"government"; return token::CATEGORY; }
0136 financial           { yylval->sval = (char *)"financial"; return token::CATEGORY; }
0137 cultural            { yylval->sval = (char *)"cultural"; return token::CATEGORY; }
0138 commemorative       { yylval->sval = (char *)"commemorative"; return token::CATEGORY; }
0139 historical          { yylval->sval = (char *)"historical"; return token::CATEGORY; }
0140 nameday             { yylval->sval = (char *)"nameday"; return token::CATEGORY; }
0141 seasonal            { yylval->sval = (char *)"seasonal"; return token::CATEGORY; }
0142 
0143 gregorian           { yylval->sval = (char *)"gregorian"; return token::CALENDAR; }
0144 julian              { yylval->sval = (char *)"julian"; return token::CALENDAR; }
0145 
0146 january             { yylval->ival =   1; return token::MONTH; }
0147 february            { yylval->ival =   2; return token::MONTH; }
0148 march               { yylval->ival =   3; return token::MONTH; }
0149 april               { yylval->ival =   4; return token::MONTH; }
0150 may                 { yylval->ival =   5; return token::MONTH; }
0151 june                { yylval->ival =   6; return token::MONTH; }
0152 july                { yylval->ival =   7; return token::MONTH; }
0153 august              { yylval->ival =   8; return token::MONTH; }
0154 september           { yylval->ival =   9; return token::MONTH; }
0155 october             { yylval->ival =  10; return token::MONTH; }
0156 november            { yylval->ival =  11; return token::MONTH; }
0157 december            { yylval->ival =  12; return token::MONTH; }
0158 
0159 monday              { yylval->ival =   1; return token::WDAY; }
0160 tuesday             { yylval->ival =   2; return token::WDAY; }
0161 wednesday           { yylval->ival =   3; return token::WDAY; }
0162 thursday            { yylval->ival =   4; return token::WDAY; }
0163 friday              { yylval->ival =   5; return token::WDAY; }
0164 saturday            { yylval->ival =   6; return token::WDAY; }
0165 sunday              { yylval->ival =   7; return token::WDAY; }
0166 
0167 coptic              { yylval->sval = (char *)"coptic"; return token::CALENDAR; }
0168 
0169 thoout              { yylval->ival =   1; return token::MONTH; }
0170 paope               { yylval->ival =   2; return token::MONTH; }
0171 hathor              { yylval->ival =   3; return token::MONTH; }
0172 kiahk               { yylval->ival =   4; return token::MONTH; }
0173 tobe                { yylval->ival =   5; return token::MONTH; }
0174 meshir              { yylval->ival =   6; return token::MONTH; }
0175 paremhotep          { yylval->ival =   7; return token::MONTH; }
0176 parmoute            { yylval->ival =   8; return token::MONTH; }
0177 pashons             { yylval->ival =   9; return token::MONTH; }
0178 paone               { yylval->ival =  10; return token::MONTH; }
0179 epep                { yylval->ival =  11; return token::MONTH; }
0180 mesore              { yylval->ival =  12; return token::MONTH; }
0181 koujinabot          { yylval->ival =  13; return token::MONTH; }
0182 
0183 pesnau              { yylval->ival =   1; return token::WDAY; }
0184 pshoment            { yylval->ival =   2; return token::WDAY; }
0185 peftoou             { yylval->ival =   3; return token::WDAY; }
0186 ptiou               { yylval->ival =   4; return token::WDAY; }
0187 psoou               { yylval->ival =   5; return token::WDAY; }
0188 psabbaton           { yylval->ival =   6; return token::WDAY; }
0189 tkyriake            { yylval->ival =   7; return token::WDAY; }
0190 
0191 ethiopian           { yylval->sval = (char *)"ethiopian"; return token::CALENDAR; }
0192 
0193 meskerem            { yylval->ival =   1; return token::MONTH; }
0194 tequemt             { yylval->ival =   2; return token::MONTH; }
0195 hedar               { yylval->ival =   3; return token::MONTH; }
0196 tahsas              { yylval->ival =   4; return token::MONTH; }
0197 ter                 { yylval->ival =   5; return token::MONTH; }
0198 yakatit             { yylval->ival =   6; return token::MONTH; }
0199 magabit             { yylval->ival =   7; return token::MONTH; }
0200 miyazya             { yylval->ival =   8; return token::MONTH; }
0201 genbot              { yylval->ival =   9; return token::MONTH; }
0202 sene                { yylval->ival =  10; return token::MONTH; }
0203 hamle               { yylval->ival =  11; return token::MONTH; }
0204 nehase              { yylval->ival =  12; return token::MONTH; }
0205 pagumen             { yylval->ival =  13; return token::MONTH; }
0206 
0207 segno               { yylval->ival =   1; return token::WDAY; }
0208 maksegno            { yylval->ival =   2; return token::WDAY; }
0209 rob                 { yylval->ival =   3; return token::WDAY; }
0210 hamus               { yylval->ival =   4; return token::WDAY; }
0211 arb                 { yylval->ival =   5; return token::WDAY; }
0212 qedame              { yylval->ival =   6; return token::WDAY; }
0213 ehud                { yylval->ival =   7; return token::WDAY; }
0214 
0215 hebrew              { yylval->sval = (char *)"hebrew"; return token::CALENDAR; }
0216 
0217 tishrey             { yylval->ival =   1; return token::MONTH; }
0218 heshvan             { yylval->ival =   2; return token::MONTH; }
0219 kislev              { yylval->ival =   3; return token::MONTH; }
0220 tevet               { yylval->ival =   4; return token::MONTH; }
0221 shvat               { yylval->ival =   5; return token::MONTH; }
0222 adar                { yylval->ival =   6; return token::MONTH; }
0223 nisan               { yylval->ival =   7; return token::MONTH; }
0224 iyar                { yylval->ival =   8; return token::MONTH; }
0225 sivan               { yylval->ival =   9; return token::MONTH; }
0226 tamuz               { yylval->ival =  10; return token::MONTH; }
0227 av                  { yylval->ival =  11; return token::MONTH; }
0228 elul                { yylval->ival =  12; return token::MONTH; }
0229 adari               { yylval->ival =  13; return token::MONTH; }
0230 adarii              { yylval->ival =  14; return token::MONTH; }
0231 
0232 yomsheni            { yylval->ival =   1; return token::WDAY; }
0233 yomshlishi          { yylval->ival =   2; return token::WDAY; }
0234 yomrevii            { yylval->ival =   3; return token::WDAY; }
0235 yomchamishi         { yylval->ival =   4; return token::WDAY; }
0236 yomshishi           { yylval->ival =   5; return token::WDAY; }
0237 shabbat             { yylval->ival =   6; return token::WDAY; }
0238 yomrishon           { yylval->ival =   7; return token::WDAY; }
0239 
0240 hijri               { yylval->sval = (char *)"hijri"; return token::CALENDAR; }
0241 
0242 muharram            { yylval->ival =   1; return token::MONTH; }
0243 safar               { yylval->ival =   2; return token::MONTH; }
0244 rabialawal          { yylval->ival =   3; return token::MONTH; }
0245 rabialthaani        { yylval->ival =   4; return token::MONTH; }
0246 jumaadaalawal       { yylval->ival =   5; return token::MONTH; }
0247 jumaadaalthaani     { yylval->ival =   6; return token::MONTH; }
0248 rajab               { yylval->ival =   7; return token::MONTH; }
0249 shaban              { yylval->ival =   8; return token::MONTH; }
0250 ramadan             { yylval->ival =   9; return token::MONTH; }
0251 shawwal             { yylval->ival =  10; return token::MONTH; }
0252 thualqidah          { yylval->ival =  11; return token::MONTH; }
0253 thualhijjah         { yylval->ival =  12; return token::MONTH; }
0254 
0255 yaumalithnain       { yylval->ival =   1; return token::WDAY; }
0256 yaualthulatha       { yylval->ival =   2; return token::WDAY; }
0257 yaumalarbia         { yylval->ival =   3; return token::WDAY; }
0258 yaumalkhamees       { yylval->ival =   4; return token::WDAY; }
0259 yaumaljumma         { yylval->ival =   5; return token::WDAY; }
0260 yaumalsabt          { yylval->ival =   6; return token::WDAY; }
0261 yaumalahad          { yylval->ival =   7; return token::WDAY; }
0262 
0263 indiannational      { yylval->sval = (char *)"indiannational"; return token::CALENDAR; }
0264 
0265 chaitra             { yylval->ival =   1; return token::MONTH; }
0266 vaishakh            { yylval->ival =   2; return token::MONTH; }
0267 jyaishtha           { yylval->ival =   3; return token::MONTH; }
0268 ashadha             { yylval->ival =   4; return token::MONTH; }
0269 shravana            { yylval->ival =   5; return token::MONTH; }
0270 bhadrapad           { yylval->ival =   6; return token::MONTH; }
0271 ashwin              { yylval->ival =   7; return token::MONTH; }
0272 kartik              { yylval->ival =   8; return token::MONTH; }
0273 agrahayana          { yylval->ival =   9; return token::MONTH; }
0274 paush               { yylval->ival =  10; return token::MONTH; }
0275 magh                { yylval->ival =  11; return token::MONTH; }
0276 phalgun             { yylval->ival =  12; return token::MONTH; }
0277 
0278 somavara            { yylval->ival =   1; return token::WDAY; }
0279 mangalva            { yylval->ival =   2; return token::WDAY; }
0280 budhavara           { yylval->ival =   3; return token::WDAY; }
0281 guruvara            { yylval->ival =   4; return token::WDAY; }
0282 sukravara           { yylval->ival =   5; return token::WDAY; }
0283 sanivara            { yylval->ival =   6; return token::WDAY; }
0284 raviara             { yylval->ival =   7; return token::WDAY; }
0285 
0286 jalali              { yylval->sval = (char *)"jalali"; return token::CALENDAR; }
0287 
0288 farvardin           { yylval->ival =   1; return token::MONTH; }
0289 ordibehesht         { yylval->ival =   2; return token::MONTH; }
0290 khordad             { yylval->ival =   3; return token::MONTH; }
0291 tir                 { yylval->ival =   4; return token::MONTH; }
0292 mordad              { yylval->ival =   5; return token::MONTH; }
0293 shahrivar           { yylval->ival =   6; return token::MONTH; }
0294 mehr                { yylval->ival =   7; return token::MONTH; }
0295 aban                { yylval->ival =   8; return token::MONTH; }
0296 azar                { yylval->ival =   9; return token::MONTH; }
0297 dei                 { yylval->ival =  10; return token::MONTH; }
0298 bahman              { yylval->ival =  11; return token::MONTH; }
0299 esfand              { yylval->ival =  12; return token::MONTH; }
0300 
0301 doshanbe            { yylval->ival =   1; return token::WDAY; }
0302 seshanbe            { yylval->ival =   2; return token::WDAY; }
0303 chaharshanbe        { yylval->ival =   3; return token::WDAY; }
0304 panjshanbe          { yylval->ival =   4; return token::WDAY; }
0305 jumee               { yylval->ival =   5; return token::WDAY; }
0306 shanbe              { yylval->ival =   6; return token::WDAY; }
0307 yekshanbe           { yylval->ival =   7; return token::WDAY; }
0308 
0309 .                   { LexerError( yytext ); }
0310 
0311 %% /*** Additional Code ***/
0312 
0313 namespace KHolidays {
0314 
0315 HolidayScannerPlan::HolidayScannerPlan(std::istream* in, std::ostream* out)
0316                   : HolidayScannerFlexLexer(in, out)
0317 {
0318 }
0319 
0320 HolidayScannerPlan::~HolidayScannerPlan()
0321 {
0322 }
0323 
0324 void HolidayScannerPlan::set_debug(bool b)
0325 {
0326     yy_flex_debug = b;
0327 }
0328 
0329 } // namespace KHolidays
0330 
0331 /* This implementation of HolidayScannerFlexLexer::yylex() is required to fill the
0332  * vtable of the class HolidayScannerFlexLexer. We define the scanner's main yylex
0333  * function via YY_DECL to reside in the HolidayScannerPlan class instead. */
0334 
0335 #ifdef yylex
0336 #undef yylex
0337 #endif
0338 
0339 int HolidayScannerFlexLexer::yylex()
0340 {
0341     qCDebug(KHOLIDAYS_LOG) << "in HolidayScannerFlexLexer::yylex() !";
0342     return 0;
0343 }
0344 
0345 /* When the scanner receives an end-of-file indication from YY_INPUT, it then
0346  * checks the yywrap() function. If yywrap() returns false (zero), then it is
0347  * assumed that the function has gone ahead and set up `yyin' to point to
0348  * another input file, and scanning continues. If it returns true (non-zero),
0349  * then the scanner terminates, returning 0 to its caller. */
0350 
0351 int HolidayScannerFlexLexer::yywrap()
0352 {
0353     return 1;
0354 }