parser_lex.l revision f2fc321be9b4df7748e8c31a5edd154b0177b139
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
%{
#pragma ident "%Z%%M% %I% %E% SMI"
%}
%{
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <errno.h>
#ifdef HAVE_STDINT_H
#include <stdint.h>
#endif
#include "parsertypes.h"
#include "utils.h"
#include "filebench.h"
#include "parser_gram.h"
extern void yyerror(char *s);
extern int dofile; /* are we processing a file? */
%}
%a 50000
%p 50000
%o 50000
%n 5000
%%
\n { lex_lineno++; }
<INITIAL>[ \t]+ ;
<INITIAL>#.* ;
eventgen { return FSC_EVENTGEN; }
create { return FSC_CREATE; }
define { return FSC_DEFINE; }
foreach { return FSC_FOREACH; }
flowop { return FSC_FLOWOP; }
shutdown { return FSC_SHUTDOWN; }
system { return FSC_SYSTEM; }
fileset[s]* { return FSE_FILESET; }
directory { return FSE_DIRECTORY; }
command { return FSE_COMMAND; }
thread { return FSE_THREAD; }
xmldump { return FSE_XMLDUMP; }
cached { return FSA_CACHED; }
dirwidth { return FSA_DIRWIDTH; }
dirgamma { return FSA_DIRGAMMA; }
namelength { return FSA_NAMELENGTH; }
filesize { return FSA_FILESIZE; }
filesizegamma { return FSA_FILESIZEGAMMA; }
directio { return FSA_DIRECTIO; }
opennext { return FSA_ROTATEFD; }
filesetname { return FSA_FILE; }
instances { return FSA_INSTANCES;}
iosize { return FSA_IOSIZE; }
memsize { return FSA_MEMSIZE; }
entries { return FSA_ENTRIES;}
prealloc { return FSA_PREALLOC; }
paralloc { return FSA_PARALLOC; }
procname { return FSA_PROCESS; }
random { return FSA_RANDOM;}
target { return FSA_TARGET;}
useism { return FSA_USEISM;}
workingset { return FSA_WSS; }
blocking { return FSA_BLOCKING; }
highwater { return FSA_HIGHWATER; }
<INITIAL>\" {
BEGIN WHITESTRINGSTATE;
return FSK_QUOTE;
}
<WHITESTRINGSTATE>\" {
BEGIN INITIAL;
return FSK_QUOTE;
}
<WHITESTRINGSTATE>[^$^\\^"][^$^"]*[^\\^$^"] {
yyerror("Out of memory");
}
return FSV_WHITESTRING;
}
<WHITESTRINGSTATE>\\n {
return FSV_WHITESTRING;
}
<WHITESTRINGSTATE>\\$[^"^$^\\]+ {
if ((yylval.sval = strdup(yytext + 1)) == NULL) {
filebench_shutdown(E_ERROR);
}
return FSV_WHITESTRING;
}
<WHITESTRINGSTATE>[^$^\\^"] {
yyerror("Out of memory");
}
return FSV_WHITESTRING;
}
<INITIAL>\{ { return FSK_OPENLST; }
<INITIAL>\} { return FSK_CLOSELST; }
<INITIAL>= { return FSK_ASSIGN; }
<INITIAL>\, { return FSK_SEPLST; }
<INITIAL>[0-9]+ {
errno = 0;
(void) filebench_log(LOG_ERROR,
"Invalid I value '%s':%s", yytext,
}
return FSV_VAL_INT;
}
<INITIAL>[0-9]+k {
errno = 0;
(void) filebench_log(LOG_ERROR,
"Invalid I value '%s':%s", yytext,
}
return FSV_VAL_INT;
}
<INITIAL>[0-9]+m {
errno = 0;
(void) filebench_log(LOG_ERROR,
"Invalid I value '%s':%s", yytext,
}
return FSV_VAL_INT;
}
<INITIAL>[0-9]+g {
errno = 0;
(void) filebench_log(LOG_ERROR,
"Invalid I value '%s':%s", yytext,
}
return FSV_VAL_INT;
}
<INITIAL>true|false {
else
return FSV_VAL_BOOLEAN;
}
yyerror("Out of memory");
}
return FSV_VARIABLE;
}
yyerror("Out of memory");
}
return FSV_STRING;
}
. {
yyerror("Illegal character");
}
%%
void
yyerror(char *s)
{
if (yytext[0] == '\0') {
"%s, token expected",
s);
return;
}
(void) filebench_log(LOG_ERROR,
"%s at '%s'",
s,
yytext);
} else {
if (yytext[0] == '\0') {
(void) filebench_log(LOG_ERROR,
"%s, token expected", s);
return;
}
}
}
struct yy_buffer_state *parent;
struct yy_buffer_state *script;
int
{
return (0);
}
int
{
return (0);
}