readworld.l
Go to the documentation of this file.00001 %{
00002
00003
00004
00005
00008 #include <stdlib.h>
00009 #include <string.h>
00010 #include "defines.h"
00011 #include "error_world.h"
00012 #include "readworld.tab.h"
00013
00016 int ReadWorldlex(void);
00017
00018 extern unsigned int RWline;
00019
00020 %}
00021 %s IN_COMMENT
00022
00023 EMPTY [ \t]+
00024 RETURN \n
00025 DIGIT [0-9]
00026 LETTER [a-zA-Z]
00027 R_NUMBER (({DIGIT}+(\.{DIGIT}+)?)|(\.{DIGIT}+))((E|e)[+-]?{DIGIT}+)?
00028 I_NUMBER {DIGIT}+
00029 STRING \"[^\"]+\"
00030 IDENTIFIER {LETTER}({DIGIT}|{LETTER}|"_")*
00031 COMMENT \%[^\n]*
00032 COMMENT2 \#[^\n]*
00033 COMMENT3 \/\/[^\n]*
00034
00035 %%
00036 {COMMENT} { }
00037 {COMMENT2} { }
00038 {COMMENT3} { }
00039
00040 <INITIAL>{
00041 "
00042
00043
00044 " BEGIN(INITIAL);
00045 [^*\n]+ // eat comment in chunks
00046 "*" // eat the lone star
00047 \n RWline++;
00048 }
00049
00050 {EMPTY} { }
00051
00052 {RETURN} { RWline++; }
00053
00054 "[CONSTANTS]" {
00055 return(_CONSTANTS);
00056 }
00057
00058 ":=" {
00059 return(_ASSIGN);
00060 }
00061
00062 PI {
00063 return(_PI);
00064 }
00065
00066 SIN {
00067 return(_SIN);
00068 }
00069
00070 COS {
00071 return(_COS);
00072 }
00073
00074 SQRT {
00075 return(_SQRT);
00076 }
00077
00078 "[LINKS]" {
00079 return(_LINKS);
00080 }
00081
00082 "BODY" {
00083 return(_BODY);
00084 }
00085
00086 "GRANULARITY" {
00087 return(_GRANULARITY);
00088 }
00089
00090 "[JOINTS]" {
00091 return(_JOINTS);
00092 }
00093
00094 "FIX" {
00095 return(_FIX);
00096 }
00097
00098 "ID" {
00099 return(_ID);
00100 }
00101
00102 "TX" {
00103 return(_TX);
00104 }
00105
00106 "TY" {
00107 return(_TY);
00108 }
00109
00110 "TZ" {
00111 return(_TZ);
00112 }
00113
00114 "TXYZ" {
00115 return(_TXYZ);
00116 }
00117
00118 "RX" {
00119 return(_RX);
00120 }
00121
00122 "RY" {
00123 return(_RY);
00124 }
00125
00126 "RZ" {
00127 return(_RZ);
00128 }
00129
00130 "PRISMATIC" {
00131 return(_PRISMATIC);
00132 }
00133
00134 "REVOLUTE" {
00135 return(_REVOLUTE);
00136 }
00137
00138 "SPHERICAL" {
00139 return(_SPHERICAL);
00140 }
00141
00142 "UNIVERSAL" {
00143 return(_UNIVERSAL);
00144 }
00145
00146 "SPH_SPH" {
00147 return(_SPH_SPH);
00148 }
00149
00150 "IN_PATCH" {
00151 return(_IN_PATCH);
00152 }
00153
00154 "LENGTH" {
00155 return(_LENGTH);
00156 }
00157
00158 "RADIUS" {
00159 return(_RADIUS);
00160 }
00161
00162 "SPHERE" {
00163 return(_SPHERE);
00164 }
00165
00166 "CYLINDER" {
00167 return(_CYLINDER);
00168 }
00169
00170 "COLOR" {
00171 return(_COLOR);
00172 }
00173
00174 "RED" {
00175 return(_RED);
00176 }
00177
00178 "GREEN" {
00179 return(_GREEN);
00180 }
00181
00182 "BLUE" {
00183 return(_BLUE);
00184 }
00185
00186 "WHITE" {
00187 return(_WHITE);
00188 }
00189
00190 "BLACK" {
00191 return(_BLACK);
00192 }
00193
00194 "YELLOW" {
00195 return(_YELLOW);
00196 }
00197
00198 "CYAN" {
00199 return(_CYAN);
00200 }
00201
00202 "PURPLE" {
00203 return(_PURPLE);
00204 }
00205
00206 "RANGE" {
00207 return(_RANGE);
00208 }
00209
00210 "AVOID" {
00211 return(_AVOID);
00212 }
00213
00214 "LIMITS" {
00215 return(_LIMITS);
00216 }
00217
00218 {I_NUMBER} {
00219 char string_tmp[100];
00220
00221 memcpy(string_tmp,ReadWorldtext,(unsigned int)ReadWorldleng);
00222 string_tmp[ReadWorldleng]=0;
00223 ReadWorldlval.int_number=atoi(string_tmp);
00224 return(_INTEGER);
00225 }
00226
00227 {R_NUMBER} {
00228 char string_tmp[100];
00229
00230 memcpy(string_tmp,ReadWorldtext,(unsigned int)ReadWorldleng);
00231 string_tmp[ReadWorldleng]=0;
00232 ReadWorldlval.real_number=atof(string_tmp);
00233
00234 return(_REAL);
00235 }
00236
00237 {STRING} {
00238 NEW(ReadWorldlval.string,ReadWorldleng,char);
00239
00240 memcpy(ReadWorldlval.string,&(ReadWorldtext[1]),(unsigned int)ReadWorldleng-2);
00241 ReadWorldlval.string[ReadWorldleng-2]=0;
00242
00243 return(_STRING);
00244 }
00245
00246 {IDENTIFIER} {
00247 NEW(ReadWorldlval.id,ReadWorldleng+1,char);
00248 memcpy(ReadWorldlval.id,ReadWorldtext,(unsigned int)ReadWorldleng);
00249
00250 ReadWorldlval.id[ReadWorldleng]=0;
00251
00252 return(_IDENTIFIER);
00253 }
00254
00255 . { return(ReadWorldtext[0]); }
00256
00257 %%
00258
00259
00260 /*
00261 * This function is automatically called by the parser at the end of a file.
00262 * If 1 is returned the lexical analysis is stopped.
00263 */
00264 int ReadWorldwrap()
00265 {
00266 return(1);
00267 }
00268