*BSD News Article 10114


Return to BSD News archive

Received: by minnie.vk1xwt.ampr.org with NNTP
	id AA7223 ; Mon, 18 Jan 93 10:50:16 EST
Path: sserve!manuel.anu.edu.au!munnari.oz.au!uunet!olivea!sgigate!sgiblab!pacbell.com!tandem!UB.com!quack!dfox
From: dfox@quack.sac.ca.us (David Fox)
Newsgroups: comp.unix.bsd
Subject: [386bsd] still trying to compile rayshade
Keywords: lex parse error rayshade
Message-ID: <fYaZRtt@quack.sac.ca.us>
Date: 19 Jan 93 21:06:09 GMT
Organization: The Duck Pond public unix: +1 408 249 9630, log in as 'guest'.
Lines: 271


Hi *,

I'm still trying to compile rayshade.  I've made some progress, but
right now gcc (doesn't matter which version, I tried both gcc-1.39
and gcc-2.3.3) is complaining of a parse error / syntax error before
the '1' in return 1; in the yywrap() function on line 183 of the
lex.l file in the libshade directory of rayshade-4.0.

I've looked hard at the output of lex (lex has no problems generating
the file) as well as the lex.l file and I'm stumped.  I don't know
lex very well, but I can't find any problems that would make gcc barf.

Can someone help?

Here's the lex file in question:
------------------------------------------------------------------------

/* lex.l								   */
/* Copyright (C) 1989, 1991, Craig E. Kolb				   */
/* All rights reserved.							   */
/*									   */
/* This software may be freely copied, modified, and redistributed,	   */
/* provided that this copyright notice is preserved on all copies.	   */
/*									   */
/* You may not distribute this software, in whole or in part, as part of   */
/* any commercial product without the express consent of the authors.	   */
/* 									   */
/* There is no warranty or other guarantee of fitness of this software	   */
/* for any purpose.  It is provided solely "as is".			   */
/*									   */
/* $Id: lex.l,v 4.0.1.3 92/01/14 18:28:38 cek Exp Locker: cek $ */
%{
#include "config.h"
#include "rayshade.h"
#ifdef I_STRING
#include <string.h>
#else
#include <strings.h>
#endif
#include "liblight/light.h"
#include "libsurf/atmosphere.h"
#include "libsurf/surface.h"
#include "libtext/texture.h"
#include "libobj/geom.h"
#include "symtab.h"
#include "y.tab.h"
extern char *strsave();
%}
alpha	[a-zA-Z]
special	[\.\_-]
digit	[0-9]
exp	[Ee][-+]?{digit}+
string	{alpha}({alpha}|{digit}|{special})*
filename "/"?"/"?(("."|".."|{string})"/")*{string}
%p 11000
%e 1500
%n 700
%%
[ \t\n]			;
^#			handlehash();
"/*"			skipcomments();
ambient			return tAMBIENT;
aperture		return tAPERTURE;
applysurf		return tAPPLYSURF;
area			return tAREA;
atmosphere		return tATMOSPHERE;
background		return tBACKGROUND;
bezier			return tBEZIER;
blob			return tBLOB;
cblob                   return tCBLOB;
blotch			return tBLOTCH;
body			return tBODY;
box			return tBOX;
bump			return tBUMP;
checker			return tCHECKER;
cloud			return tCLOUD;
coeffs			return tCOEFFS;
cone			return tCONE;
component		return tCOMPONENT;
contrast		return tCONTRAST;
crop			return tCROP;
cursurf			return tCURSURF;
cutoff			return tCUTOFF;
cylinder		return tCYL;
cylindrical		return tCYLINDRICAL;
define			return tDEFINE;
diffuse			return tDIFFUSE;
difference		return tDIFFERENCE;
directional		return tDIRECTIONAL;
disc			return tDISC;
end			return tEND;
extended		return tEXTENDED;
extinct			return tEXTINCT;
eyep			return tEYEP;
eyesep			return tEYESEP;
false			return tFALSE;
filter			return tFILTER;
fbm			return tFBM;
fbmbump			return tFBMBUMP;
focaldist		return tFOCALDIST;
fog			return tFOG;
fogdeck			return tFOGDECK;
fov			return tFOV;
fracland		return tFRACLAND;
framelength		return tFRAMELENGTH;
frames			return tFRAMES;
gauss			return tGAUSS;
gloss			return tGLOSS;
gradient		return tGRADIENT;
grid			return tGRID;
heightfield		return tHEIGHTFIELD;
image			return tIMAGE;
index			return tINDEX;
intersect		return tINTERSECT;
jitter			return tJITTER;
light			return tLIGHT;
linear			return tLINEAR;
list			return tLIST;
log			return tLOG;
lookp			return tLOOKP;
map			return tMAP;
marble			return tMARBLE;
maxdepth		return tMAXDEPTH;
mount			return tMOUNT;
mist			return tMIST;
name			return tNAME;
nojitter		return tNOJITTER;
noshadow		return tNOSHADOW;
object			return tOBJECT;
outfile			return tOUTFILE;
plane			return tPLANE;
planar			return tPLANAR;
point			return tPOINT;
poly			return tPOLY;
polygon			return tPOLY;
print			return tPRINT;
projector		return tPROJECTOR;
quiet			return tQUIET;
radial			return tRADIAL;
random			return tRANDOM;
range			return tRANGE;
reflect			return tREFLECT;
reflective		return tREFLECT;
report			return tREPORT;
resolution		return tSCREEN; /* A synonym for screen */
revlog			return tREVLOG;
rotate			return tROTATE;
rotspline               return tROTSPLINE;  /* Rotated cubic spline */
sample			return tSAMPLE;
scale			return tSCALE;
screen			return tSCREEN;
shadowtransp		return tSHADOWTRANSP;
shutter			return tSHUTTER;
sky			return tSKY;
smooth			return tSMOOTH;
sphere			return tSPHERE;
spherical		return tSPHERICAL;
specular		return tSPECULAR;
specpow			return tSPECPOW;
spot			return tSPOT;
starttime		return tSTARTTIME;
stripe			return tSTRIPE;
surface			return tSURFACE;
sweptsph		return tSWEPTSPH;
textsurf		return tTEXTSURF;
texture			return tTEXTURE;
tile			return tTILE;
torus			return tTORUS;
transform		return tTRANSFORM;
translate		return tTRANSLATE;
translu			return tTRANSLU;
translucency		return tTRANSLU;
transp			return tTRANSP;
transparent		return tTRANSP;
triangle		return tTRIANGLE;
triangleuv		return tTRIANGLEUV;
true			return tTRUE;
union			return tUNION;
up			return tUP;
uv			return tUV;
verbose			return tVERBOSE;
window			return tWINDOW;
windy			return tWINDY;
wood			return tWOOD;
xbezier			return tXBEZIER;
ybezier			return tYBEZIER;
zbezier			return tZBEZIER;
xcoeffs			return tXCOEFFS;
ycoeffs			return tYCOEFFS;
zcoeffs			return tZCOEFFS;
{digit}+ |
{digit}+"."{digit}*({exp})? |
{digit}*"."{digit}+({exp})? |
{digit}+{exp}		{yylval.d = atof(yytext); return tFLOAT;}
{string}		{yylval.c = strsave(yytext); return tSTRING;}
{filename}		{yylval.c = strsave(yytext); return tFILENAME;}
..			return yytext[0];

%%
yywrap()
 {
   return 1;
 }
/*
 * Skip over comments.
 */
skipcomments()
{
	char c;

	while (1) {
		while (input() != '*')
			;
		if ((c = input()) == '/')
			return;
		unput(c);
	}
}
/*
 * Deal with ccp-produced lines of the form:
 * # n "filename"
 * and
 * # n
 * Where filename is the name of the file being processed, and n is
 * the current line number in that file.
 */
handlehash()
{
	char buf[BUFSIZ];
	int i;
	extern int yylineno;
	extern char yyfilename[];

	/*
	 * Read the entire line into buf.
	 */
	for (i = 0; (buf[i] = input()) != '\n'; i++)
			;
	unput(buf[i]);		/* To make sure consecutive # lines work. */
	buf[i] = (char)NULL;	/* Replace newline with NULL. */

	/*
	 * Complain if the line was not of the form #n "filename"
	 */
	if ((i = sscanf(buf,"%d \"%[^\"]s\"", &yylineno, yyfilename)) == 0 &&
	    (i = sscanf(buf," line %d \"%[^\"]s\"",&yylineno,yyfilename))==0) {
		RLerror(RL_PANIC, "Unknown '#' control (%s).\n",buf);
		exit(1);
	}
	if (i == 1 && (index(buf,'"') != (char *)NULL)) {
		/*
		 * Filename was given as ""
		 */
		(void)strcpy(yyfilename, "stdin");
	}
	yylineno--;  /* The newline we unput will increment yylineno */
}
------------------------------------------------------------------------

Thanks.

-- 
------------------------------------------------------------------------
in real life: david fox            email: dfox@quack.sac.ca.us
5479 Castle Manor Drive,                  
San Jose, CA 95129                 "Thanks for letting me change some
USA                                 magnetic patterns on your HD" -me
408-253-7992                        
"You've just won an absolutely FREE trip to the Isles of Langerhans" -me
------------------------------------------------------------------------