Institut de Robòtica i Informàtica Industrial
KRD Group

The CuikSuite Project

readworld.l

Go to the documentation of this file.
00001 %{
00002 /*
00003 * Lexical analizer for the function that initilizes a set of multilineal equations from a file
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; /*current line number (declared in the YACC module and updated here)*/
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   "/*"              BEGIN(IN_COMMENT);
00042 }
00043 <IN_COMMENT>{
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