blob: b6c6d769ba5efe5cb6c22be0488ab6b3b3567e8d (
plain) (
tree)
|
|
%{
/* vim: set ft=lex: */
//#include "lexer.hpp"
// magic-interpreter-lexer.lpp - Old magic tokenizer
//
// Copyright © 2004-2011 The Mana World Development Team
// Copyright © 2011-2014 Ben Longbons <b.r.longbons@gmail.com>
//
// This file is part of The Mana World (Athena server)
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "../strings/rstring.hpp"
#include "../strings/zstring.hpp"
#include "../io/cxxstdio.hpp"
#include "../sexpr/lexer.hpp"
#include "parser.hpp"
#define yylval spell_converterlval
RString *str(const char *s)
{
return new RString(ZString(strings::really_construct_from_a_pointer, s, nullptr));
}
%}
%option noyywrap
%option prefix="spell_converter"
%option nounput
%option noinput
%%
"S" { yylval.s = str(yytext); return DIR; }
"SW" { yylval.s = str(yytext); return DIR; }
"W" { yylval.s = str(yytext); return DIR; }
"NW" { yylval.s = str(yytext); return DIR; }
"N" { yylval.s = str(yytext); return DIR; }
"NE" { yylval.s = str(yytext); return DIR; }
"E" { yylval.s = str(yytext); return DIR; }
"SE" { yylval.s = str(yytext); return DIR; }
"=" { return '='; }
"==" { return EQ; }
"<>" { return NEQ; }
"!=" { return NEQ; }
">" { return '>'; }
"<" { return '<'; }
">=" { return GTE; }
"<=" { return LTE; }
"(" { return '('; }
")" { return ')'; }
"+" { return '+'; }
"-" { return '-'; }
"*" { return '*'; }
"/" { return '/'; }
"%" { return '%'; }
"&&" { return ANDAND; }
"||" { return OROR; }
";" { return ';'; }
":" { return ':'; }
"," { return ','; }
"@" { return '@'; }
"|" { return '|'; }
"[" { return '['; }
"]" { return ']'; }
"&" { return '&'; }
"^" { return '^'; }
"." { return '.'; }
"<<" { return SHL; }
">>" { return SHR; }
"PROCEDURE" { return PROCEDURE; }
"CALL" { return CALL; }
"OR" { return OR; }
"TO" { return TO; }
"TOWARDS" { return TOWARDS; }
"TELEPORT-ANCHOR" { return TELEPORT_ANCHOR; }
"SILENT" { return SILENT; }
"LOCAL" { return LOCAL; }
"NONMAGIC" { return NONMAGIC; }
"SPELL" { return SPELL; }
"LET" { return LET; }
"IN" { return IN; }
"END" { return END; }
"=>" { return DARROW; }
"STRING" { return STRING_TY; }
"REQUIRE" { return REQUIRE; }
"CATALYSTS" { return CATALYSTS; }
"COMPONENTS" { return COMPONENTS; }
"MANA" { return MANA; }
"CASTTIME" { return CASTTIME; }
"SKIP" { return SKIP; }
"ABORT" { return ABORT; }
"BREAK" { return BREAK; }
"EFFECT" { return EFFECT_; }
"ATEND" { return ATEND; }
"ATTRIGGER" { return ATTRIGGER; }
"CONST" { return CONST; }
"PC" { return PC_F; }
"NPC" { return NPC_F; }
"MOB" { return MOB_F; }
"ENTITY" { return ENTITY_F; }
"TARGET" { return TARGET_F; }
"IF" { return IF; }
"THEN" { return THEN; }
"ELSE" { return ELSE; }
"FOREACH" { return FOREACH; }
"FOR" { return FOR; }
"DO" { return DO; }
"WAIT" { return SLEEP; }
\{([^\}]|\\.)*\} { yylval.s = str(yytext); return SCRIPT_DATA; }
\"([^\"]|\\.)*\" { yylval.s = str(yytext); return STRING; }
"-"?[0-9]+ { yylval.s = str(yytext); return INT; }
"0x"[0-9a-fA-F]+ { yylval.s = str(yytext); return INT; }
[a-zA-Z][-_a-zA-Z0-9]* { yylval.s = str(yytext); return ID; }
"#".*$ { PRINTF("%s\n", sexpr::escape(*str(yytext + 1))); }
"//".*$ { PRINTF("%s\n", sexpr::escape(*str(yytext + 2))); }
[ \n\t\r] /* ignore whitespace */
. { abort(); }
%%
// nothing to see here, move along
|