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 )