Blame utils/fwparam_ibft/prom_lex.l

Packit eace71
/*
Packit eace71
 * Copyright (C) IBM Corporation. 2007
Packit eace71
 * Author: Doug Maxey <dwm@austin.ibm.com>
Packit eace71
 *
Packit eace71
 * This program is free software: you can redistribute it and/or modify
Packit eace71
 * it under the terms of the GNU General Public License as published by
Packit eace71
 * the Free Software Foundation, either version 2 of the License, or
Packit eace71
 * (at your option) any later version.
Packit eace71
 *
Packit eace71
 * This program is distributed in the hope that it will be useful,
Packit eace71
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit eace71
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit eace71
 * GNU General Public License for more details.
Packit eace71
 *
Packit eace71
 * You should have received a copy of the GNU General Public License
Packit eace71
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit eace71
 */
Packit eace71
Packit eace71
/* definitions */
Packit eace71
%option array
Packit eace71
Packit eace71
%{
Packit eace71
#include "prom_parse.h"
Packit eace71
Packit eace71
#undef LEXDEBUG
Packit eace71
#ifdef LEXDEBUG
Packit eace71
#define dbg(a) dbgprint((a))
Packit eace71
#else
Packit eace71
#define dbg(a) do {} while (0)
Packit eace71
#endif  /* LEXDEBUG */
Packit eace71
Packit eace71
#define upval(d)				\
Packit eace71
    dbg(#d);					\
Packit eace71
    yylval.str[0] = 0;                          \
Packit eace71
    strcat(yylval.str, yytext);			\
Packit eace71
    yylloc.first_column = yylloc.last_column;	\
Packit eace71
    yylloc.last_column += yyleng;		\
Packit eace71
    return d
Packit eace71
Packit eace71
void dbgprint(const char *item) { fprintf(stderr, "%s: \"%s\" len=%d ", item, yytext, yyleng);}
Packit eace71
Packit eace71
%}
Packit eace71
Packit eace71
%option noyywrap
Packit eace71
%option never-interactive
Packit eace71
%option nounput
Packit eace71
%option noinput
Packit eace71
Packit eace71
VDEVICE     vdevice
Packit eace71
VDEVINST    gscsi
Packit eace71
VDEVDEV     dev
Packit eace71
VDEVRAW     rawio
Packit eace71
                                /* CHOSEN uses only boot related paths. */
Packit eace71
CHOSEN      bootpath|bootargs|iscsi-bootargs|nas-bootdevice
Packit eace71
BUSNAME     ata|i2c|ide|pci|sata|scsi|usb|lhea
Packit eace71
BOOTDEV     cdrom|disk|ethernet|iscsi-(disk[0-9]|toe)|sd
Packit eace71
HEX4        [[:xdigit:]]{1,4}
Packit eace71
HEX16       [[:xdigit:]]{5,16}
Packit eace71
IPV4        [0-9]{1,3}(\.[0-9]{1,3}){3}
Packit eace71
IQN         iqn\.[-[:alnum:]:.]{1,219}
Packit eace71
OBPQUAL     bootp|ipv6|iscsi|dhcpv6
Packit eace71
OBPPARM     blksize|bootp-retries|chapid|chappw|ciaddr|dhcp|filename|giaddr|ichapid|ichappw|ilun|iname|iport|isid|isns|itname|siaddr|slp|subnet-mask|tftp-retries
Packit eace71
FILENAME    \\[-[:alnum:]\\\.]{1,}
Packit eace71
Packit eace71
%% /* rules */
Packit eace71
Packit eace71
{CHOSEN}      { upval(CHOSEN); }
Packit eace71
{VDEVICE}     { upval(VDEVICE); }
Packit eace71
{VDEVINST}    { upval(VDEVINST); }
Packit eace71
{VDEVDEV}     { upval(VDEVDEV); }
Packit eace71
{VDEVRAW}     { upval(VDEVRAW); }
Packit eace71
{OBPQUAL}     { upval(OBPQUAL); }
Packit eace71
{BUSNAME}     { upval(BUSNAME); }
Packit eace71
{IPV4}        { upval(IPV4); }
Packit eace71
{IQN}         { upval(IQN); }
Packit eace71
{BOOTDEV}     { upval(BOOTDEV); }
Packit eace71
{OBPPARM}     { upval(OBPPARM); }
Packit eace71
{HEX4}        { upval(HEX4); }
Packit eace71
{HEX16}       { upval(HEX16); }
Packit eace71
{FILENAME}    { upval(FILENAME); }
Packit eace71
[ \t\n]+      {                  /* eat all whitespace. */
Packit eace71
	yylloc.first_column = yylloc.last_column;
Packit eace71
	yylloc.last_column += yyleng;
Packit eace71
}
Packit eace71
.             {			/* any other single char. */
Packit eace71
	dbg("??");
Packit eace71
	yylloc.first_column = yylloc.last_column;
Packit eace71
	yylloc.last_column += yyleng;
Packit eace71
	return *yytext;
Packit eace71
}
Packit eace71
Packit eace71
<<EOF>> yyterminate();
Packit eace71
%% /* user code */