home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 mARCH / PCWK3A99.iso / Linux / DDD331 / DDD-3_1_.000 / DDD-3_1_ / ddd-3.1.1 / ddd / regexps.C < prev    next >
C/C++ Source or Header  |  1998-10-23  |  10KB  |  248 lines

  1. // $Id: regexps.C,v 1.28 1998/10/23 11:47:06 zeller Exp $ -*- C++ -*-
  2. // Regular expressions used in DDD
  3.  
  4. // Copyright (C) 1997 Technische Universitaet Braunschweig, Germany.
  5. // Written by Andreas Zeller <zeller@ips.cs.tu-bs.de>.
  6. // 
  7. // This file is part of DDD.
  8. // 
  9. // DDD is free software; you can redistribute it and/or
  10. // modify it under the terms of the GNU General Public
  11. // License as published by the Free Software Foundation; either
  12. // version 2 of the License, or (at your option) any later version.
  13. // 
  14. // DDD is distributed in the hope that it will be useful,
  15. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  17. // See the GNU General Public License for more details.
  18. // 
  19. // You should have received a copy of the GNU General Public
  20. // License along with DDD -- see the file COPYING.
  21. // If not, write to the Free Software Foundation, Inc.,
  22. // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  23. // 
  24. // DDD is the data display debugger.
  25. // For details, see the DDD World-Wide-Web page, 
  26. // `http://www.cs.tu-bs.de/softech/ddd/',
  27. // or send a mail to the DDD developers <ddd@ips.cs.tu-bs.de>.
  28.  
  29. char regexps_rcsid[] = 
  30.     "$Id: regexps.C,v 1.28 1998/10/23 11:47:06 zeller Exp $";
  31.  
  32. #ifdef __GNUG__
  33. #pragma implementation
  34. #endif
  35.  
  36. #include "regexps.h"
  37. #include "assert.h"
  38. #include "misc.h"        // min()
  39. #include <string.h>
  40. #include <iostream.h>
  41.  
  42. // The first DATA_LEN characters are used to choose the actual regexp.
  43. #define DATA_LEN 2
  44.  
  45. #include "rxscan.C"
  46.  
  47. // Initial state
  48. #ifndef INTIIAL
  49. #define INITIAL 0
  50. #endif
  51.  
  52. static int rx_matcher(void *data, const char *s, int len, int pos)
  53. {
  54. #ifndef FLEX_SCANNER
  55.     int required_len = len - pos + DATA_LEN;
  56.     if (required_len > MAX_LEX_TOKEN_SIZE)
  57.     {
  58.     static int max_reported_len = 0;
  59.     if (required_len > max_reported_len)
  60.     {
  61.         cerr << "Warning: LEX buffer overflow.\n";
  62.         cerr << "Please raise the value of "
  63.         "MAX_LEX_TOKEN_SIZE in `ddd/rxscan.L'\n"
  64.         "from " << MAX_LEX_TOKEN_SIZE << " to " 
  65.          << required_len << " or more and recompile.  "
  66.         "Better yet, use FLEX instead of LEX.\n";
  67.         max_reported_len = required_len;
  68.     }
  69.  
  70.     // Only look at the first MAX_LEX_TOKEN_SIZE characters
  71.     len = pos + MAX_LEX_TOKEN_SIZE - DATA_LEN;
  72.     assert(len - pos + DATA_LEN == MAX_LEX_TOKEN_SIZE);
  73.     }
  74. #endif
  75.  
  76.     the_prefix = (char *)data;
  77.     the_text   = s + pos;
  78.     the_length = len - pos;
  79.  
  80.     assert(strlen(the_prefix) == DATA_LEN);
  81.  
  82.     // Restart the scanner
  83.     reset_scanner();
  84.     BEGIN(INITIAL);
  85.  
  86.     int ret;
  87.     if (dddlex() == 0)
  88.     ret = -1;        // not matched
  89.     else
  90.     ret = dddleng - DATA_LEN; // # of characters matched
  91.  
  92.     return ret;
  93. }
  94.  
  95.  
  96. // All the regexps used in DDD
  97.  
  98. const regex rxaddr            (rx_matcher, (void *)"01");
  99. const regex rxaddress            (rx_matcher, (void *)"02");
  100. const regex rxaddress_in        (rx_matcher, (void *)"03");
  101. const regex rxaddress_start        (rx_matcher, (void *)"04");
  102.  
  103. #if !WITH_RUNTIME_REGEX
  104. const regex rxalpha            (rx_matcher, (void *)"05");
  105. const regex rxalphanum            (rx_matcher, (void *)"06");
  106. #endif
  107.  
  108. const regex rxarglist            (rx_matcher, (void *)"07");
  109. const regex rxat            (rx_matcher, (void *)"08");
  110. const regex rxblank            (rx_matcher, (void *)"09");
  111. const regex rxblanks            (rx_matcher, (void *)"10");
  112. const regex rxblanks_or_tabs        (rx_matcher, (void *)"11");
  113. const regex rxbreak_cmd            (rx_matcher, (void *)"12");
  114. const regex rxcd_cmd            (rx_matcher, (void *)"13");
  115. const regex rxcolons            (rx_matcher, (void *)"14");
  116. const regex rxcore            (rx_matcher, (void *)"15");
  117. const regex rxcore_cmd            (rx_matcher, (void *)"16");
  118. const regex rxcrlf            (rx_matcher, (void *)"17");
  119. const regex rxdata            (rx_matcher, (void *)"18");
  120. const regex rxdbx_begin_of_display    (rx_matcher, (void *)"19");
  121. const regex rxdbx_begin_of_display_info    (rx_matcher, (void *)"20");
  122. const regex rxdbx_scope            (rx_matcher, (void *)"21");
  123. const regex rxdbxframe            (rx_matcher, (void *)"22");
  124. const regex rxdbxfunc            (rx_matcher, (void *)"23");
  125. const regex rxdbxfunc2            (rx_matcher, (void *)"24");
  126. const regex rxdbxpos            (rx_matcher, (void *)"25");
  127. const regex rxdbxwarn1            (rx_matcher, (void *)"26");
  128. const regex rxdbxwarn2            (rx_matcher, (void *)"27");
  129. const regex rxdebug_cmd            (rx_matcher, (void *)"28");
  130. const regex rxdep            (rx_matcher, (void *)"29");
  131. const regex rxdisable            (rx_matcher, (void *)"30");
  132. const regex rxdisplay            (rx_matcher, (void *)"31");
  133. const regex rxdisplay_cmd        (rx_matcher, (void *)"32");
  134. const regex rxdisplay_cmd_and_args    (rx_matcher, (void *)"33");
  135. const regex rxdont            (rx_matcher, (void *)"34");
  136. const regex rxdotdot            (rx_matcher, (void *)"35");
  137.  
  138. #if !WITH_RUNTIME_REGEX
  139. const regex rxdouble            (rx_matcher, (void *)"36");
  140. #endif
  141.  
  142. const regex rxdown_cmd            (rx_matcher, (void *)"37");
  143. const regex rxenable            (rx_matcher, (void *)"38");
  144. const regex rxeqeq            (rx_matcher, (void *)"39");
  145. const regex rxfile_cmd            (rx_matcher, (void *)"40");
  146. const regex rxfilepath            (rx_matcher, (void *)"41");
  147. const regex rxuse_cmd            (rx_matcher, (void *)"42");
  148. const regex rxframe_addr        (rx_matcher, (void *)"43");
  149. const regex rxframe_cmd            (rx_matcher, (void *)"44");
  150. const regex rxfunction_call        (rx_matcher, (void *)"45");
  151. const regex rxgdb_begin_of_display    (rx_matcher, (void *)"46");
  152. const regex rxgdb_begin_of_display_info    (rx_matcher, (void *)"47");
  153. const regex rxgdb_disp_nr        (rx_matcher, (void *)"48");
  154. const regex rxjdbpos                    (rx_matcher, (void *)"49");
  155. const regex rxgraph_cmd            (rx_matcher, (void *)"50");
  156. const regex rxidentifier        (rx_matcher, (void *)"51");
  157. const regex rxindex            (rx_matcher, (void *)"52");
  158.  
  159. #if !WITH_RUNTIME_REGEX
  160. const regex rxint            (rx_matcher, (void *)"53");
  161. #endif
  162.  
  163. const regex rxinvalid_value        (rx_matcher, (void *)"54");
  164. const regex rxlookup_cmd        (rx_matcher, (void *)"55");
  165.  
  166. #if !WITH_RUNTIME_REGEX
  167. const regex rxlowercase            (rx_matcher, (void *)"56");
  168. #endif
  169.  
  170. const regex rxm3comment            (rx_matcher, (void *)"57");
  171. const regex rxmake_cmd            (rx_matcher, (void *)"58");
  172. const regex rxmembers_of_nl        (rx_matcher, (void *)"59");
  173. const regex rxmore_than_one        (rx_matcher, (void *)"60");
  174. const regex rxname_colon_int_nl        (rx_matcher, (void *)"61");
  175. const regex rxnl            (rx_matcher, (void *)"62");
  176. const regex rxnl_int            (rx_matcher, (void *)"63");
  177. const regex rxnladdress            (rx_matcher, (void *)"64");
  178. const regex rxnladdress_in        (rx_matcher, (void *)"65");
  179. const regex rxnlstar            (rx_matcher, (void *)"66");
  180. const regex rxnonzero1            (rx_matcher, (void *)"67");
  181. const regex rxnonzero2            (rx_matcher, (void *)"68");
  182. const regex rxnop_cmd            (rx_matcher, (void *)"69");
  183. const regex rxnum            (rx_matcher, (void *)"70");
  184. const regex rxop_cmd            (rx_matcher, (void *)"71");
  185. const regex rxoptions            (rx_matcher, (void *)"72");
  186. const regex rxout_of_range        (rx_matcher, (void *)"73");
  187. const regex rxpath_cmd            (rx_matcher, (void *)"74");
  188. const regex rxpc            (rx_matcher, (void *)"75");
  189. const regex rxjdbprompt            (rx_matcher, (void *)"76");
  190. const regex rxjdbprompt_reverse         (rx_matcher, (void *)"77");
  191. const regex rxprocess1            (rx_matcher, (void *)"78");
  192. const regex rxprocess2            (rx_matcher, (void *)"79");
  193. const regex rxprompt            (rx_matcher, (void *)"80");
  194. const regex rxq                (rx_matcher, (void *)"81");
  195. const regex rxreference            (rx_matcher, (void *)"82");
  196. const regex rxrefresh_cmd        (rx_matcher, (void *)"83");
  197. const regex rxreturn            (rx_matcher, (void *)"84");
  198. const regex rxrun_cmd            (rx_matcher, (void *)"85");
  199. const regex rxrunning_cmd        (rx_matcher, (void *)"86");
  200. const regex rxselect            (rx_matcher, (void *)"87");
  201. const regex rxsemicolon_and_brace    (rx_matcher, (void *)"88");
  202. const regex rxsep            (rx_matcher, (void *)"89");
  203. const regex rxset1_cmd            (rx_matcher, (void *)"90");
  204. const regex rxset2_cmd            (rx_matcher, (void *)"91");
  205. const regex rxset_args_cmd        (rx_matcher, (void *)"92");
  206. const regex rxsetting_cmd        (rx_matcher, (void *)"93");
  207. const regex rxsimple            (rx_matcher, (void *)"94");
  208. const regex rxsingle_display_cmd    (rx_matcher, (void *)"95");
  209. const regex rxspace            (rx_matcher, (void *)"96");
  210. const regex rxstopped_addr        (rx_matcher, (void *)"97");
  211. const regex rxstruct_begin        (rx_matcher, (void *)"98");
  212. const regex rxjdbprompt_nothread        (rx_matcher, (void *)"99");
  213. const regex rxstruct_end        (rx_matcher, (void *)"A0");
  214. const regex rxstruct_keyword_begin    (rx_matcher, (void *)"A1");
  215. const regex rxterminated        (rx_matcher, (void *)"A2");
  216. const regex rxthread_cmd        (rx_matcher, (void *)"A3");
  217. const regex rxundisplay            (rx_matcher, (void *)"A4");
  218. const regex rxup_cmd            (rx_matcher, (void *)"A5");
  219.  
  220. #if !WITH_RUNTIME_REGEX
  221. const regex rxuppercase            (rx_matcher, (void *)"A6");
  222. #endif
  223.  
  224. const regex rxvtable            (rx_matcher, (void *)"A7");
  225. const regex rxvtable_entries        (rx_matcher, (void *)"A8");
  226.  
  227. #if !WITH_RUNTIME_REGEX
  228. const regex rxwhite            (rx_matcher, (void *)"A9");
  229. #endif
  230.  
  231. const regex rxxdb            (rx_matcher, (void *)"B0");
  232. const regex rxxdbpos            (rx_matcher, (void *)"B1");
  233.  
  234. const regex rxrepeats                   (rx_matcher, (void *)"B2");
  235. const regex rxchain                     (rx_matcher, (void *)"B3");
  236. const regex rxwhen                      (rx_matcher, (void *)"B4");
  237. const regex rxstopped_func              (rx_matcher, (void *)"B5");
  238. const regex rxframe_func                (rx_matcher, (void *)"B6");
  239. const regex rxdefine_cmd                (rx_matcher, (void *)"B7");
  240. const regex rxlist_cmd                  (rx_matcher, (void *)"B8");
  241. const regex rxlist_range                (rx_matcher, (void *)"B9");
  242. const regex rxfilepos                   (rx_matcher, (void *)"C0");
  243. const regex rxdbx_baseclass             (rx_matcher, (void *)"C1");
  244. const regex rxset3_cmd                  (rx_matcher, (void *)"C2");
  245. const regex rxperlprompt                (rx_matcher, (void *)"C3");
  246. const regex rxperlpos                   (rx_matcher, (void *)"C4");
  247. const regex rxperlref                   (rx_matcher, (void *)"C5");
  248.