001// lexical analyzer  for GSQLParser component java version
002
003/****************************************************}
004{   Lexical analizer for GSQLParser component Java component     }
005{   Copyright (c) 2004-2010 by Gudu software              }
006{****************************************************/
007
008package gudusoft.gsqlparser;
009
010import java.util.HashMap;
011import java.io.InputStreamReader;
012
013import java.util.Locale;
014import java.io.BufferedReader;
015import java.io.IOException;
016
017        
018public class TLexerAccess extends TCustomLexer{
019
020    static int yynmarks = 0  ;
021    static int yynmatches ;
022    static int yyntrans   ;
023    static int yynstates  ;
024    static int[]  yyk,yym ; // 1 based
025    static int[]  yytint;  // 1 based
026    static TYytRec[] yyt ;  // 1 based
027    static int[]  yykl,yykh,yyml,yymh,yytl,yyth ; // 0 based
028    private  static  String[] keywordlist;
029    static String   table_file;
030         static HashMap keywordValueList;
031         static HashMap keywordTypeList;
032    
033    static {
034              keywordValueList = new HashMap();
035              keywordTypeList = new HashMap();
036          table_file = "/gudusoft/gsqlparser/parser/access/access_lex_table.txt";
037              if (TBaseType.enterprise_edition||TBaseType.sqlserver_edition){
038                inittable();
039          }
040    }
041
042    public TLexerAccess(){
043          super();
044          dbvendor = EDbVendor.dbvaccess;
045    }
046
047public boolean canBeColumnName(int tokencode){
048    //http://blog.csdn.net/superbeck/article/details/5387476
049    boolean ret = false;
050    int modifiers = keyword_type_identifier | keyword_type_column ;
051    String s = (String)keywordTypeList.get(Integer.toString(tokencode));
052    if (s != null){
053        int modifier = Integer.parseInt(s);
054        ret = (modifiers & modifier) == modifier;
055    }
056
057    return ret;
058}
059
060public  int iskeyword(String str){
061       int ret = -1;
062       String s = (String) keywordValueList.get(str.toUpperCase(new Locale("Locale.US")));
063       if( s != null){
064           try {
065                  ret = Integer.parseInt(s);
066                 // System.out.println(str+" is keyword, value: "+ret);
067                 } catch (NumberFormatException nfe) {
068                    return -1;
069                 }
070       }
071       return ret;// -1 means not a keyword
072    }
073
074    public int getkeywordvalue(String keyword){
075        try{
076         return Integer.parseInt((String) keywordValueList.get(keyword.toUpperCase()));
077        }catch(NumberFormatException e){
078            return 0;
079        }
080    }
081
082    int yylex(){
083          int yyn;
084           while (true) { // top level while
085              yynew();
086              while (true){  //scan
087                 for(yyn = yykl[yystate]; yyn <= yykh[yystate]; yyn++){
088                     yymark(yyk[yyn]);
089                 }
090
091                 for(yyn=yymh[yystate]; yyn>= yyml[yystate]; yyn--){
092                    yymatch(yym[yyn]);
093                 }
094
095                 if(yytl[yystate] > yyth[yystate]){
096                     break;
097                 }
098
099                 yyscan();
100                 yyn = yytl[yystate];
101                 totablechar();
102                 while( (yyn <= yyth[yystate]) && (!(charinarray(yytablechar,yyt[yyn].cc))) ){
103                   yyn++;
104                 }
105                 if (yyn > yyth[yystate]){
106                     break;
107                 }
108                 yystate = yyt[yyn].s;
109              } //scan
110
111              while (true){ //action
112                int yyrule;
113                if ( (yyrule = yyfind()) != -1 ){
114                   yyaction(yyrule);
115                   if (yyreject){
116                       continue;
117                   }
118                }else if( (!yydefault() ) && (yywrap()) ){
119                   yyclear();
120                   returni(0);
121                }
122                break;
123              }
124
125              if (!yydone) {
126                  continue;
127              }
128              break;
129            } // top level while
130
131           return yyretval;
132        }
133
134    static void inittable(){
135                
136                //if (yynmarks > 0) return; //init table already
137
138        String line;
139        boolean inyyk=false,inyym=false,inyykl=false,inyykh=false,inyyml=false,inyymh=false,inyytl=false,inyyth=false,inyytint=false,inyyt=false,inkeyword=false;
140        int yyk_count=0,yym_count=0,yykl_count=0,yykh_count=0,yyml_count=0,yymh_count=0,yytl_count=0,yyth_count=0,yytint_count=0,yyt_count=0;
141        int c=0;
142        keywordValueList.clear();
143        keywordTypeList.clear();
144        
145        BufferedReader br = new BufferedReader(new InputStreamReader(TLexerAccess.class.getResourceAsStream(table_file)));
146
147            try{
148                while( (line = br.readLine()) != null){
149                          if (line.trim().startsWith("yynmarks=")){
150                             String[] ss = line.split("[=;]");
151                              yynmarks=Integer.parseInt(ss[1].trim());
152                              yyk = new int[yynmarks+1];
153                          }else if (line.trim().startsWith("yynmatches=")){
154                              String[] ss = line.split("[=;]");
155                               yynmatches=Integer.parseInt(ss[1].trim());
156                               yym = new int[yynmatches+1];
157                          }else if (line.trim().startsWith("yyntrans=")){
158                              String[] ss = line.split("[=;]");
159                               yyntrans=Integer.parseInt(ss[1].trim());
160                               yytint = new int[yyntrans+1];
161                               yyt = new TYytRec[yyntrans+1];
162                          }else if (line.trim().startsWith("yynstates=")){
163                              String[] ss = line.split("[=;]");
164                               yynstates=Integer.parseInt(ss[1].trim());
165                               yykl = new int[yynstates];
166                               yykh = new int[yynstates];
167                              yyml = new int[yynstates];
168                              yymh = new int[yynstates];
169                              yytl = new int[yynstates];
170                              yyth = new int[yynstates];
171                          }else if (line.trim().startsWith("<end>")){
172                              if (inyyk){
173                                  inyyk = false;
174                                 if (yynmarks+1 != yyk_count ){
175                                    System.out.println("required1:"+(yynmarks)+" actually:"+(yyk_count-1));
176                                 }
177                              }
178                              else if(inyym){
179                                     inyym = false;
180                                    if (yynmatches+1 != yym_count ){
181                                       System.out.println("required2:"+(yynmatches)+" actually:"+(yym_count-1));
182                                    }
183                              }
184                              else if(inyykl){
185                                     inyykl = false;
186                                    if (yynstates != yykl_count ){
187                                       System.out.println("required3:"+(yynstates)+" actually:"+(yykl_count));
188                                    }
189                              }
190                              else if(inyykh){
191                                     inyykh = false;
192                                    if (yynstates != yykh_count ){
193                                       System.out.println("required4:"+(yynstates)+" actually:"+(yykh_count));
194                                    }
195                              }
196                              else if(inyyml){
197                                     inyyml = false;
198                                    if (yynstates != yyml_count ){
199                                       System.out.println("required5:"+(yynstates)+" actually:"+(yyml_count));
200                                    }
201                              }
202                              else if(inyymh){
203                                     inyymh = false;
204                                    if (yynstates != yymh_count ){
205                                       System.out.println("required:"+(yynstates)+" actually:"+(yymh_count));
206                                    }
207                              }
208                              else if(inyytl){
209                                     inyytl = false;
210                                    if (yynstates != yytl_count ){
211                                       System.out.println("required6:"+(yynstates)+" actually:"+(yytl_count));
212                                    }
213                              }
214                              else if(inyyth){
215                                     inyyth = false;
216                                    if (yynstates != yyth_count ){
217                                       System.out.println("required7:"+(yynstates)+" actually:"+(yyth_count));
218                                    }
219                              }
220                              else if(inyytint){
221                                     inyytint = false;
222                                    if (yyntrans + 1 != yytint_count ){
223                                       System.out.println("required8:"+(yyntrans)+" actually:"+(yytint_count-1));
224                                    }
225                              }
226                              else if(inyyt){
227                                     inyyt = false;
228                                    if (yyntrans+1 != yyt_count ){
229                                       System.out.println("required9:"+(yyntrans)+" actually:"+(yyt_count-1));
230                                    }
231                              }
232                              else if(inkeyword){
233                                     inkeyword = false;
234                              }
235                          }else if(line.trim().startsWith("yyk =")){
236                             inyyk = true; 
237                          }else if(line.trim().startsWith("yym =")){
238                             inyym = true;
239                          }else if(line.trim().startsWith("yykl =")){
240                             inyykl = true;
241                          }else if(line.trim().startsWith("yykh =")){
242                             inyykh = true;
243                          }else if(line.trim().startsWith("yyml =")){
244                             inyyml = true;
245                          }else if(line.trim().startsWith("yymh =")){
246                             inyymh = true;
247                          }else if(line.trim().startsWith("yytl =")){
248                             inyytl = true;
249                          }else if(line.trim().startsWith("yyth =")){
250                             inyyth = true;
251                          }else if(line.trim().startsWith("yytint =")){
252                             inyytint = true;
253                          }else if(line.trim().startsWith("yyt =")){
254                             inyyt = true;
255                        }else if(line.trim().startsWith("keywordsvalue =")){
256                           inkeyword = true;
257                        }else if(inyyk){
258                             String[] ss = line.split("[,]");
259                               for(int j=0;j<ss.length;j++){
260                                   // System.out.println(ss[j].trim());
261                                 yyk[yyk_count++] = Integer.parseInt(ss[j].trim());
262                               }
263                          }else if(inyym){
264                               String[] ss = line.split("[,]");
265                                 for(int j=0;j<ss.length;j++){
266                                     // System.out.println(ss[j].trim());
267                                   yym[yym_count++] = Integer.parseInt(ss[j].trim());
268                                 }
269                          }else if(inyykl){
270                               String[] ss = line.split("[,]");
271                                 for(int j=0;j<ss.length;j++){
272                                    //  System.out.println(ss[j].trim());
273                                   yykl[yykl_count++] = Integer.parseInt(ss[j].trim());
274                                 }
275                          }else if(inyykh){
276                               String[] ss = line.split("[,]");
277                                 for(int j=0;j<ss.length;j++){
278                                     // System.out.println(ss[j].trim());
279                                   yykh[yykh_count++] = Integer.parseInt(ss[j].trim());
280                                 }
281                          }else if(inyyml){
282                               String[] ss = line.split("[,]");
283                                 for(int j=0;j<ss.length;j++){
284                                     // System.out.println(ss[j].trim());
285                                   yyml[yyml_count++] = Integer.parseInt(ss[j].trim());
286                                 }
287                          }else if(inyymh){
288                               String[] ss = line.split("[,]");
289                                 for(int j=0;j<ss.length;j++){
290                                     // System.out.println(ss[j].trim());
291                                   yymh[yymh_count++] = Integer.parseInt(ss[j].trim());
292                                 }
293                          }else if(inyytl){
294                               String[] ss = line.split("[,]");
295                                 for(int j=0;j<ss.length;j++){
296                                     // System.out.println(ss[j].trim());
297                                   yytl[yytl_count++] = Integer.parseInt(ss[j].trim());
298                                 }
299                          }else if(inyyth){
300                               String[] ss = line.split("[,]");
301                                 for(int j=0;j<ss.length;j++){
302                                     // System.out.println(ss[j].trim());
303                                   yyth[yyth_count++] = Integer.parseInt(ss[j].trim());
304                                 }
305                          }else if(inyytint){
306                               String[] ss = line.split("[,]");
307                                 for(int j=0;j<ss.length;j++){
308                                     // System.out.println(ss[j].trim());
309                                   yytint[yytint_count++] = Integer.parseInt(ss[j].trim());
310                                 }
311                          }else if(inyyt){
312                                //System.out.println(line.trim());
313
314                              c = 0;
315                              String[] st = line.trim().split(",,");
316                              char[] tmp = new char[st.length];
317                              for(int i=0;i<st.length;i++){
318
319                                  if(st[i].startsWith("\'")) {
320                                      if(st[i].length() == 3){  // 'a'
321                                          tmp[c++] = st[i].charAt(1);
322                                      }else if(st[i].length() == 4) { // '\\'
323                                          tmp[c++] = st[i].charAt(2);
324                                      }else{
325                                         System.out.println(" read yytstr error, error string is "+st[i]+ "line: "+ yyt_count);
326                                      }
327                                  }else{
328                                      try{
329                                           tmp[c++] = (char)Integer.parseInt(st[i]);   // char in number like 32 that represent space
330                                          } catch (NumberFormatException nfe) {
331                                             System.out.println("NumberFormatException: " + nfe.getMessage());
332                                          }
333                                  }
334                              } //while hasmoreTokens
335
336                          //yyt[lineno] = new YYTrec(tmp,yytint[lineno]);
337                              yyt[yyt_count] = new TYytRec(tmp,yytint[yyt_count]);
338                              yyt_count++;
339
340                          }else if(inkeyword){
341                              String[] ss =line.split("[=]");
342
343                              keywordValueList.put(ss[0].toUpperCase(),ss[1]);
344                              keywordTypeList.put(ss[1],ss[2]);
345                             }
346                }
347                }catch(IOException e){
348                  System.out.println(e.toString());
349                }
350
351    }
352
353   
354
355    void yyaction(int yyruleno){
356
357      int ic;
358      char[] tmparray = {'=','+','-','*','/','>','<'};
359
360      yylvalstr = getyytext();
361  /* actions: */
362  switch(yyruleno){
363  case 1:
364                
365        {
366              addlit(yylvalstr,yytextlen);
367              if (xcdepth <= 0)
368                 {
369                  start(init);
370                  yylvalstr = litbufdup();
371                  returni(cmtslashstar);
372                 }
373              else
374                 xcdepth--;
375
376            break;
377        }
378  case 2:
379                
380          {
381              xcdepth++;
382              yyless(2);
383              addlit(yylvalstr,yytextlen);
384              break;
385           }
386
387  case 3:
388                        
389          {
390
391              if (getyysstate() == xq)
392              {
393                  nchars = yytextlen;
394                  addlit(yylvalstr, yytextlen-1);
395                  yyless(nchars-1);
396                  return;//exit;
397              }
398
399              xcdepth = 0;
400              start(xc);
401              startlit();
402              yyless(2);
403              addlit(yylvalstr,yytextlen);
404
405          break;
406          }
407
408  case 4:
409                
410          {
411            addlit(yylvalstr,yytextlen);
412            break;
413          }
414
415  case 5:
416                
417          {
418              addlitchar(yylvalstr.charAt(0));
419              break;
420          }
421  case 6:
422                
423          {
424              start(init);
425              addlit(yylvalstr, yytextlen);
426              yylvalstr = litbufdup();
427              returni(sconst);
428              break;
429          }
430
431  case 7:
432                
433          {
434            addlit(yylvalstr, yytextlen);
435            break;
436          }
437
438  case 8:
439            
440          {
441              if (getyysstate() == xq)
442              {
443                  nchars = yytextlen;
444                  addlit(yylvalstr, yytextlen-1);
445                  yyless(nchars-1);
446                  return;//exit;
447              }
448
449              start(xq);
450              startlit();
451              addlit(yylvalstr,yytextlen);
452              break;
453          }
454
455  case 9:
456                        
457          {
458              if (yysstate == xd)
459                {
460                  addlit(yylvalstr, yytextlen);
461                }
462              else
463                {
464                  start(xq);
465                  startlit();
466                  addlit(yylvalstr, yytextlen);
467                  dummych1 = get_char();
468                  if (dummych1 == '\\') // recognize string like '\'
469                    {
470                      dummych2 = get_char();
471                      if (dummych2 == '\'')
472                      {
473                          start(init);
474                          addlit("\\", 1);
475                          addlit("\'", 1);
476                          yylvalstr = litbufdup();
477                          returni(sconst);
478                      }
479                      else
480                       {
481                          unget_char(dummych2);
482                          unget_char(dummych1);
483                        }
484                    }
485                  else
486                    unget_char(dummych1);
487                }
488
489              break;
490          }
491
492  case 10:
493                
494          {
495              addlit(yylvalstr, yytextlen);
496              break;
497          }
498
499  case 11:
500                
501          {
502            dummych1 = get_char();
503            unget_char(dummych1);
504            if (dummych1 == (char)10)
505              {
506                dummych1 = get_char();
507                addlit(yylvalstr+dummych1, yytextlen+1);
508              } else if (dummych1 == '\\')
509                  {
510                      dummych1 = get_char();
511                      dummych2 = get_char();
512                      if (dummych2 == '\'')
513                        {
514                          unget_char(dummych2);
515                          addlit(yylvalstr+dummych1, yytextlen+1);
516                        }
517                      else
518                        addlit(yylvalstr+dummych1+dummych2, yytextlen+2);
519                  }
520                else
521                  addlit(yylvalstr, yytextlen);
522
523          break;
524         }
525        
526  case 12:
527                 
528          {
529              addlit(yylvalstr, yytextlen);
530              break;
531          }
532  case 13:
533                
534          {
535              start(init);
536              addlit(yylvalstr, yytextlen);
537              if (literallen == 0)   returni (error);
538              if (literallen >= namedatalen)
539              {
540                 setlengthofliteralbuf(namedatalen);
541                 literallen = namedatalen;
542              }
543              yylvalstr = litbufdup();
544              returni (ident);
545
546              break;
547          }
548
549  case 14:
550               
551          {
552          addlit(yylvalstr, yytextlen);
553          break;
554          }
555  case 15:
556                        
557          {
558              start(xd);
559              startlit();
560              addlit(yylvalstr, yytextlen);
561              break;
562          }
563        
564  case 16:
565                
566          {
567            dummych1 = get_char();
568            unget_char(dummych1);
569            if (dummych1 == (char)10)
570              {
571                    dummych1 = get_char();
572                    addlit(yylvalstr+dummych1, yytextlen+1);
573              } else
574                addlit(yylvalstr, yytextlen);
575
576          break;
577          }
578  case 17:
579                              
580          {
581              dummych1 = get_char();
582              unget_char(dummych1);
583              if (dummych1 == ']')
584                  {
585                      dummych1 = get_char();
586                      addlit(yylvalstr+dummych1, yytextlen+1);
587                  }
588              else
589                  {
590                      start(init);
591                      addlit(yylvalstr, yytextlen);
592                      if (literallen == 0) returni (error);
593                      if (literallen >= namedatalen)
594                          {
595                              setlengthofliteralbuf(namedatalen);
596                              literallen = namedatalen;
597                          }
598                      yylvalstr = litbufdup();
599                      returni (ident);
600                  }
601
602          break;
603          }
604          
605  case 18:
606                     
607                                        {
608                                                addlit(yylvalstr, yytextlen);
609                                                break;
610                                        }       
611
612  case 19:
613                               
614          {
615              start(xdbracket);
616              startlit();
617              addlit(yylvalstr, yytextlen);
618              break;
619          }
620        
621  case 20:
622                              
623          {
624              dummych1 = get_char();
625              unget_char(dummych1);
626              if (dummych1 == (char)10)
627              {
628                  dummych1 = get_char();
629                  addlit(yylvalstr+dummych1, yytextlen+1);
630              }
631              else
632                  addlit(yylvalstr, yytextlen);
633
634          break;
635          }
636
637
638  case 21:
639                
640          {
641            returni(lexnewline);
642            break;
643          }
644
645  case 22:
646        
647          {
648              returni(lexspace);
649              break;
650          }
651
652  case 23:
653                
654          {
655          if ((getyysstate() == xq)
656              || (getyysstate() == xd)
657              || (getyysstate() == xc)
658              || (getyysstate() == xdbracket))
659          {
660              addlit(yylvalstr, 1);
661              yyless(1);
662              return;//exit;
663          }
664
665          returni(cmtdoublehyphen);
666          break;
667          }
668
669  case 24:
670        
671          {
672               returnc(yylvalstr.charAt(0));
673               break;
674          }
675
676  case 25:
677                       
678          {
679            returni(cmpop);
680            break;
681          }
682        
683  case 26:
684           
685          {
686
687          if (getyysstate() == xc)
688             {
689              slashstar = yylvalstr.indexOf("*/");
690                if (slashstar > 0)
691                  {
692                      start(init);
693                      addlit(yylvalstr,slashstar+2);
694                      yylvalstr = litbufdup();
695                      yyless(slashstar+2);
696                      returni(cmtslashstar);
697                  }
698                else
699                  {
700                      addlit(yylvalstr,1);
701                      yyless(1);
702                  }
703             }
704          else
705            {
706              nchars = yytextlen;
707              slashstar = yylvalstr.indexOf("/*");
708              dashdash = yylvalstr.indexOf("--");
709              if ((slashstar > 0) && (dashdash > 0))
710                {
711                  //if both appear, take the first one
712                   if (slashstar > dashdash)
713                    {slashstar = dashdash;}
714                }
715              else
716                {
717                  //   if slashstar=0 then slashstar := dashdash;
718                  // add (getyysstate <> xc) to avoid something like this */--,here */ should be handled instead of --
719                  if ((slashstar > 0) && (getyysstate() != xc)) {
720                    nchars = slashstar;
721                    }
722                }
723
724              while ((nchars > 1)
725                      && ( (yylvalstr.charAt(nchars-1) == '+' )
726                          || (yylvalstr.charAt(nchars-1) =='-'))
727                      && (getyysstate() != xc))
728                {
729                  for (ic = nchars - 1; ic>=1; ic--)
730                  {
731                    if (isopchar(yylvalstr.charAt(ic-1)))  break;
732                  }
733                  if (ic >= 1) break;
734                  nchars--;
735                }
736
737              if (nchars < yytextlen)
738                {
739                  //Strip the unwanted chars from the token
740                  yyless(nchars);
741                  yylvalstr = yylvalstr.substring(0,nchars);
742                }
743
744                  ///*
745                  // * If what we have left is only one char, and it's
746                  // * one of the characters matching "self", then
747                  // * return it as a character token the same way
748                  // * that the "self" rule would have.
749                  // * make sure @ return as self char, by james wang
750                  // */
751                  if ((nchars == 1) && (isselfchar(yylvalstr.charAt(0)) || (yylvalstr.charAt(0) == '@')))
752                    {
753                      returnc(yylvalstr.charAt(0));
754                    }
755                  else if ( (nchars >= 2) && (yylvalstr.charAt(nchars-1-1) == '.') )
756                    {
757                        yyless(1);
758                        returnc(yylvalstr.charAt(0));
759                    }
760                  else if (
761                              (nchars >= 2)
762                                  &&(
763                                       charinarray(yylvalstr.charAt(nchars-1-1), tmparray)
764                                       && (yylvalstr.charAt(nchars-1) == ':')
765                                       )
766                           )
767                      {
768                        yyless(nchars-1);
769                         yylvalstr = yylvalstr.substring(0,nchars-1);
770                        if (nchars == 2)
771                          returnc(yylvalstr.charAt(0));
772                        else
773                          returni(op);
774                      }
775                    else if (
776                                (nchars >= 2)
777                                    && (
778                                          charinarray(yylvalstr.charAt(nchars-1-1),tmparray)
779                                          && (yylvalstr.charAt(nchars-1) == '.')
780                                         )
781                               )
782                        {
783                          yyless(nchars-1);
784                           yylvalstr = yylvalstr.substring(0,nchars-1);
785                          if (nchars == 2)
786                            returnc(yylvalstr.charAt(0));
787                          else
788                            returni(op);
789                        }
790                    else if ( (nchars >= 2) && (yylvalstr.charAt(nchars-1) == '@') )
791                      {
792                        if (nchars == 2)
793                          { // such as >@
794                              yyless(nchars-1);
795                            yylvalstr = yylvalstr.substring(0,nchars-1);
796                             returnc(yylvalstr.charAt(0));
797                          }
798                        else
799                          {
800                            if (yylvalstr.charAt(nchars-1-1) == '@')
801                              { //such as >@@,>=@@
802                                  yyless(nchars-2);
803                                yylvalstr = yylvalstr.substring(0,nchars-2);
804                                if (nchars == 3)
805                                    returnc(yylvalstr.charAt(0));
806                                else
807                                    returni(op);
808                              }
809                            else
810                              { // >=@
811                                  yyless(nchars-1);
812                                yylvalstr = yylvalstr.substring(0,nchars-1);
813                                  returni(op);
814                              }
815                          }
816                         }
817                      else if ( (nchars > 2) && (yylvalstr.charAt(0)== '|') && (yylvalstr.charAt(1) == '|'))
818                        { //||--sss ,just get || only
819                              yyless(2);
820                              yylvalstr = yylvalstr.substring(0,2);
821                              returni(op);
822                        }
823                      else if ((nchars == 2) && ((yylvalstr.charAt(0) =='.') && ( (yylvalstr.charAt(1)=='*') || (yylvalstr.charAt(1) =='#')) ))
824                          {
825                            yyless(1);
826                            returnc(yylvalstr.charAt(0));
827                          }
828                      else if ((nchars == 2) && ((yylvalstr.charAt(0) == '=') && ( (yylvalstr.charAt(1) == '#')) ))
829                          {
830                            yyless(1);
831                            returnc(yylvalstr.charAt(0));
832                          }
833                      else if (((nchars > 2) && (yylvalstr.charAt(0) == '*'))
834                              && (yylvalstr.charAt(1) == '/')
835                              && (getyysstate() == xc)
836                              )
837                           { //in comment, and find */ , then it must the end of comment
838                             yyless(2);
839                                addlit(yylvalstr,yytextlen);
840                             if (xcdepth <= 0)
841                               {
842                                 start(init);
843                                 yylvalstr = litbufdup();
844                                 returni(cmtslashstar);
845                               }
846                             else
847                               xcdepth--;
848                           }
849                      else
850                        returni(op);
851               }
852
853          break;
854          }
855
856  case 27:
857                        
858          {
859               returni(iconst);
860               break;
861          }
862
863  case 28:
864                        
865          {
866            ///*  for i in 1..5 loop, we can't recognize 1. as a decimal,but 1 as decimal
867            nchars = yytextlen;
868            if (yylvalstr.charAt(nchars-1) == '.')
869              {
870                dummych1 = get_char();
871                unget_char(dummych1);
872                if (dummych1 == '.')
873                  {
874                      yyless(nchars-1);
875                    yylvalstr = yylvalstr.substring(0,nchars - 1);
876                    returni (iconst);
877                    return;//exit;
878                  }
879              }
880            returni (fconst);
881           break;
882          }
883
884  case 29:
885                        
886          {
887           returni (fconst);
888           break;
889          }
890          
891  case 30:
892                
893        {
894          returni(ident);
895          break;
896        }          
897
898  case 31:
899              
900          {
901            int rw;
902            if ( (rw = iskeyword(yylvalstr)) != -1)   { returni(rw);}
903            else
904               returni(ident);
905            break;
906          }
907
908  case 32:
909           
910          {
911            returni(variable);
912
913            break;
914          }
915 
916   
917  case 33:
918                        
919          {
920            returni( error);
921            break;
922          }
923                                        
924    default:{
925     System.out.println("fatal error in yyaction");
926    }
927   }//switch
928}/*yyaction*/;
929
930
931
932        }