Anarres-Mud-Driver
view release on metacpan or search on metacpan
Compiler/lexer.yy view on Meta::CPAN
%{
#include <stdio.h>
#include <stdlib.h>
#include "compiler.h"
#include "parser.h"
#define YY_DECL int yylex(YYSTYPE *yylval, amd_parse_param_t *param)
static int yyinteger(YYSTYPE *lvalp);
static int yyidentifier(YYSTYPE *lvalp, amd_parse_param_t *param);
%}
%option noyywrap
%option noinput
%option nounput
%option noreject
%option noyy_top_state
/* %option debug */
%s CODE
%x BLANK
%x STRING
%x PPLINE
%x CCOMMENT
%x CPPCOMMENT
WHITE [ \f\t\v]+
NONWHITE [^ \f\t\v\r\n]
NL (\r|\r\n|\n)
MESS [^ \f\t\v\r\n]
LETTER [[:alpha:]_]
NONLETTER [^[:alpha:][:space:]_]
CHAR [[:alnum:]_]
NONCHAR [^[:alnum:][:space:]_]
TOKEN {LETTER}{CHAR}*
NONTOKEN [[:digit:]]({CHAR}|[[:digit:]])*
MACRO {TOKEN}
NONMACRO {NONLETTER}{NONWHITE}*
NONNUMBER [[:digit:]]{CHAR}+
%%
<BLANK>{WHITE} { BEGIN(CODE); }
<BLANK>{NL} { /* Optimise for blank lines. */ }
<BLANK># { BEGIN(PPLINE); }
<BLANK>[^#] { yyless(0); BEGIN(CODE); }
<PPLINE>{NL} { BEGIN(BLANK); }
<PPLINE>\\{NL} { }
<PPLINE>{WHITE} { }
<PPLINE>[^\\\n]+ { }
<PPLINE>\\ { }
\" { BEGIN(STRING); yylval->sv = newSVpv("", 0); }
<STRING>\" { BEGIN(INITIAL); return L_STRING; }
<STRING>[^\"\\]* { sv_catpv(yylval->sv, yytext); }
<STRING>\\[0-7]{1,2} { /* octal char */ }
<STRING>\\[0-3][0-7]{1,2} { /* octal char */ }
<STRING>\\x[[:xdigit:]]{1,2} { /* hex char */ }
<STRING>\\n { sv_catpv(yylval->sv, "\n"); }
<STRING>\\t { sv_catpv(yylval->sv, "\t"); }
<STRING>\\v { sv_catpv(yylval->sv, "\v"); }
<STRING>\\b { sv_catpv(yylval->sv, "\b"); }
<STRING>\\r { sv_catpv(yylval->sv, "\r"); }
<STRING>\\f { sv_catpv(yylval->sv, "\f"); }
<STRING>\\a { sv_catpv(yylval->sv, "\a"); }
<STRING>\\[\\\?\'\"] { sv_catpvn(yylval->sv, (yytext + 1), 1); }
<STRING>\\x[^[:xdigit:]]{1,2} {
yywarnf("Bad hexadecimal escape %s", yytext);
sv_catpv(yylval->sv, yytext);
( run in 0.730 second using v1.01-cache-2.11-cpan-39bf76dae61 )