-
Notifications
You must be signed in to change notification settings - Fork 40
/
Copy pathpbrtlex_8l-source.html
208 lines (208 loc) · 20.5 KB
/
pbrtlex_8l-source.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>pbrt: pbrtlex.l Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.6 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main Page</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<h1>pbrtlex.l</h1><a href="pbrtlex_8l.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
<a name="l00002"></a>00002 <span class="comment">/*</span>
<a name="l00003"></a>00003 <span class="comment"> pbrt source code Copyright(c) 1998-2007 Matt Pharr and Greg Humphreys.</span>
<a name="l00004"></a>00004 <span class="comment"></span>
<a name="l00005"></a>00005 <span class="comment"> This file is part of pbrt.</span>
<a name="l00006"></a>00006 <span class="comment"></span>
<a name="l00007"></a>00007 <span class="comment"> pbrt is free software; you can redistribute it and/or modify</span>
<a name="l00008"></a>00008 <span class="comment"> it under the terms of the GNU General Public License as published by</span>
<a name="l00009"></a>00009 <span class="comment"> the Free Software Foundation; either version 2 of the License, or</span>
<a name="l00010"></a>00010 <span class="comment"> (at your option) any later version. Note that the text contents of</span>
<a name="l00011"></a>00011 <span class="comment"> the book "Physically Based Rendering" are *not* licensed under the</span>
<a name="l00012"></a>00012 <span class="comment"> GNU GPL.</span>
<a name="l00013"></a>00013 <span class="comment"></span>
<a name="l00014"></a>00014 <span class="comment"> pbrt is distributed in the hope that it will be useful,</span>
<a name="l00015"></a>00015 <span class="comment"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00016"></a>00016 <span class="comment"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
<a name="l00017"></a>00017 <span class="comment"> GNU General Public License for more details.</span>
<a name="l00018"></a>00018 <span class="comment"></span>
<a name="l00019"></a>00019 <span class="comment"> You should have received a copy of the GNU General Public License</span>
<a name="l00020"></a>00020 <span class="comment"> along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
<a name="l00021"></a>00021 <span class="comment"></span>
<a name="l00022"></a>00022 <span class="comment"> */</span>
<a name="l00023"></a>00023
<a name="l00024"></a>00024 <span class="comment">/* state used for include file stuff */</span>
<a name="l00025"></a>00025 %{
<a name="l00026"></a>00026
<a name="l00027"></a><a class="code" href="pbrtlex_8l.html#4c49735b8f960c5801812993b6f787b7">00027</a> <span class="preprocessor">#define YY_MAIN 0</span>
<a name="l00028"></a><a class="code" href="pbrtlex_8l.html#15b85de192a189d5a31cdd518e001e6e">00028</a> <span class="preprocessor"></span><span class="preprocessor">#define YY_NEVER_INTERACTIVE 1</span>
<a name="l00029"></a>00029 <span class="preprocessor"></span>
<a name="l00030"></a>00030 <span class="preprocessor">#include "<a class="code" href="pbrt_8h.html">pbrt.h</a>"</span>
<a name="l00031"></a>00031 <span class="preprocessor">#include "<a class="code" href="api_8h.html">api.h</a>"</span>
<a name="l00032"></a>00032
<a name="l00033"></a>00033 <span class="keyword">struct </span>ParamArray;
<a name="l00034"></a>00034
<a name="l00035"></a>00035 <span class="preprocessor">#ifdef WIN32</span>
<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#include "pbrtparse.hpp"</span>
<a name="l00037"></a>00037 <span class="preprocessor">#else</span>
<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#include "pbrtparse.h"</span>
<a name="l00039"></a>00039 <span class="preprocessor">#endif</span>
<a name="l00040"></a>00040 <span class="preprocessor"></span>
<a name="l00041"></a>00041 <span class="preprocessor">#ifdef WIN32</span>
<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#pragma warning ( disable: 4244 )</span>
<a name="l00043"></a><a class="code" href="pbrt_8h.html#369266c24eacffb87046522897a570d5">00043</a> <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00044"></a>00044 <span class="preprocessor"></span>
<a name="l00045"></a><a class="code" href="structIncludeInfo.html">00045</a> <span class="keyword">struct </span><a class="code" href="structIncludeInfo.html">IncludeInfo</a> {
<a name="l00046"></a><a class="code" href="structIncludeInfo.html#63154359867533d3ead6f5f472145112">00046</a> <span class="keywordtype">string</span> <a class="code" href="structIncludeInfo.html#63154359867533d3ead6f5f472145112">filename</a>;
<a name="l00047"></a><a class="code" href="structIncludeInfo.html#e2e4a3d61ef8cada330ff60e48061d07">00047</a> YY_BUFFER_STATE <a class="code" href="structIncludeInfo.html#e2e4a3d61ef8cada330ff60e48061d07">bufState</a>;
<a name="l00048"></a><a class="code" href="structIncludeInfo.html#6ff28c9f9b84e19d944fbccba80459c6">00048</a> <span class="keywordtype">int</span> <a class="code" href="structIncludeInfo.html#6ff28c9f9b84e19d944fbccba80459c6">lineNum</a>;
<a name="l00049"></a>00049 };
<a name="l00050"></a><a class="code" href="pbrtlex_8l.html#5fb5eec375365e2bddd3cc22f5bd57a2">00050</a> vector<IncludeInfo> <a class="code" href="pbrtlex_8l.html#5fb5eec375365e2bddd3cc22f5bd57a2">includeStack</a>;
<a name="l00051"></a>00051
<a name="l00052"></a>00052 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="pbrtlex_8l.html#7661b5d028be7f8997cef563e3890fd9">line_num</a>;
<a name="l00053"></a><a class="code" href="pbrtlex_8l.html#ae9386e7c3073200601bc600272b60d8">00053</a> <span class="keywordtype">int</span> <a class="code" href="pbrtlex_8l.html#ae9386e7c3073200601bc600272b60d8">str_pos</a>;
<a name="l00054"></a>00054
<a name="l00055"></a><a class="code" href="pbrtlex_8l.html#3b3a2da8654cba4cee9e5298d3a7a46f">00055</a> <span class="keywordtype">void</span> <a class="code" href="pbrtlex_8l.html#3b3a2da8654cba4cee9e5298d3a7a46f">add_string_char</a>( <span class="keywordtype">char</span> c )
<a name="l00056"></a>00056 {
<a name="l00057"></a>00057 yylval.string[str_pos++] = c;
<a name="l00058"></a>00058 yylval.string[str_pos] = <span class="charliteral">'\0'</span>;
<a name="l00059"></a>00059 }
<a name="l00060"></a>00060
<a name="l00061"></a>00061 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="pbrtlex_8l.html#8654cb2f5c8df0404859230815608bb3">yyerror</a>( <span class="keyword">const</span> <span class="keywordtype">char</span> *str );
<a name="l00062"></a>00062 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="pbrtlex_8l.html#f48a1639d562505e6cf78c717d3809c4">ParseError</a>( <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ... ) <a class="code" href="pbrt_8h.html#a7849f92479017625ae81d55175571e5">PRINTF_FUNC</a>;
<a name="l00063"></a>00063
<a name="l00064"></a><a class="code" href="pbrtlex_8l.html#a5048a16472c1dbbba7eaaa4e5a6cc6d">00064</a> <span class="keywordtype">void</span> <a class="code" href="pbrtlex_8l.html#a5048a16472c1dbbba7eaaa4e5a6cc6d">include_push</a>(<span class="keywordtype">char</span> *filename) {
<a name="l00065"></a>00065 <span class="keywordflow">if</span> (includeStack.size() > 32)
<a name="l00066"></a>00066 <a class="code" href="pbrt_8h.html#63fd51330b3b9d2663a08258601448e5">Severe</a>(<span class="stringliteral">"Only 32 levels of nested Include allowed in scene files."</span>);
<a name="l00067"></a>00067 <a class="code" href="structIncludeInfo.html">IncludeInfo</a> ii;
<a name="l00068"></a>00068 <span class="keyword">extern</span> <span class="keywordtype">string</span> <a class="code" href="core_2samplepat_8cpp.html#3ffcdfc07f90b7e8cdef3ed656156aaf">current_file</a>;
<a name="l00069"></a>00069 ii.<a class="code" href="structIncludeInfo.html#63154359867533d3ead6f5f472145112">filename</a> = current_file;
<a name="l00070"></a>00070 ii.<a class="code" href="structIncludeInfo.html#e2e4a3d61ef8cada330ff60e48061d07">bufState</a> = YY_CURRENT_BUFFER;
<a name="l00071"></a>00071 ii.<a class="code" href="structIncludeInfo.html#6ff28c9f9b84e19d944fbccba80459c6">lineNum</a> = line_num;
<a name="l00072"></a>00072 includeStack.push_back(ii);
<a name="l00073"></a>00073
<a name="l00074"></a>00074 current_file = filename;
<a name="l00075"></a>00075 line_num = 1;
<a name="l00076"></a>00076
<a name="l00077"></a>00077 yyin = fopen(filename, <span class="stringliteral">"r"</span>);
<a name="l00078"></a>00078 <span class="keywordflow">if</span> (!yyin)
<a name="l00079"></a>00079 <a class="code" href="pbrt_8h.html#63fd51330b3b9d2663a08258601448e5">Severe</a>(<span class="stringliteral">"Unable to open included scene file \"%s\""</span>, filename);
<a name="l00080"></a>00080 yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE));
<a name="l00081"></a>00081 }
<a name="l00082"></a>00082
<a name="l00083"></a><a class="code" href="pbrtlex_8l.html#26c595a8988b6466384365d9bdb61a27">00083</a> <span class="keywordtype">void</span> <a class="code" href="pbrtlex_8l.html#26c595a8988b6466384365d9bdb61a27">include_pop</a>(<span class="keywordtype">void</span>)
<a name="l00084"></a>00084 {
<a name="l00085"></a>00085 <span class="keyword">extern</span> <span class="keywordtype">int</span> line_num;
<a name="l00086"></a>00086 <span class="keyword">extern</span> <span class="keywordtype">string</span> <a class="code" href="core_2samplepat_8cpp.html#3ffcdfc07f90b7e8cdef3ed656156aaf">current_file</a>;
<a name="l00087"></a>00087 yy_delete_buffer(YY_CURRENT_BUFFER);
<a name="l00088"></a>00088 yy_switch_to_buffer(includeStack.back().bufState);
<a name="l00089"></a>00089 current_file = includeStack.back().filename;
<a name="l00090"></a>00090 line_num = includeStack.back().lineNum;
<a name="l00091"></a>00091 includeStack.pop_back();
<a name="l00092"></a>00092 }
<a name="l00093"></a>00093 %}
<a name="l00094"></a>00094 %option nounput
<a name="l00095"></a>00095 WHITESPACE [ \t\0xa]+
<a name="l00096"></a><a class="code" href="pbrtlex_8l.html#8ea6252eee516d5a3f83d492b7ae29af">00096</a> <a class="code" href="pbrtlex_8l.html#8ea6252eee516d5a3f83d492b7ae29af">NUMBER</a> [-+]?([0-9]+|(([0-9]+\.[0-9]*)|(\.[0-9]+)))([eE][-+]?[0-9]+)?
<a name="l00097"></a>00097 IDENT [a-zA-Z_][a-zA-Z_0-9]*
<a name="l00098"></a>00098 %x STR COMMENT INCL INCL_FILE
<a name="l00099"></a>00099 %%
<a name="l00100"></a>00100 Include { BEGIN(INCL); }
<a name="l00101"></a>00101 <INCL>{WHITESPACE} ;
<a name="l00102"></a>00102 <INCL>\<span class="stringliteral">" { BEGIN(INCL_FILE); }</span>
<a name="l00103"></a>00103 <span class="stringliteral"><INCL>. { ParseError( "</span>Illegal character following Include directive<span class="stringliteral">" ); }</span>
<a name="l00104"></a>00104 <span class="stringliteral"><INCL_FILE>\" { BEGIN INITIAL; }</span>
<a name="l00105"></a>00105 <span class="stringliteral"><INCL_FILE>. { ParseError( "</span>Illegal character in Include file name<span class="stringliteral">" ); }</span>
<a name="l00106"></a>00106 <span class="stringliteral"><INCL_FILE>[\-a-zA-Z_\.0-9/ \t]+ {</span>
<a name="l00107"></a>00107 <span class="stringliteral"> BEGIN(INITIAL);</span>
<a name="l00108"></a>00108 <span class="stringliteral"> include_push(yytext);</span>
<a name="l00109"></a><a class="code" href="pbrt_8h.html#1ca894daa11d476d9e76947dceaf0255">00109</a> <span class="stringliteral">}</span>
<a name="l00110"></a><a class="code" href="pbrt_8h.html#808e08638be3cba36e36759e5b150de0">00110</a> <span class="stringliteral">"</span>#<span class="stringliteral">" { BEGIN COMMENT; }</span>
<a name="l00111"></a>00111 <span class="stringliteral"><COMMENT>. /* eat it up */</span>
<a name="l00112"></a>00112 <span class="stringliteral"><COMMENT>\n { line_num++; BEGIN INITIAL; }</span>
<a name="l00113"></a>00113 <span class="stringliteral">Accelerator { return ACCELERATOR; }</span>
<a name="l00114"></a>00114 <span class="stringliteral">AreaLightSource { return AREALIGHTSOURCE; }</span>
<a name="l00115"></a><a class="code" href="pbrt_8h.html#001481305b57b832d47b5c4d13fbfaac">00115</a> <span class="stringliteral">AttributeBegin { return ATTRIBUTEBEGIN; }</span>
<a name="l00116"></a>00116 <span class="stringliteral">AttributeEnd { return ATTRIBUTEEND; }</span>
<a name="l00117"></a>00117 <span class="stringliteral">Camera { return CAMERA; }</span>
<a name="l00118"></a>00118 <span class="stringliteral">ConcatTransform { return CONCATTRANSFORM; }</span>
<a name="l00119"></a>00119 <span class="stringliteral">CoordinateSystem { return COORDINATESYSTEM; }</span>
<a name="l00120"></a>00120 <span class="stringliteral">CoordSysTransform { return COORDSYSTRANSFORM; }</span>
<a name="l00121"></a>00121 <span class="stringliteral">Film { return FILM; }</span>
<a name="l00122"></a>00122 <span class="stringliteral">Identity { return IDENTITY; }</span>
<a name="l00123"></a>00123 <span class="stringliteral">LightSource { return LIGHTSOURCE; }</span>
<a name="l00124"></a>00124 <span class="stringliteral">LookAt { return LOOKAT; }</span>
<a name="l00125"></a>00125 <span class="stringliteral">Material { return MATERIAL; }</span>
<a name="l00126"></a>00126 <span class="stringliteral">ObjectBegin { return OBJECTBEGIN; }</span>
<a name="l00127"></a>00127 <span class="stringliteral">ObjectEnd { return OBJECTEND; }</span>
<a name="l00128"></a>00128 <span class="stringliteral">ObjectInstance { return OBJECTINSTANCE; }</span>
<a name="l00129"></a>00129 <span class="stringliteral">PixelFilter { return PIXELFILTER; }</span>
<a name="l00130"></a>00130 <span class="stringliteral">ReverseOrientation { return REVERSEORIENTATION; }</span>
<a name="l00131"></a>00131 <span class="stringliteral">Rotate { return ROTATE; }</span>
<a name="l00132"></a>00132 <span class="stringliteral">Sampler { return SAMPLER; }</span>
<a name="l00133"></a>00133 <span class="stringliteral">SearchPath { return SEARCHPATH; }</span>
<a name="l00134"></a>00134 <span class="stringliteral">Scale { return SCALE; }</span>
<a name="l00135"></a>00135 <span class="stringliteral">Shape { return SHAPE; }</span>
<a name="l00136"></a>00136 <span class="stringliteral">SurfaceIntegrator { return SURFACEINTEGRATOR; }</span>
<a name="l00137"></a>00137 <span class="stringliteral">Texture { return TEXTURE; }</span>
<a name="l00138"></a>00138 <span class="stringliteral">TransformBegin { return TRANSFORMBEGIN; }</span>
<a name="l00139"></a>00139 <span class="stringliteral">TransformEnd { return TRANSFORMEND; }</span>
<a name="l00140"></a>00140 <span class="stringliteral">Transform { return TRANSFORM; }</span>
<a name="l00141"></a>00141 <span class="stringliteral">Translate { return TRANSLATE; }</span>
<a name="l00142"></a>00142 <span class="stringliteral">Volume { return VOLUME; }</span>
<a name="l00143"></a>00143 <span class="stringliteral">VolumeIntegrator { return VOLUMEINTEGRATOR; }</span>
<a name="l00144"></a>00144 <span class="stringliteral">WorldBegin { return WORLDBEGIN; }</span>
<a name="l00145"></a>00145 <span class="stringliteral">WorldEnd { return WORLDEND; }</span>
<a name="l00146"></a>00146 <span class="stringliteral">{WHITESPACE} /* do nothing */</span>
<a name="l00147"></a>00147 <span class="stringliteral">\n { line_num++; }</span>
<a name="l00148"></a>00148 <span class="stringliteral">{NUMBER} {</span>
<a name="l00149"></a>00149 <span class="stringliteral"> yylval.num = (float) atof(yytext);</span>
<a name="l00150"></a>00150 <span class="stringliteral"> return NUM;</span>
<a name="l00151"></a>00151 <span class="stringliteral">}</span>
<a name="l00152"></a><a class="code" href="pbrt_8h.html#4aa0727877198ee6610de47c2166da09">00152</a> <span class="stringliteral">{IDENT} {</span>
<a name="l00153"></a>00153 <span class="stringliteral"> strcpy( yylval.string, yytext );</span>
<a name="l00154"></a><a class="code" href="pbrt_8h.html#d77413bab3a58c8c5d47fe7b4de1adbf">00154</a> <span class="stringliteral"> return ID;</span>
<a name="l00155"></a>00155 <span class="stringliteral">}</span>
<a name="l00156"></a>00156 <span class="stringliteral">"</span>[<span class="stringliteral">" { return LBRACK; }</span>
<a name="l00157"></a>00157 <span class="stringliteral">"</span>]<span class="stringliteral">" { return RBRACK; }</span>
<a name="l00158"></a>00158 <span class="stringliteral">\" { BEGIN STR; str_pos = 0; }</span>
<a name="l00159"></a>00159 <span class="stringliteral"><STR>\\n {add_string_char('\n');}</span>
<a name="l00160"></a>00160 <span class="stringliteral"><STR>\\t {add_string_char('\t');}</span>
<a name="l00161"></a>00161 <span class="stringliteral"><STR>\\r {add_string_char('\r');}</span>
<a name="l00162"></a>00162 <span class="stringliteral"><STR>\\b {add_string_char('\b');}</span>
<a name="l00163"></a>00163 <span class="stringliteral"><STR>\\f {add_string_char('\f');}</span>
<a name="l00164"></a>00164 <span class="stringliteral"><STR>\\\" {add_string_char('\"');}</span>
<a name="l00165"></a>00165 <span class="stringliteral"><STR>\\\\ {add_string_char('\\');}</span>
<a name="l00166"></a>00166 <span class="stringliteral"><STR>\\[0-9]{3} {</span>
<a name="l00167"></a>00167 <span class="stringliteral"> int val = atoi(yytext+1);</span>
<a name="l00168"></a>00168 <span class="stringliteral"> while(val > 256)</span>
<a name="l00169"></a>00169 <span class="stringliteral"> val -= 256;</span>
<a name="l00170"></a>00170 <span class="stringliteral"> add_string_char(val);</span>
<a name="l00171"></a>00171 <span class="stringliteral">}</span>
<a name="l00172"></a>00172 <span class="stringliteral"><STR>\\\n {line_num++;}</span>
<a name="l00173"></a>00173 <span class="stringliteral"><STR>\\. { add_string_char(yytext[1]);}</span>
<a name="l00174"></a>00174 <span class="stringliteral"><STR>\" {BEGIN INITIAL; return STRING;}</span>
<a name="l00175"></a>00175 <span class="stringliteral"><STR>. {add_string_char(yytext[0]);}</span>
<a name="l00176"></a>00176 <span class="stringliteral"><STR>\n {ParseError("</span>Unterminated <span class="keywordtype">string</span>!<span class="stringliteral">");}</span>
<a name="l00177"></a>00177 <span class="stringliteral"></span>
<a name="l00178"></a>00178 <span class="stringliteral">. { ParseError( "</span>Illegal character: %c<span class="stringliteral">",yytext[0] ); }</span>
<a name="l00179"></a>00179 <span class="stringliteral">%%</span>
<a name="l00180"></a>00180 <span class="stringliteral">int yywrap(void)</span>
<a name="l00181"></a>00181 <span class="stringliteral">{</span>
<a name="l00182"></a>00182 <span class="stringliteral"> if (includeStack.size() ==0) return 1;</span>
<a name="l00183"></a>00183 <span class="stringliteral"> include_pop();</span>
<a name="l00184"></a>00184 <span class="stringliteral"> BEGIN(INCL_FILE);</span>
<a name="l00185"></a>00185 <span class="stringliteral"> return 0;</span>
<a name="l00186"></a>00186 <span class="stringliteral">}</span>
<a name="l00187"></a>00187 <span class="stringliteral"></span>
</pre></div></div>
<hr size="1"><address style="text-align: right;"><small>Generated on Mon Jul 20 17:31:53 2009 for pbrt by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
</body>
</html>