now allows command args
This commit is contained in:
81
parse.lex
81
parse.lex
@@ -47,7 +47,9 @@ extern YYSTYPE yylval;
|
|||||||
extern int clearaliases;
|
extern int clearaliases;
|
||||||
int sudolineno = 1;
|
int sudolineno = 1;
|
||||||
|
|
||||||
static int fill __P((void));
|
static void fill __P((void));
|
||||||
|
static void append __P((void));
|
||||||
|
static char chop __P((void));
|
||||||
extern void reset_aliases __P((void));
|
extern void reset_aliases __P((void));
|
||||||
|
|
||||||
#ifdef TRACELEXER
|
#ifdef TRACELEXER
|
||||||
@@ -63,34 +65,60 @@ N [0-9][0-9]?[0-9]?
|
|||||||
%p 6000
|
%p 6000
|
||||||
%k 3500
|
%k 3500
|
||||||
|
|
||||||
|
%s GOTCMND
|
||||||
|
|
||||||
%%
|
%%
|
||||||
[ \t]+ { ; } /* throw away space/tabs */
|
[ \t]+ { ; } /* throw away space/tabs */
|
||||||
|
|
||||||
\\\n {
|
\\\n {
|
||||||
++sudolineno;
|
++sudolineno;
|
||||||
LEXTRACE("\n\t");
|
LEXTRACE("\n\t");
|
||||||
} /* throw away EOL after \ */
|
} /* throw away EOL after \ */
|
||||||
\, { return ','; } /* return ',' */
|
|
||||||
\! { return '!'; } /* return '!' */
|
|
||||||
= {
|
|
||||||
LEXTRACE("= ");
|
|
||||||
return '=';
|
|
||||||
} /* return '=' */
|
|
||||||
: {
|
|
||||||
LEXTRACE(": ");
|
|
||||||
return ':';
|
|
||||||
} /* return ':' */
|
|
||||||
\. { return '.'; }
|
|
||||||
\n {
|
\n {
|
||||||
++sudolineno;
|
++sudolineno;
|
||||||
LEXTRACE("\n");
|
LEXTRACE("\n");
|
||||||
return COMMENT;
|
return COMMENT;
|
||||||
} /* return newline */
|
} /* return newline */
|
||||||
|
|
||||||
#.*\n {
|
#.*\n {
|
||||||
++sudolineno;
|
++sudolineno;
|
||||||
LEXTRACE("\n");
|
LEXTRACE("\n");
|
||||||
return COMMENT;
|
return COMMENT;
|
||||||
} /* return comments */
|
} /* return comments */
|
||||||
|
|
||||||
|
<GOTCMND>[^\,:=\\ \t\n#]+[:,=\n] {
|
||||||
|
BEGIN 0;
|
||||||
|
LEXTRACE("ARG");
|
||||||
|
append();
|
||||||
|
unput(chop());
|
||||||
|
return(PATH);
|
||||||
|
} /* the last command line arg */
|
||||||
|
|
||||||
|
<GOTCMND>[^\,:=\\ \t\n#]+ {
|
||||||
|
LEXTRACE("ARG ");
|
||||||
|
append();
|
||||||
|
} /* a command line arg */
|
||||||
|
|
||||||
|
\, {
|
||||||
|
LEXTRACE(", ");
|
||||||
|
return ',';
|
||||||
|
} /* return ',' */
|
||||||
|
|
||||||
|
\! { return '!'; } /* return '!' */
|
||||||
|
|
||||||
|
= {
|
||||||
|
LEXTRACE("= ");
|
||||||
|
return '=';
|
||||||
|
} /* return '=' */
|
||||||
|
|
||||||
|
: {
|
||||||
|
LEXTRACE(": ");
|
||||||
|
return ':';
|
||||||
|
} /* return ':' */
|
||||||
|
|
||||||
|
\. { return '.'; }
|
||||||
|
|
||||||
\+[a-zA-Z][a-zA-Z0-9_-]* {
|
\+[a-zA-Z][a-zA-Z0-9_-]* {
|
||||||
fill();
|
fill();
|
||||||
return NETGROUP;
|
return NETGROUP;
|
||||||
@@ -101,10 +129,17 @@ N [0-9][0-9]?[0-9]?
|
|||||||
return NTWKADDR;
|
return NTWKADDR;
|
||||||
}
|
}
|
||||||
|
|
||||||
\/([a-zA-Z0-9_.+-]+\/?)+ {
|
\/[^\,:=\\ \t\n#]+[:,=\n] {
|
||||||
|
LEXTRACE("PATH ");
|
||||||
|
fill();
|
||||||
|
unput(chop());
|
||||||
|
return(PATH);
|
||||||
|
} /* a pathname with no args */
|
||||||
|
|
||||||
|
\/[^\,:=\\ \t\n#]+ {
|
||||||
|
BEGIN GOTCMND;
|
||||||
LEXTRACE("PATH ");
|
LEXTRACE("PATH ");
|
||||||
fill();
|
fill();
|
||||||
return PATH;
|
|
||||||
} /* a pathname */
|
} /* a pathname */
|
||||||
|
|
||||||
[A-Z][A-Z0-9_]* {
|
[A-Z][A-Z0-9_]* {
|
||||||
@@ -147,10 +182,26 @@ N [0-9][0-9]?[0-9]?
|
|||||||
. { return ERROR; } /* return error */
|
. { return ERROR; } /* return error */
|
||||||
|
|
||||||
%%
|
%%
|
||||||
static int fill() {
|
static void fill() {
|
||||||
(void) strcpy(yylval.string, yytext);
|
(void) strcpy(yylval.string, yytext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void append() {
|
||||||
|
(void) strcat(yylval.string, " ");
|
||||||
|
(void) strcat(yylval.string, yytext);
|
||||||
|
}
|
||||||
|
|
||||||
|
static char chop() {
|
||||||
|
int len;
|
||||||
|
char c;
|
||||||
|
|
||||||
|
len = strlen(yylval.string);
|
||||||
|
c = yylval.string[--len];
|
||||||
|
yylval.string[len] = '\0';
|
||||||
|
|
||||||
|
return(c);
|
||||||
|
}
|
||||||
|
|
||||||
int yywrap()
|
int yywrap()
|
||||||
{
|
{
|
||||||
#ifdef YY_NEW_FILE
|
#ifdef YY_NEW_FILE
|
||||||
|
Reference in New Issue
Block a user