blob: 2b68acfa5355d837f3bc79e5544c3bb660f3c630 (
plain) (
tree)
|
|
%{
#include "magic-interpreter-lexer.hpp"
#
#include "magic-interpreter-parser.hpp"
#include "../io/cxxstdio.hpp"
#ifdef HEADING
# error "what platform is this? please tell me who #defined HEADING"
#endif
#define FIXLOC magic_frontend_lloc.first_line = magic_frontend_lineno
#define HEADING(dir) { magic_frontend_lval.i = dir; FIXLOC; return DIR; }
// silence compiler warnings
#define YY_USER_INIT (void)yylval, (void)yylloc
%}
%option yylineno
%option noyywrap
%option prefix="magic_frontend_"
%option nounput
%option noinput
%option bison-bridge bison-locations
%%
"S" HEADING(0);
"SW" HEADING(1);
"W" HEADING(2);
"NW" HEADING(3);
"N" HEADING(4);
"NE" HEADING(5);
"E" HEADING(6);
"SE" HEADING(7);
"=" {FIXLOC; return '=';}
"==" {FIXLOC; return EQ;}
"<>" {FIXLOC; return NEQ;}
"!=" {FIXLOC; return NEQ;}
">" {FIXLOC; return '>';}
"<" {FIXLOC; return '<';}
">=" {FIXLOC; return GTE;}
"<=" {FIXLOC; return LTE;}
"(" {FIXLOC; return '(';}
")" {FIXLOC; return ')';}
"+" {FIXLOC; return '+';}
"-" {FIXLOC; return '-';}
"*" {FIXLOC; return '*';}
"/" {FIXLOC; return '/';}
"%" {FIXLOC; return '%';}
"&&" {FIXLOC; return ANDAND;}
"||" {FIXLOC; return OROR;}
";" {FIXLOC; return ';';}
":" {FIXLOC; return ':';}
"," {FIXLOC; return ',';}
"@" {FIXLOC; return '@';}
"|" {FIXLOC; return '|';}
"[" {FIXLOC; return '[';}
"]" {FIXLOC; return ']';}
"&" {FIXLOC; return '&';}
"^" {FIXLOC; return '^';}
"." {FIXLOC; return '.';}
"<<" {FIXLOC; return SHL;}
">>" {FIXLOC; return SHR;}
"PROCEDURE" {FIXLOC; return PROCEDURE;}
"CALL" {FIXLOC; return CALL;}
"OR" {FIXLOC; return OR;}
"TO" {FIXLOC; return TO;}
"TOWARDS" {FIXLOC; return TOWARDS;}
"TELEPORT-ANCHOR" {FIXLOC; return TELEPORT_ANCHOR;}
"SILENT" {FIXLOC; return SILENT;}
"LOCAL" {FIXLOC; return LOCAL;}
"NONMAGIC" {FIXLOC; return NONMAGIC;}
"SPELL" {FIXLOC; return SPELL;}
"LET" {FIXLOC; return LET;}
"IN" {FIXLOC; return IN;}
"END" {FIXLOC; return END;}
"=>" {FIXLOC; return DARROW;}
"STRING" {FIXLOC; return STRING_TY;}
"REQUIRE" {FIXLOC; return REQUIRE;}
"CATALYSTS" {FIXLOC; return CATALYSTS;}
"COMPONENTS" {FIXLOC; return COMPONENTS;}
"MANA" {FIXLOC; return MANA;}
"CASTTIME" {FIXLOC; return CASTTIME;}
"SKIP" {FIXLOC; return SKIP;}
"ABORT" {FIXLOC; return ABORT;}
"BREAK" {FIXLOC; return BREAK;}
"EFFECT" {FIXLOC; return EFFECT_;}
"ATEND" {FIXLOC; return ATEND;}
"ATTRIGGER" {FIXLOC; return ATTRIGGER;}
"CONST" {FIXLOC; return CONST;}
"PC" {FIXLOC; return PC_F;}
"NPC" {FIXLOC; return NPC_F;}
"MOB" {FIXLOC; return MOB_F;}
"ENTITY" {FIXLOC; return ENTITY_F;}
"TARGET" {FIXLOC; return TARGET_F;}
"IF" {FIXLOC; return IF;}
"THEN" {FIXLOC; return THEN;}
"ELSE" {FIXLOC; return ELSE;}
"FOREACH" {FIXLOC; return FOREACH;}
"FOR" {FIXLOC; return FOR;}
"DO" {FIXLOC; return DO;}
"WAIT" {FIXLOC; return SLEEP;}
\{([^\}]|\\.)*\} {
magic_frontend_lval.s = dumb_string::copy(yytext);
FIXLOC;
return SCRIPT_DATA;
}
\"([^\"]|\\.)*\" {
dumb_string string = dumb_string::copy(yytext + 1);
const char *src = string.c_str();
char *dst = &string[0];
while (*src && *src != '"')
{
if (*src == '\\')
{
*dst++ = src[1];
src += 2;
}
else
*dst++ = *src++;
}
*dst = '\0'; /* terminate */
magic_frontend_lval.s = string;
FIXLOC;
return STRING;
}
"-"?[0-9]+ {
magic_frontend_lval.i = atoi(yytext);
FIXLOC;
return INT;
}
"0x"[0-9a-fA-F]+ {
magic_frontend_lval.i = strtol(yytext + 2, NULL, 16);
FIXLOC;
return INT;
}
[a-zA-Z][-_a-zA-Z0-9]* {
magic_frontend_lval.s = dumb_string::copy(yytext);
FIXLOC;
return ID;
}
"#".*$ /* Ignore comments */
"//".*$ /* Ignore comments */
[ \n\t\r] /* ignore whitespace */
. FPRINTF(stderr, "%s: Unexpected character in line %d\n", MAGIC_CONFIG_FILE, magic_frontend_lineno);
%%
|