Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 26 Apr 1999 07:49:46 -0400 (EDT)
From:      Luoqi Chen <luoqi@watermarkgroup.com>
To:        chris@calldei.com, peter@netplex.com.au
Cc:        A.Leidinger@Wurzelausix.CS.Uni-SB.de, current@FreeBSD.ORG
Subject:   Re: config & NO_F00F_HACK
Message-ID:  <199904261149.HAA12979@lor.watermarkgroup.com>

next in thread | raw e-mail | index | archive | help
> > On Sun, Apr 25, 1999, A.Leidinger@Wurzelausix.CS.Uni-SB.de wrote:
> > > Hi,
> > >=20
> > > # ident LINT
> > > LINT:
> > >      $Id: LINT,v 1.589 1999/04/24 21:45:44 peter Exp $
> > >=20
> > > with:
> > > option NO_F00F_HACK
> > >=20
> > > # config WORK
> > > WORK:15: unknown option "NO_F0F_HACK"
> >                           ^^^^^^^^^^^^^
> > 
> >    You made a typo.
> 
> No, it is a parsing/stringification botch.  It's parsed like this:
> 
> ID:		NO_F
> NUMBER:		00	(octal 0)
> ID:		F_HACK
> 
> Of course, an atoi of "00" and then a sprintf("%d") results in a single "0".
> 
> I've fixed this here and will commit it shortly, but I'm a bit nervous about
> the scope of the change required to prevent this information loss. :-/  I
> don't know enough lex/yacc to do context-sensitive tokenization.
> 
This should be fairly simple, please try this,

Index: lang.l
===================================================================
RCS file: /home/ncvs/src/usr.sbin/config/lang.l,v
retrieving revision 1.19
diff -u -r1.19 lang.l
--- lang.l	1999/04/24 18:59:19	1.19
+++ lang.l	1999/04/26 11:47:35
@@ -105,11 +105,14 @@
 int hex __P((char *));
 
 %}
-WORD	[-A-Za-z_][-A-Za-z_]*
+WORD	[A-Za-z_][-A-Za-z_]*
+ALNUM	[A-Za-z_][-A-Za-z_0-9]*
+%s NONUM
 %%
-{WORD}		{
+<NONUM>{WORD}	{
 			int i;
 
+			BEGIN(0);
 			if ((i = kw_lookup(yytext)) == -1)
 			{
 				yylval.str = strdup(yytext);
@@ -118,6 +121,22 @@
 			}
 			tprintf("(%s) ", yytext);
 			return i;
+		}
+<INITIAL>{WORD} {
+			int i;
+
+			if ((i = kw_lookup(yytext)) == -1)
+				REJECT
+			if (i == CONTROLLER || i == DEVICE || i == DISK ||
+			    i == PSEUDO_DEVICE || i == AT || i == ON)
+				BEGIN(NONUM);
+			tprintf("(%s) ", yytext);
+			return i;
+		}
+<INITIAL>{ALNUM} {
+			yylval.str = strdup(yytext);
+			tprintf("id(%s) ", yytext);
+			return ID;
 		}
 \\\"[^"]+\\\"	{
 			yytext[strlen(yytext)-2] = '"';
> Cheers,
> -Peter
> 

-lq


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199904261149.HAA12979>