home *** CD-ROM | disk | FTP | other *** search
/ RISC DISC 3 / RISC_DISC_3.iso / resources / etexts / gems / gemsv / ch5_5 / pov.l < prev    next >
Text File  |  1995-03-04  |  11KB  |  275 lines

  1. %e      3000
  2. %p      7000
  3. %n      1000
  4. %a      3000
  5.  
  6. %s      COMMENT
  7.  
  8.  
  9. W       [ \t]+
  10. D       [0-9]
  11. E       [DEde][-+]?{D}+
  12.  
  13. %{
  14.  
  15. #include <stdio.h>
  16.  
  17. int comment;
  18.  
  19. template <class T> struct stackelem {
  20.         T v;
  21.         stackelem<T> *n;
  22. };
  23.  
  24. template <class T> class stack {
  25.         stackelem<T> *h;
  26. public:
  27.         stack() {h=(stackelem<T>*)0;}
  28.         ~stack() {stackelem<T> *n; for(;h;h=n) {n=h->n; delete h;}}
  29.         void operator<<(T& v) {
  30.                 stackelem<T> *e=new stackelem<T>; e->v=v; e->n=h; h=e;
  31.         }
  32.         void operator>>(T& v) {stackelem<T> *e=h; h=e->n; v=e->v; delete e;}
  33.         int empty() {return h==(stackelem<T>*)0;}
  34. };
  35.  
  36. struct fileident {
  37.         char* n;
  38.         FILE* f;
  39.         int l;
  40.         fileident() {}
  41.         fileident(char* n, FILE* f, int l) {this->n=n; this->f=f; this->l=l;}
  42. };
  43.  
  44. stack<fileident> files;
  45. FILE* inputfile=stdin;
  46. char* inputfilename="";
  47. int line=1;
  48.  
  49. INPUT() {
  50.         int c=fgetc(inputfile);
  51.         fileident f;
  52.         switch(c) {
  53.             case EOF:
  54.                 fprintf(stderr, "\n");
  55.                 if(files.empty())
  56.                         return 0;
  57.                 fclose(inputfile); delete inputfilename;
  58.                 files>>f; inputfile=f.f; inputfilename=f.n; line=f.l;
  59.                 return '\n';
  60.             case '\n':
  61.                 line++;
  62.                 fprintf(stderr,"reading line %d of file %s\r",line,inputfilename);
  63.         }
  64.         return c;
  65. }
  66.  
  67. UNPUT(int c) {return ungetc(c, inputfile);}
  68.  
  69. #undef input
  70. #define input() INPUT()
  71. #undef unput
  72. #define unput(c) UNPUT(c)
  73.  
  74. void include(char* s) {
  75.         register int i; char *n; fileident f(inputfilename,inputfile,line);
  76.         files<<f;
  77.         for(i=0; s[i]!='"'; i++); n=&s[i+1];
  78.         for(i=0; n[i]!='"'; i++); n[i]='\0'; 
  79.         inputfilename=new char[strlen(n)+1]; strcpy(inputfilename,n);
  80.         inputfile=fopen(n, "r");
  81.         line=1;
  82. }
  83.  
  84. %}
  85.  
  86. %%
  87.  
  88. "/*"                               {comment=1; BEGIN COMMENT;}
  89. <COMMENT>"/*"                      {comment++;}
  90. <COMMENT>"*/"                      {comment--; if(!comment) {BEGIN INITIAL;}}
  91. <COMMENT>.                         ;
  92.  
  93. <INITIAL>"*/"                      printf("unmatched */ (ignored)\n");
  94. <INITIAL>"//".*$                   ;
  95.  
  96. <INITIAL>#include{W}\"[^\"\n]*\"   include((char*)yytext);
  97.  
  98. <INITIAL>adaptive                  return ADAPTIVE;
  99. <INITIAL>agate                     return AGATE;
  100. <INITIAL>agate_turb                return AGATE_TURB;
  101. <INITIAL>all                       return ALL;
  102. <INITIAL>alpha                     return ALPHA;
  103. <INITIAL>ambient                   return AMBIENT;
  104. <INITIAL>area_light                return AREA_LIGHT;
  105. <INITIAL>background                return BACKGROUND;
  106. <INITIAL>bicubic_patch             return BICUBIC_PATCH;
  107. <INITIAL>blob                      return BLOB;
  108. <INITIAL>blue                      return BLUE;
  109. <INITIAL>bounded_by                return BOUNDED_BY;
  110. <INITIAL>box                       return BOX;
  111. <INITIAL>bozo                      return BOZO;
  112. <INITIAL>brick                     return BRICK;
  113. <INITIAL>brilliance                return BRILLIANCE;
  114. <INITIAL>bumps                     return BUMPS;
  115. <INITIAL>bumpy1                    return BUMPY1;
  116. <INITIAL>bumpy2                    return BUMPY2;
  117. <INITIAL>bumpy3                    return BUMPY3;
  118. <INITIAL>bump_map                  return BUMP_MAP;
  119. <INITIAL>bump_size                 return BUMP_SIZE;
  120. <INITIAL>camera{W}identifier       return CAMERA_ID;
  121. <INITIAL>camera                    return CAMERA;
  122. <INITIAL>checker                   return CHECKER;
  123. <INITIAL>clipped_by                return CLIPPED_BY;
  124. <INITIAL>clock                     return CLOCK;
  125. <INITIAL>colour{W}identifier       return COLOR_ID;
  126. <INITIAL>colour{W}map{W}identifier return COLOR_MAP_ID;
  127. <INITIAL>color_map                 return COLOR_MAP;
  128. <INITIAL>colour_map                return COLOR_MAP;
  129. <INITIAL>color                     return COLOR;
  130. <INITIAL>colour                    return COLOR;
  131. <INITIAL>component                 return COMPONENT;
  132. <INITIAL>composite                 return COMPOSITE;
  133. <INITIAL>cone                      return CONE;
  134. <INITIAL>crand                     return CRAND;
  135. <INITIAL>cubic                     return CUBIC;
  136. <INITIAL>cylinder                  return CYLINDER;
  137. <INITIAL>declare                   return DECLARE;
  138. <INITIAL>default                   return DEFAULT;
  139. <INITIAL>dents                     return DENTS;
  140. <INITIAL>difference                return DIFFERENCE;
  141. <INITIAL>diffuse                   return DIFFUSE;
  142. <INITIAL>direction                 return DIRECTION;
  143. <INITIAL>disc                      return DISC;
  144. <INITIAL>distance                  return DISTANCE;
  145. <INITIAL>dump                      return DUMP;
  146. <INITIAL>End{W}of{W}File           return END_OF_FILE;
  147. <INITIAL>falloff                   return FALLOFF;
  148. <INITIAL>filter                    return FILTER;
  149. <INITIAL>finish{W}identifier       return FINISH_ID;
  150. <INITIAL>finish                    return FINISH;
  151. <INITIAL>flatness                  return FLATNESS;
  152. <INITIAL>float{W}identifier        return FLOAT_ID;
  153. <INITIAL>float{W}constant          return FLOAT;
  154. <INITIAL>fog                       return FOG;
  155. <INITIAL>frequency                 return FREQUENCY;
  156. <INITIAL>gif                       return GIF;
  157. <INITIAL>gradient                  return GRADIENT;
  158. <INITIAL>granite                   return GRANITE;
  159. <INITIAL>green                     return GREEN;
  160. <INITIAL>height_field              return HEIGHT_FIELD;
  161. <INITIAL>hexagon                   return HEXAGON;
  162. <INITIAL>undeclared{W}identifier   return IDENTIFIER;
  163. <INITIAL>iff                       return IFF;
  164. <INITIAL>image_map                 return IMAGE_MAP;
  165. <INITIAL>interpolate               return INTERPOLATE;
  166. <INITIAL>intersection              return INTERSECTION;
  167. <INITIAL>inverse                   return INVERSE;
  168. <INITIAL>ior                       return IOR;
  169. <INITIAL>jitter                    return JITTER;
  170. <INITIAL>lambda                    return LAMBDA;
  171. <INITIAL>leopard                   return LEOPARD;
  172. <INITIAL>light_source              return LIGHT_SOURCE;
  173. <INITIAL>location                  return LOCATION;
  174. <INITIAL>looks_like                return LOOKS_LIKE;
  175. <INITIAL>look_at                   return LOOK_AT;
  176. <INITIAL>mandel                    return MANDEL;
  177. <INITIAL>map_type                  return MAP_TYPE;
  178. <INITIAL>marble                    return MARBLE;
  179. <INITIAL>material_map              return MATERIAL_MAP;
  180. <INITIAL>max_intersections         return MAX_INTERSECTIONS;
  181. <INITIAL>max_trace_level           return MAX_TRACE_LEVEL;
  182. <INITIAL>merge                     return MERGE;
  183. <INITIAL>metallic                  return METALLIC;
  184. <INITIAL>mortar                    return MORTAR;
  185. <INITIAL>normal                    return NORMAL;
  186. <INITIAL>no_shadow                 return NO_SHADOW;
  187. <INITIAL>object{W}identifier       return OBJECT_ID;
  188. <INITIAL>object                    return OBJECT;
  189. <INITIAL>octaves                   return OCTAVES;
  190. <INITIAL>omega                     return OMEGA;
  191. <INITIAL>once                      return ONCE;
  192. <INITIAL>onion                     return ONION;
  193. <INITIAL>open                      return OPEN;
  194. <INITIAL>painted1                  return PAINTED1;
  195. <INITIAL>painted2                  return PAINTED2;
  196. <INITIAL>painted3                  return PAINTED3;
  197. <INITIAL>phase                     return PHASE;
  198. <INITIAL>phong_size                return PHONG_SIZE;
  199. <INITIAL>phong                     return PHONG;
  200. <INITIAL>pigment{W}identifier      return PIGMENT_ID;
  201. <INITIAL>pigment                   return PIGMENT;
  202. <INITIAL>plane                     return PLANE;
  203. <INITIAL>point_at                  return POINT_AT;
  204. <INITIAL>poly                      return POLY;
  205. <INITIAL>pot                       return POT;
  206. <INITIAL>quadric                   return QUADRIC;
  207. <INITIAL>quartic                   return QUARTIC;
  208. <INITIAL>quick_color               return QUICK_COLOR;
  209. <INITIAL>quick_colour              return QUICK_COLOR;
  210. <INITIAL>radial                    return RADIAL;
  211. <INITIAL>radius                    return RADIUS;
  212. <INITIAL>raw                       return RAW;
  213. <INITIAL>red                       return RED;
  214. <INITIAL>reflection                return REFLECTION;
  215. <INITIAL>refraction                return REFRACTION;
  216. <INITIAL>rgbf                      return RGBF;
  217. <INITIAL>rgb                       return RGB;
  218. <INITIAL>right                     return RIGHT;
  219. <INITIAL>ripples                   return RIPPLES;
  220. <INITIAL>rotate                    return ROTATE;
  221. <INITIAL>roughness                 return ROUGHNESS;
  222. <INITIAL>scale                     return SCALE;
  223. <INITIAL>sky                       return SKY;
  224. <INITIAL>smooth                    return SMOOTH;
  225. <INITIAL>smooth_triangle           return SMOOTH_TRIANGLE;
  226. <INITIAL>specular                  return SPECULAR;
  227. <INITIAL>sphere                    return SPHERE;
  228. <INITIAL>spotlight                 return SPOTLIGHT;
  229. <INITIAL>spotted                   return SPOTTED;
  230. <INITIAL>string                    return STRING;
  231. <INITIAL>sturm                     return STURM;
  232. <INITIAL>texture{W}identifier      return TEXTURE_ID;
  233. <INITIAL>texture                   return TEXTURE;
  234. <INITIAL>tga                       return TGA;
  235. <INITIAL>threshold                 return THRESHOLD;
  236. <INITIAL>tightness                 return TIGHTNESS;
  237. <INITIAL>tile2                     return TILE2;
  238. <INITIAL>tiles                     return TILES;
  239. <INITIAL>tnormal{W}identifier      return TNORMAL_ID;
  240. <INITIAL>torus                     return TORUS;
  241. <INITIAL>track                     return TRACK;
  242. <INITIAL>transform{W}identifier    return TRANSFORM_ID;
  243. <INITIAL>transform                 return TRANSFORM;
  244. <INITIAL>translate                 return TRANSLATE;
  245. <INITIAL>triangle                  return TRIANGLE;
  246. <INITIAL>turbulence                return TURBULENCE;
  247. <INITIAL>type                      return TYPE;
  248. <INITIAL>union                     return UNION;
  249. <INITIAL>up                        return UP;
  250. <INITIAL>use_color                 return USE_COLOR;
  251. <INITIAL>use_colour                return USE_COLOR;
  252. <INITIAL>use_index                 return USE_INDEX;
  253. <INITIAL>u_steps                   return U_STEPS;
  254. <INITIAL>vector{W}identifier       return VECTOR_ID;
  255. <INITIAL>version                   return VERSION;
  256. <INITIAL>v_steps                   return V_STEPS;
  257. <INITIAL>water_level               return WATER_LEVEL;
  258. <INITIAL>waves                     return WAVES;
  259. <INITIAL>wood                      return WOOD;
  260. <INITIAL>wrinkles                  return WRINKLES;
  261. <INITIAL>x                         return X;
  262. <INITIAL>y                         return Y;
  263. <INITIAL>z                         return Z;
  264.  
  265. <INITIAL>{D}+                 |
  266. <INITIAL>{D}+"."{D}*({E})?    |
  267. <INITIAL>{D}*"."{D}+({E})?    |
  268. <INITIAL>{D}+{E}              {yylval.dval=atof((char*)yytext);return LITERAL;}
  269. <INITIAL>[a-zA-Z][a-zA-Z0-9]* {yylval.sval=(char*)yytext; return IDENTIFIER;}
  270.  
  271. <INITIAL>{W}                  ;
  272. <INITIAL>\n                   ;
  273.  
  274. <INITIAL>.                    {return yytext[0];}
  275.