Blame gfs2/libgfs2/lexer.l

Packit Service 360c39
%{
Packit Service 360c39
#include "lang.h"
Packit Service 360c39
#include "parser.h"
Packit Service 360c39
Packit Service 360c39
#define EXTRA ((struct lgfs2_lang_state *)yyextra)
Packit Service 360c39
Packit Service 360c39
#define P(token, type, text) do {\
Packit Service 360c39
	*(yylval) = ast_new(type, text);\
Packit Service 360c39
	if (*(yylval) == NULL) {\
Packit Service 360c39
		EXTRA->ls_errnum = errno;\
Packit Service 360c39
		return 1;\
Packit Service 360c39
	}\
Packit Service 360c39
	return (TOK_##token);\
Packit Service 360c39
} while(0)
Packit Service 360c39
Packit Service 360c39
#define COLNUM EXTRA->ls_colnum
Packit Service 360c39
#define YY_USER_ACTION COLNUM += yyleng;
Packit Service 360c39
Packit Service 360c39
%}
Packit Service 360c39
%option bison-bridge reentrant
Packit Service 360c39
%option warn debug
Packit Service 360c39
%option nounput noinput
Packit Service 360c39
%option noyywrap
Packit Service 360c39
%option extra-type="struct lgfs2_lang_state *"
Packit Service 360c39
Packit Service 360c39
letter			[a-zA-Z_]
Packit Service 360c39
decdigit		[0-9]
Packit Service 360c39
decnumber		-?{decdigit}+
Packit Service 360c39
hexdigit		[0-9a-fA-F]
Packit Service 360c39
hexnumber		-?0x{hexdigit}+
Packit Service 360c39
number			({decnumber}|{hexnumber})
Packit Service 360c39
offset			\+{number}
Packit Service 360c39
id			{letter}({letter}|{decdigit}|\.)*
Packit Service 360c39
string			\'([^\']|\\\')*\'
Packit Service 360c39
path			\'\/([^\']|\\\')*\'
Packit Service 360c39
ccomment		\/\/.*\n
Packit Service 360c39
shcomment		\#.*\n
Packit Service 360c39
comment			({ccomment}|{shcomment})
Packit Service 360c39
whitespace		[ \t\r]+
Packit Service 360c39
Packit Service 360c39
%%
Packit Service 360c39
Packit Service 360c39
\{			{
Packit Service 360c39
			return TOK_LBRACE;
Packit Service 360c39
			}
Packit Service 360c39
\}			{
Packit Service 360c39
			return TOK_RBRACE;
Packit Service 360c39
			}
Packit Service 360c39
\[			{
Packit Service 360c39
			return TOK_LBRACKET;
Packit Service 360c39
			}
Packit Service 360c39
\]			{
Packit Service 360c39
			P(RBRACKET, AST_EX_SUBSCRIPT, "[ ]");
Packit Service 360c39
			}
Packit Service 360c39
\,			{
Packit Service 360c39
			return TOK_COMMA;
Packit Service 360c39
			}
Packit Service 360c39
\:			{
Packit Service 360c39
			P(COLON, AST_EX_FIELDSPEC, yytext);
Packit Service 360c39
			}
Packit Service 360c39
\;			{
Packit Service 360c39
			return TOK_SEMI;
Packit Service 360c39
			}
Packit Service 360c39
set			{
Packit Service 360c39
			P(SET, AST_ST_SET, yytext);
Packit Service 360c39
			}
Packit Service 360c39
get			{
Packit Service 360c39
			P(GET, AST_ST_GET, yytext);
Packit Service 360c39
			}
Packit Service 360c39
state			{
Packit Service 360c39
			P(STATE, AST_KW_STATE, yytext);
Packit Service 360c39
			}
Packit Service 360c39
{path}			{
Packit Service 360c39
			yytext[yyleng-1] = '\0';
Packit Service 360c39
			P(PATH, AST_EX_PATH, yytext + 1);
Packit Service 360c39
			}
Packit Service 360c39
{string}		{
Packit Service 360c39
			yytext[yyleng-1] = '\0';
Packit Service 360c39
			P(STRING, AST_EX_STRING, yytext + 1);
Packit Service 360c39
			}
Packit Service 360c39
{offset}		{
Packit Service 360c39
			P(OFFSET, AST_EX_OFFSET, yytext);
Packit Service 360c39
			}
Packit Service 360c39
{number}		{
Packit Service 360c39
			P(NUMBER, AST_EX_NUMBER, yytext);
Packit Service 360c39
			}
Packit Service 360c39
{id}			{
Packit Service 360c39
			P(ID, AST_EX_ID, yytext);
Packit Service 360c39
			}
Packit Service 360c39
{comment}		{
Packit Service 360c39
			COLNUM = 0;
Packit Service 360c39
			EXTRA->ls_linenum++;
Packit Service 360c39
			}
Packit Service 360c39
<<EOF>>			{
Packit Service 360c39
			return 0;
Packit Service 360c39
			}
Packit Service 360c39
\n			{
Packit Service 360c39
			COLNUM = 0;
Packit Service 360c39
			EXTRA->ls_linenum++;
Packit Service 360c39
			}
Packit Service 360c39
{whitespace}		;
Packit Service 360c39
.			{
Packit Service 360c39
			printf("Unexpected character '%s' on line %d column %d\n",
Packit Service 360c39
			       yytext, yylineno, COLNUM);
Packit Service 360c39
			return 1;
Packit Service 360c39
			}
Packit Service 360c39
Packit Service 360c39
%%