home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume42 / ccount / part02 < prev    next >
Encoding:
Internet Message Format  |  1994-03-29  |  80.0 KB

  1. From: prechelt@ira.uka.de (Lutz Prechelt)
  2. Newsgroups: comp.sources.misc
  3. Subject: v42i021:  ccount - syntactic readability analysis tool, Part02/03
  4. Date: 29 Mar 1994 20:37:07 -0600
  5. Organization: Sterling Software
  6. Sender: kent@sparky.sterling.com
  7. Approved: kent@sparky.sterling.com
  8. Message-ID: <2naokj$g9l@sparky.sterling.com>
  9. X-Md4-Signature: 96ba841bbba824a0159b9971ca249ccb
  10.  
  11. Submitted-by: prechelt@ira.uka.de (Lutz Prechelt)
  12. Posting-number: Volume 42, Issue 21
  13. Archive-name: ccount/part02
  14. Environment: Perl, sh
  15.  
  16. #! /bin/sh
  17. # This is a shell archive.  Remove anything before this line, then feed it
  18. # into a shell via "sh file" or similar.  To overwrite existing files,
  19. # type "sh file -c".
  20. # Contents:  Ccount/README Ccount/README.1 Ccount/ccounter
  21. #   Ccount/lex.yy.c
  22. # Wrapped by kent@sparky on Thu Mar 24 20:42:22 1994
  23. PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin:$PATH ; export PATH
  24. echo If this archive is complete, you will see the following message:
  25. echo '          "shar: End of archive 2 (of 3)."'
  26. if test -f 'Ccount/README' -a "${1}" != "-c" ; then 
  27.   echo shar: Will not clobber existing file \"'Ccount/README'\"
  28. else
  29.   echo shar: Extracting \"'Ccount/README'\" \(2227 characters\)
  30.   sed "s/^X//" >'Ccount/README' <<'END_OF_FILE'
  31. X
  32. X  README file for 'ccount' analysis tools
  33. X===========================================
  34. X
  35. X'ccount' is a set of simple tools for the analysis of the syntactic
  36. Xreadability of C source programs.
  37. X
  38. XThe attributes computed by the ccount tools are things such as
  39. X  - length of modules/functions/blocks/ifs/whiles/switches, 
  40. X  - number of control structures
  41. X  - number of operators in expressions,
  42. X  - nesting depth of blocks    etc.
  43. X
  44. Xccount consists of the kernel analysis tool 'ccount', which performs
  45. Xsyntactic analysis of C programs WITHOUT running the preprocessor,
  46. Xa simple front end 'ccounter' to simplify the use of 'ccount',
  47. Xand a number of statistical analysis tools that generate reports
  48. Xfrom the tons of data produced by running 'ccount' on a lot of C
  49. Xsource files.
  50. X
  51. XThese statistics include
  52. X   - averages
  53. X   - medians
  54. X   - 25%, 75%, 90%, 95%, 98%, and 99% quantiles
  55. X   - sums
  56. X   - fractions
  57. Xof various of the attributes (and combinations of them) over a set of
  58. Xanalyzed source files.
  59. X
  60. X
  61. XEnvironment:
  62. X------------
  63. X
  64. X'ccount' is implemented as one C program (using a LEX scanner and
  65. Xa YACC parser) and a set of scripts (Bourne-Shell and Perl).
  66. XTo compile and run ccount you only need a C compiler, sh, and perl.
  67. X
  68. XInstallation:
  69. X-------------
  70. X
  71. XTo compile 'ccount' just type 'make'.
  72. XThis should generate a single executable 'ccount'.
  73. XPut this executable and the scripts 'statty*' and 'ccounter' into
  74. Xany directory that is in your $PATH. That's all.
  75. X
  76. X
  77. XManifest:
  78. X----------
  79. X
  80. XThe ccount package consists of the following files:
  81. X
  82. XREADME      (this file)
  83. XREADME.1    Description of 'ccount' and 'ccounter'
  84. XREADME.2    Description of statistical tools 'statty*'
  85. XMakefile    Makefile
  86. Xccount      Executable 'ccount' command [must be generated by make]
  87. Xccount.l    Source file of LEX scanner
  88. Xccount.y    Source file of YACC parser
  89. Xccounter    Script to simplify use of 'ccount'
  90. Xlex.yy.c    C code generated by LEX from ccount.l
  91. Xstatty      "Generate all reports"-script
  92. XstattyB     Blocks report script
  93. XstattyCSE   Control structure and expression report script
  94. XstattyF     Function report script
  95. XstattyM     Module report script
  96. Xy.tab.c     C code generated by YACC from ccount.y
  97. Xy.tab.h     C header file generated by YACC from ccount.y
  98. END_OF_FILE
  99.   if test 2227 -ne `wc -c <'Ccount/README'`; then
  100.     echo shar: \"'Ccount/README'\" unpacked with wrong size!
  101.   fi
  102.   # end of 'Ccount/README'
  103. fi
  104. if test -f 'Ccount/README.1' -a "${1}" != "-c" ; then 
  105.   echo shar: Will not clobber existing file \"'Ccount/README.1'\"
  106. else
  107.   echo shar: Extracting \"'Ccount/README.1'\" \(17228 characters\)
  108.   sed "s/^X//" >'Ccount/README.1' <<'END_OF_FILE'
  109. X****************************************************************************   
  110. X
  111. X            R E A D M E  FILE  of  'C C O U N T'  PROGRAM
  112. X
  113. X****************************************************************************   
  114. X
  115. XAuthor: Joerg Lawrenz, Universitaet Karlsruhe
  116. XDate:   93/11/25
  117. X
  118. X
  119. X
  120. X============================================================================
  121. X0. Synopsis
  122. X============================================================================
  123. X
  124. X    1. Description of 'ccount' program
  125. X    2. Input capabilities of 'ccount' program
  126. X    3. Behaviour in case of syntax error
  127. X    4. Output format of 'ccount' program
  128. X    5. How to apply 'ccount' to a set of source files
  129. X
  130. X
  131. X
  132. X============================================================================
  133. X1. Description of 'ccount' program
  134. X============================================================================
  135. X
  136. Xusage: ccount [-v] <basename.c>
  137. X
  138. Xccount supplies results of the structure of a C source code, e.g. length
  139. Xof functions and control structures, block nesting depths, number of operators
  140. Xin conditions and expressions, number of comment bytes etc.
  141. Xccount reads 'basename.c' for the C source code and 'basename.tpp' for a list
  142. Xof type names and other words and writes the results to 'basename.out'. 
  143. XThe format of 'basename.out' is described in the fourth section. 
  144. X
  145. X'basename.tpp' need not exist, but it gives you the possibility to resolve
  146. Xseveral kinds of parsing problems. It consists of (one entry per line)
  147. X     - type names (with no prefix)
  148. X     - preprocessor conditional directive (line beginning with '#')
  149. X     - name of macro declaration (line beginning with '&')
  150. X     - ignored identifier (line beginning with '!')
  151. X
  152. XFor example:
  153. X     #ifdef DUMMY
  154. X     display
  155. X     !PRIVATE
  156. X     &$DESCRIPTION
  157. X     HOSTINT
  158. X     &va_dcl
  159. X
  160. XTo go into details about 'basename.tpp', see the next section.
  161. X
  162. XThe -v option:
  163. X
  164. X    This option can be useful when there is a syntax error and the 
  165. X    reason is not obvious. You restart 'ccount' with this option and 
  166. X    'ccount' will allow you to follow the lexical analysis. Each token 
  167. X    and its token number will appear on the screen. Perhaps that happens 
  168. X    too quickly for your eyes, but when it stops because of a syntax 
  169. X    error, you have what you want to see: the last tokens before the 
  170. X    error. You can now compare them with the assignments of tokens and 
  171. X    their numbers in 'y.tab.h'. 
  172. X    In addition, the numbers of five selected lexical rules concerning the  
  173. X    identifier context will be indicated (for reasons of internal action 
  174. X    the same rule will probably be indicated more than once). These rules 
  175. X    determine whether the current identifier is a possible type name or not, 
  176. X    except rule 5 which recognizes constructions to declare function 
  177. X    prototypes in ANSI as well as Kernighan/Ritchie style like 
  178. X    extern void error A((char* msg, int level));
  179. X    For more details look at 'ccount.l', the LEX specification file for 
  180. X    the scanner.
  181. X    Note: with the -v option 'ccount' takes longer.
  182. X
  183. X
  184. X
  185. X============================================================================
  186. X2. Input capabilities of 'ccount' program
  187. X============================================================================
  188. X
  189. XThere are some restrictions on the kinds of source code files that can 
  190. Xsuccessfully be parsed by 'ccount'. 
  191. XThe main reason is that the preprocessor is not run, because we must assume 
  192. Xthat included header files are not available. 
  193. XSince comments would be removed by the preprocessor we besides could not 
  194. Xassign comments to functions even if we count comments seperately before 
  195. Xthe whole analysis.
  196. XNot running the preprocessor has still another effect:
  197. XAlternative implementations of complete function fragments that are enclosed 
  198. Xin #ifdef something ... #else ... #endif are counted completely, i.e., all 
  199. Xalternatives are treated as part of the function. This is in the spirit of 
  200. Xthe counting purpose and thus intended. (It is a feature, not a bug)
  201. XA similar statement is true for the non-expansion of macros.
  202. X
  203. XOn the other side we have some problems caused by that:
  204. X
  205. X
  206. X2.1  Recognizing unknown type names
  207. X-------------------------------------
  208. X
  209. X     i.e. type names that are declared in a header file or by #define :
  210. X   
  211. X    Consider the following:
  212. X    
  213. X        BOOLEAN found;
  214. X        display *mywindow;
  215. X
  216. X    If there is no comment within each declaration, 'ccount' recognizes
  217. X    'BOOLEAN' and 'display' as type names by the immediate context.
  218. X    'ccount' assumes an identifier to be a type name whenever this
  219. X    is appropriate and possible and retains it for the rest of the
  220. X        input file.
  221. X
  222. X    Because of this, declarations and uses of objects that have the same 
  223. X    name as a type cannot be parsed, no matter whether these objects are 
  224. X    labels, struct fields, or variables.
  225. X    Note as well that multiplications in declaration parts can cause 
  226. X    syntax errors, e.g.
  227. X
  228. X        int Stack[MaxSize*FieldLength];
  229. X
  230. X    But such problems are rare.
  231. X
  232. X    Special cases:
  233. X
  234. X    a. Some casts to non-pointer-typedef-types X can only be parsed 
  235. X       successfully if a declaration of an X variable appears textually 
  236. X       before the cast, or if the type name occurs in 'basename.tpp'.
  237. X
  238. X    b. Same as with non-pointer-typedef-types as parameters in function
  239. X       declarations like
  240. X
  241. X        extern void error (string);
  242. X
  243. X
  244. X2.2  Handling of #if-preprocessor directives in the following cases:
  245. X---------------------------------------------------------------------
  246. X
  247. X    a. Comments that are not encapsulated in /* ... */ brackets but 
  248. X           instead in preprocessor constructions such as #if 0 ... #endif or
  249. X           #ifdef somethingweird ... #endif or the like
  250. X
  251. X        b. Construction variants that cause syntax conflicts, e.g.
  252. X           
  253. X         #if abc
  254. X         while (x < y) {
  255. X         #else
  256. X         while (x < y-1 && b != a) {
  257. X         #endif
  258. X           do_it();
  259. X         }
  260. X
  261. X    If 'ccount' finds the preprocessor conditional directive (e.g. #if 0,
  262. X    #ifdef dummy) in 'basename.tpp', all following this directive in the 
  263. X        source file up to the first '#else', '#elif' or '#endif' regarding 
  264. X    this '#if...' is considered as preprocessor (PP) comment and thus
  265. X    ignored during the parsing. That is, in the example only
  266. X
  267. X         while (x < y-1 && b != a) {
  268. X           do_it();
  269. X             }
  270. X
  271. X    will be parsed.
  272. X
  273. X    If the same '#if' occurs more than once in the source file, it
  274. X        it is not always necessary and appropriate to treat each correspoding
  275. X    section as a PPcomment. Thus, each occurence will be indicated
  276. X    together with the length (in line) of PPcomment to help you estimating
  277. X    whether you should modify the preprocessor condition in the
  278. X    source file and in 'basename.tpp' in order to better control the
  279. X    handling of PPcomments.
  280. X    Note that there can be real excesses of interlocking '#if's and 
  281. X    '#ifdef's, so that you will probably lose track of what's going on.
  282. X    Then the best is you give up.
  283. X
  284. X
  285. X2.3  Macros that break normal C syntax
  286. X----------------------------------------
  287. X
  288. X    These macros will cause parser errors. This problem is obvious 
  289. X    for macros that for example rename literal elements of C, such as 
  290. X
  291. X      #define IF if(
  292. X      #define THEN ){
  293. X      #define END }
  294. X      #define ELSE else{
  295. X
  296. X    or the like. But also
  297. X
  298. X      #define RETURN_VALUE(x)  {...;}
  299. X          ...
  300. X      a = b + c;
  301. X      RETURN_VALUE(a)
  302. X      c++;
  303. X
  304. X    See yourself if it is worth adding missing semicolons.
  305. X
  306. X    The following exceptions can be handled by 'ccount':
  307. X
  308. X    a. If it seems that a source file can only successfully be parsed
  309. X       by ignoring an identifier, you can force 'ccount' to do it so
  310. X       by writing this identifier with the prefix '!' in 'basename.tpp'.
  311. X
  312. X       For example:
  313. X
  314. X         PRIVATE char c;
  315. X
  316. X       will be accepted if '!PRIVATE' occurs in 'demo.tpp'.
  317. X       Note that 'PRIVATE' is counted as normal identifier and yet it 
  318. X       is still ignored for the whole input file.
  319. X
  320. X    b. 'ccount' accepts macros in declaration parts if the macro names
  321. X       occour each with prefix '&' in 'basename.tpp' and if the macros
  322. X       have one of the following five forms:
  323. X
  324. X         macro_name            (e.g. va_dcl)
  325. X             macro_name()
  326. X             macro_name();
  327. X             macro_name(list)
  328. X         macro_name(list);
  329. X
  330. X       where 'list' consists of expressions and/or type names.
  331. X
  332. X    c. Finally 'ccount' accepts constructions to declare function 
  333. X       prototypes in ANSI as well as Kernighan/Ritchie style like 
  334. X
  335. X         extern void error A((char* msg, int level));
  336. X
  337. X
  338. X
  339. X============================================================================
  340. X3. Behaviour in case of syntax error
  341. X============================================================================
  342. X
  343. XFor many source files 'ccount' will not work upon first trial because of 
  344. Xsyntax errors. In these cases, 'ccount' halts with an error message that 
  345. Xlooks for example like the following:
  346. X
  347. X
  348. X"demo.c", line 70: parser error: syntax error at or near 'calloc'
  349. X-------------------------------------------------------------------------
  350. X           /* reserve_memory_and_complain_if_necessary  (Level 1) */
  351. X
  352. X           b      = malloc (b_size);
  353. X          
  354. X>>         r      = (REFS)calloc ((maxref+1), sizeof (REF_INFO));
  355. X           l      = (LINES)malloc ((maxline+1) * sizeof (LINE_INFO));
  356. X
  357. X           s_root = malloc (s_size);
  358. X          
  359. X-------------------------------------------------------------------------
  360. XPlease enter type name OR
  361. Xpreprocessor conditional directive beginning with '#' OR
  362. Xname of macro declaration beginning with '&' OR
  363. Xignored identifier beginning with '!' OR
  364. Xjust RETURN for giving up!
  365. X'@' at the end will repeat this request:
  366. X
  367. X
  368. Xthat is, 'ccount' gives you a message and the according source line with 
  369. Xfour additional lines of source context before and after it. It then prompts 
  370. Xyou for the entry in 'basename.tpp'. If you enter just a RETURN, the program 
  371. Xterminates. If you enter something else, it is appended to 'basename.tpp'
  372. Xand then the program quits. You have to restart the run for this file, 
  373. Xperhaps with the -v option, until it terminates successfully.
  374. XSometimes you have nevertheless to load the input file in an editor for 
  375. Xgetting more information and for modifying a little the source file if it's
  376. Xtolerable as well as worthwhile.
  377. XFor more support consult the previous section.
  378. X
  379. X
  380. X
  381. X============================================================================
  382. X4. Output format of 'ccount' program
  383. X============================================================================
  384. X
  385. Xccount operates on one source file, say 'basename.c', at a time and
  386. Xproduces one output file 'basename.out'.
  387. XThis output file contains exactly one line per object in the source file.
  388. XThe object types considered by ccount are 
  389. X
  390. X  - module   (i.e. the whole source file)
  391. X  - function (where its nesting depth is defined as 1)
  392. X  - block    (statement sequence between { } WITHIN a function body, nesting
  393. X              depth > 1, except innermost blocks)
  394. X  - innermost block (block with no blocks inside it)
  395. X  - 'if' statement
  396. X  - 'while' or 'do' statement
  397. X  - 'for' statement
  398. X  - 'switch' statement
  399. X  - expression statement
  400. X
  401. XAn operator is counted as 1, including ?: , () , [].
  402. X
  403. XThe count of block lines begins with the first '{' and ends with the
  404. Xaccording '}'. So therefore, in the following example
  405. X
  406. X    if (i == 3) {
  407. X        do_it();
  408. X        i++;
  409. X         }
  410. X
  411. Xthe block length is equal to the length of the 'if'-statement, that is,
  412. Xfour lines.
  413. X
  414. XWe will now describe the output format for each of these types
  415. Xindividually. The common property of all these formats is that they
  416. Xconsist of fields that are separated by one or several spaces or Tabs 
  417. Xand that the contents of each field are a contiguous string of
  418. Xnon-blank non-tab characters (most, in fact, are decimal integer numbers).
  419. X
  420. X
  421. XModule:
  422. X  1. 'M'
  423. X  2. Length (in bytes)
  424. X  3. Length (in lines)
  425. X  4. Comments (in bytes)
  426. X  5. Preprocessor comments (in bytes)
  427. X     (see 2.2)
  428. X  6. Number of identifier uses
  429. X  7. Total accumulated length of identifier uses (in bytes)
  430. X  8. Number of keyword or symbol uses
  431. X  9. Total accumulated length of keyword/symbol uses (in bytes)
  432. X 10. Number of preprocessor directives
  433. X 11. Total accumulated length of preprocessor directives (in bytes)
  434. X 12. Total number of ';'
  435. X 13. Number of functions
  436. X 14. Average innermost block length (in semicolons)
  437. X     (blockless functions are also considered here, see Function (13.))
  438. X 15. Standard deviation of the above
  439. X 16. Maximum innermost block length (in semicolons)
  440. X 17. Average average block nesting depth per function
  441. X 18. Standard deviation of the above
  442. X 19. Maximum average block nesting depth per function
  443. X
  444. X
  445. XFunction:
  446. X  1. 'F'
  447. X  2. Length (in bytes)
  448. X  3. Length (in lines)
  449. X  4. Comments (in bytes)
  450. X  5. Number of ';'
  451. X  6. Number of 'if' statements
  452. X  7. Number of 'while' or 'do' statements
  453. X  8. Number of 'for' statements
  454. X  9. Number of 'switch' statements
  455. X 10. Number of 'goto' statements
  456. X 11. Number of labels
  457. X 12. Number of all blocks
  458. X 13. Average innermost block length (in semicolons)
  459. X     (is set to the value of (5.) if there are no blocks)
  460. X 14. Standard deviation of the above
  461. X 15. Maximum innermost block length (in semicolons)
  462. X 16. Average block nesting depth
  463. X 17. Standard deviation of the above
  464. X 18. Maximum block nesting depth
  465. X
  466. X
  467. XBlock (which is not an innermost block):
  468. X  1. 'B' 
  469. X  2. Length (in lines)
  470. X  3. Number of ';'
  471. X  4. Nesting depth
  472. X  5. Total number of enclosed blocks
  473. X  6. Maximum absolute nesting depth of enclosed blocks
  474. X
  475. X
  476. XInnermost block:
  477. X  1. 'I'
  478. X  2. Length (in lines)
  479. X  3. Number of ';'
  480. X  4. Nesting depth
  481. X
  482. X
  483. X'if' statement:
  484. X  1. 'i'
  485. X  2. Length (in lines) total
  486. X  3. Number of operators in 'if' condition
  487. X  4. Length (in lines) of 'then' part
  488. X  5. Number of ';' in 'then' part 
  489. X  6. Length (in lines) of 'else' part
  490. X  7. Number of ';' in 'else' part 
  491. X  8. Nesting depth
  492. X
  493. X
  494. X'while' or 'do' statement:
  495. X  1. 'w'
  496. X  2. Length (in lines) total
  497. X  3. Number of ';'
  498. X  4. Nesting depth
  499. X  5. Number of operators in 'while' condition
  500. X  6. Number of 'break' or 'continue' statements for this 'do' or 'while'
  501. X
  502. X
  503. X'for' statement:
  504. X  1. 'f'
  505. X  2. Length (in lines) total
  506. X  3. Number of ';' (including those in head)
  507. X  4. Nesting depth
  508. X  5. Number of operators in second expression of head
  509. X  6. Number of break statements for this 'for'
  510. X
  511. X
  512. X'switch' statement:
  513. X  1. 's'
  514. X  2. Length (in lines) total
  515. X  3. Number of ';' 
  516. X  4. Nesting depth
  517. X  5. Number of operators in head expression
  518. X  6. Number of case labels
  519. X  7. Number of break statements for this 'switch'
  520. X
  521. X
  522. Xexpression statements (i.e. expression followed by ';'):
  523. X  1. 'e'
  524. X  2. Number of operators 
  525. X  3. Nesting depth
  526. X
  527. X
  528. X
  529. X============================================================================
  530. X5. How to apply 'ccount' to a set of source files
  531. X============================================================================
  532. X
  533. XProbably you want to get results for many source files.
  534. XRemember that 'ccount' can treat only one input file.
  535. XTherefore in addition there is 'ccounter', a shell script that
  536. Xanalyzes a set of source files using 'ccount'.
  537. XBut 'ccounter' can do still more:
  538. X
  539. X     a. You can set a step size in order to select only a certain fraction
  540. X    of source files, for example: if the step size is 2, 'ccounter' will
  541. X    take only every second one of the given source files.
  542. X
  543. X     b. If there is a syntax error you have two additional options after the
  544. X    request:
  545. X    - If you type '%', the current source file will be parsed again.
  546. X      (Meanwhile you have edited the source file in another window.)
  547. X    - If you type '*', the current source file will be parsed again with
  548. X      the -v option.
  549. X    Note that these two options are not indicated, yet they still are
  550. X    available.
  551. X
  552. X     c. No matter what your entry is after a parser error, if it is more than
  553. X    a RETURN, the same source file will be parsed again automatically,
  554. X    otherwise 'ccounter' proceeds to the next input file.
  555. X
  556. XAs you see, 'ccounter' is useful even if you consider just one source file.
  557. X
  558. XNote that 'ccount' must be in the current working directory or in your
  559. X$PATH before you begin. 
  560. X
  561. X
  562. XHow to work with `ccount':
  563. X--------------------------
  564. X
  565. X    i.  Prepare a directory tree containing the sources.
  566. X    Use whatever organization you would like for the tree. 
  567. X    The best way is to you place all source files at the same level, 
  568. X    so that you can catch them with a single wildcard expression, e.g.
  569. X    */*/*.c  for sources on the third level of subdirectories.
  570. X
  571. X   ii.  Type for example 
  572. X
  573. X        ccounter directory1/*/*.c directory2/*/*.c
  574. X
  575. X    The number of source files that 'ccounter' has found, is indicated,
  576. X    e.g. 48. Now 'ccounter' prompts you for the step size, e.g. 5.
  577. X    After that the selected source files are parsed and analysed one
  578. X    after the other. The current file name is indicated together with
  579. X    the current sequence number and the number of all selected files,
  580. X    for example
  581. X
  582. X        1/9: directory1/project1/demo1.c
  583. X        Success. Results in 'directory1/project1/demo1.out'.
  584. X
  585. X        2/9: directory1/project1/demo2.c
  586. X            Success. Results in 'directory1/project1/demo2.out'.
  587. X
  588. X        ...
  589. X
  590. X    If a parser error occurs, follow the explanations above to resolve
  591. X    the problem.
  592. X    Finally 'ccounter' gives you the message
  593. X
  594. X        8 file(s) successfully parsed.
  595. X
  596. X    and terminates.
  597. X
  598. X  iii.  Now you can collect the results and generate summary statistics.
  599. X    See 'README.2' for that.
  600. X
  601. X============================================================================
  602. END_OF_FILE
  603.   if test 17228 -ne `wc -c <'Ccount/README.1'`; then
  604.     echo shar: \"'Ccount/README.1'\" unpacked with wrong size!
  605.   fi
  606.   # end of 'Ccount/README.1'
  607. fi
  608. if test -f 'Ccount/ccounter' -a "${1}" != "-c" ; then 
  609.   echo shar: Will not clobber existing file \"'Ccount/ccounter'\"
  610. else
  611.   echo shar: Extracting \"'Ccount/ccounter'\" \(2367 characters\)
  612.   sed "s/^X//" >'Ccount/ccounter' <<'END_OF_FILE'
  613. X#!/usr/bin/sh
  614. X
  615. X############################################################################
  616. X#
  617. X#  Usage:  ccounter filename1.c filename2.c ...
  618. X#
  619. X#  'ccounter' handles a heap of source files by using 'ccount', a program
  620. X#  that supplies results of the structure of a C source code.
  621. X#  See 'README.1' for more details!
  622. X#
  623. X#  Author: Joerg Lawrenz, Universitaet Karlsruhe
  624. X#  Date:   93/12/1
  625. X#
  626. X############################################################################
  627. X
  628. Xif test $# -eq 0
  629. X  then
  630. X       echo "Usage: $0 filename1.c filename2.c ..."
  631. X       exit
  632. Xfi
  633. X
  634. Xfiles="$*"
  635. X
  636. X#
  637. X#  Determine the number of all input files.
  638. X#
  639. X
  640. Xnum_files=`ls $files | wc -w`
  641. X
  642. Xecho "Files total: $num_files"
  643. X
  644. Xif test $num_files -eq 0 
  645. X   then exit
  646. Xfi
  647. X
  648. X#
  649. X#  Now ask for the step size by which the files should be selected.
  650. X#
  651. X
  652. Xif test $num_files -eq 1
  653. X   then step=1
  654. X   else echo "Please enter size of step:"
  655. X        read step
  656. X        if test $step 
  657. X           then :
  658. X           else echo "1"
  659. X                step=1
  660. X        fi
  661. Xfi
  662. X
  663. X#
  664. X#  Now determine the number of selected source files.
  665. X#
  666. X
  667. Xmax_files=`expr $num_files / $step`
  668. X
  669. Xnumber=1       # current sequence number of all input files
  670. Xindex=1        # current sequence number of selected files
  671. Xsuccess=0      # number of files that are successfully parsed
  672. X
  673. X#
  674. X#  Now apply 'ccount' to each selected source file, perhaps repeatedly
  675. X#  by one or the other, depending on with which status 'ccount' will exit.
  676. X#  Only if the status is 0 (-> success) or 1 (-> abandoning), take the next 
  677. X#  source file. If the status is 3 (-> show tokens), repeat the run with 
  678. X#  the -v option for 'ccount', otherwise if the status is 2 (-> entry 
  679. X#  occured in 'basename.tpp' or -> source file has been edited), just repeat.
  680. X#
  681. X
  682. Xfor file in $files
  683. Xdo
  684. X    if test `expr $number % $step` -eq 0
  685. X       then
  686. X              status=2
  687. X              while test $status -ge 2
  688. X              do
  689. X                echo
  690. X                echo "$index/$max_files: $file"
  691. X                if test $status -eq 2
  692. X                   then ccount $file
  693. X                   else ccount -v $file
  694. X                fi
  695. X                status=$?
  696. X              done
  697. X
  698. X              if test $status -eq 0
  699. X                 then success=`expr $success + 1`
  700. X              fi
  701. X
  702. X              index=`expr $index + 1`
  703. X       fi
  704. X    number=`expr $number + 1`
  705. Xdone
  706. X
  707. Xecho "$success file(s) successfully parsed."
  708. END_OF_FILE
  709.   if test 2367 -ne `wc -c <'Ccount/ccounter'`; then
  710.     echo shar: \"'Ccount/ccounter'\" unpacked with wrong size!
  711.   fi
  712.   chmod +x 'Ccount/ccounter'
  713.   # end of 'Ccount/ccounter'
  714. fi
  715. if test -f 'Ccount/lex.yy.c' -a "${1}" != "-c" ; then 
  716.   echo shar: Will not clobber existing file \"'Ccount/lex.yy.c'\"
  717. else
  718.   echo shar: Extracting \"'Ccount/lex.yy.c'\" \(53730 characters\)
  719.   sed "s/^X//" >'Ccount/lex.yy.c' <<'END_OF_FILE'
  720. X# include "stdio.h"
  721. X# define U(x) x
  722. X# define NLSTATE yyprevious=YYNEWLINE
  723. X# define BEGIN yybgin = yysvec + 1 +
  724. X# define INITIAL 0
  725. X# define YYLERR yysvec
  726. X# define YYSTATE (yyestate-yysvec-1)
  727. X# define YYOPTIM 1
  728. X# define YYLMAX BUFSIZ
  729. X# define output(c) putc(c,yyout)
  730. X# define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
  731. X# define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;}
  732. X# define yymore() (yymorfg=1)
  733. X# define ECHO fprintf(yyout, "%s",yytext)
  734. X# define REJECT { nstr = yyreject(); goto yyfussy;}
  735. Xint yyleng; extern char yytext[];
  736. Xint yymorfg;
  737. Xextern char *yysptr, yysbuf[];
  738. Xint yytchar;
  739. XFILE *yyin = {stdin}, *yyout = {stdout};
  740. Xextern int yylineno;
  741. Xstruct yysvf { 
  742. X    struct yywork *yystoff;
  743. X    struct yysvf *yyother;
  744. X    int *yystops;};
  745. Xstruct yysvf *yyestate;
  746. Xextern struct yysvf yysvec[], *yybgin;
  747. X/****************************************************************************
  748. X
  749. X                    SCANNER for  'C C O U N T'  PROGRAM
  750. X
  751. X                         L E X  SPECIFICATION FILE
  752. X
  753. X*****************************************************************************
  754. X
  755. X  Description:
  756. X
  757. X  'ccount.l' is the lex specification file of 'ccount' program that 
  758. X  supplies results of the structure of a C source file. Before a C source 
  759. X  file can be parsed, there must be a lexical analysis, that is, a module 
  760. X  that recognizes tokens like keywords, identifiers, type names, constants, 
  761. X  operators etc. 
  762. X  Such a module is specified by this file and then created as C source code 
  763. X  by the command 'lex ccount.l' (--> lex.yy.c). Finally 'lex.yy.c' is 
  764. X  included in 'y.tab.c', the module of the syntactic analysis.
  765. X  
  766. X  See also 'README.1'!
  767. X
  768. X*****************************************************************************
  769. X
  770. X  Author: Joerg Lawrenz, Universitaet Karlsruhe
  771. X  Date:   12/1/93
  772. X
  773. X  Portions Copyright (c) 1989, 1990 James  A.  Roskind
  774. X
  775. X*****************************************************************************
  776. X
  777. XI.  How does 'ccount.l' recognize an unknown type name (defined by user)?
  778. X
  779. X  When an identifier is read, 'ccount.l' compares the context with four 
  780. X  selected rules by looking at the following words. If one rule can be 
  781. X  applied, the variable 'isaTYPE' is set to 1. Then 'ccount.l' checks
  782. X  if the type name is a keyword (e.g. 'int') by rejecting the rule.
  783. X  If the list of keywords has been passed without any action, 'ccount.l' 
  784. X  comes to the single 'identifier' pattern. There the token 'TYPEDEFname' 
  785. X  is returned if 'isaTYPE' is 1 or if the identifier has been found in the
  786. X  hash table without prefix. If necessary the type name is entered in the
  787. X  hash table.
  788. X  
  789. X  Examples for the four rules:        
  790. X
  791. X  1.  mytype a;
  792. X
  793. X  2.  mytype **a;
  794. X      mytype (*f)();
  795. X      mytype (*a)[];
  796. X
  797. X  3.  mytype) a,          casting
  798. X      mytype) a)
  799. X      mytype) a}
  800. X
  801. X  4.  mytype *,           pointer type as parameter
  802. X      mytype **)
  803. X
  804. X  Up to now there are no conflicts between these rules and other C structures.
  805. X
  806. X*****************************************************************************
  807. X
  808. XII.  Further details:
  809. X
  810. X  a) Rule 5:
  811. X
  812. X  Another rule (5) comparing the identifier context recognizes constructions 
  813. X  to declare function prototypes in ANSI as well as Kernighan/Ritchie style 
  814. X  like
  815. X        extern void error A((char* msg, int level));
  816. X
  817. X  by using the state variable 'flag':
  818. X
  819. X              extern   void error A     (  ( char* msg, int level ) );
  820. X  flag     0         1 2    3     4 -1 -2 -2 ....................-2 0
  821. X  ignore                          |     |                           |
  822. X                                 
  823. X  --------------------------------------------------------------------------
  824. X
  825. X  b) Identifier:
  826. X
  827. X  If 'ccount.l' considers an identifier, it also checks if the identifier
  828. X  is the name of a macro in declaration part (token 'MACRODEF' will be
  829. X  returned in this case) or if the identifier has to be ignored. For this,
  830. X  'ccount.l' adds the according prefix ('&' or '!') to the identifier and 
  831. X  looks for this word in the hash table.
  832. X
  833. X  --------------------------------------------------------------------------
  834. X
  835. X  c) Handling of '#if'-preprocessor directives (see also 'README.1', 2.2):
  836. X
  837. X  If 'ccount.l' reads a '#if'-preprocessor directive which it finds also
  838. X  in the hash table, the state variable 'pp_comment' and the count variable
  839. X  'if_count' are set to 1. The line number is indicated and saved in
  840. X  'BeginLine'. Then 'ReadPPline()' counts the directive line and reads the 
  841. X  following lines up to the first '#' by treating them as 'preprocessor 
  842. X  comment'. 'pp_comment' is set to 2. Now 'ccount.l' looks for the rest 
  843. X  of the directive. If it is the according 'endif', 'else' or 'elif' 
  844. X  ('if_count' == 1 ?), 'pp_comment' is set to 0 and 'ccount.l' returns 
  845. X  to the normal read mode. Otherwise or if the directive itself is part of 
  846. X  PP comment, 'ReadPPline' is called again treating all up to the next '#' 
  847. X  as PP comment, and so on.
  848. X
  849. X
  850. X**********************    DECLARATIONS     *********************************/
  851. X
  852. X/* The following global variables and functions are already defined 
  853. X   in 'y.tab.c':  */
  854. X
  855. Xextern int lines;       
  856. Xextern long bytes;      
  857. Xextern long comments;   
  858. Xextern long Pcomments;  
  859. X
  860. Xextern int num_identifier;       
  861. Xextern int num_symbols;          
  862. Xextern int num_ppdirectives;     
  863. Xextern long bytes_identifier;
  864. Xextern long bytes_symbols;
  865. Xextern long bytes_ppdirectives;
  866. X
  867. Xextern char lexem[];             
  868. Xextern char last_identifier[];  
  869. X
  870. Xextern BOOL DeclFlag;
  871. Xextern BOOL ElabTypeFlag;
  872. Xextern BOOL Debug;
  873. X
  874. Xextern void henter();          /* enters a word in the hash table */
  875. Xextern BOOL hfind();           /* finds a word in the hash table */
  876. X
  877. X/***************************************************************************/
  878. X  
  879. XBOOL isaTYPE = 0;    /* state variable, see above I. */
  880. X
  881. Xint flag = 0;        /* state variable, see above II.a */
  882. X
  883. Xint if_count = 0;    /* count variable, see above II.c */
  884. Xint BeginLine = 0;   /* line store variable, see above II.c */
  885. Xint pp_comment = 0;  /* state variable, see above II.c */
  886. X
  887. X
  888. X/*******************************  DEFINES  ***********************************/
  889. X
  890. X#define WHITE_RETURN(x)        bytes += yyleng;   /* just count bytes */
  891. X
  892. X#define PA_KEYWORD_RETURN(x) { if (flag > 0)\
  893. X                                 if (flag == 1) flag++; else flag = 0;\
  894. X                               CountSymbol(x);\
  895. X                               RETURN_VAL(x) }  /* standard C PArser Keyword */
  896. X
  897. X#define IDENTIFIER_RETURN(x) { strcpy(last_identifier, yytext);\
  898. X                               CountSymbol(x);\
  899. X                               RETURN_VAL(x) }
  900. X
  901. X#define ASCIIOP_RETURN(x)    { CountSymbol((int)*yytext);\
  902. X                               RETURN_VAL((int)*yytext) }
  903. X                                              /* a single character operator */
  904. X#define NAMEDOP_RETURN(x)    { CountSymbol(x);\
  905. X                               RETURN_VAL(x) }
  906. X                                        /* a multichar operator, with a name */
  907. X
  908. X#define NUMERICAL_RETURN(x)  { CountSymbol(x);\
  909. X                               RETURN_VAL(x) }     /* some sort of constant */
  910. X                          
  911. X#define LITERAL_RETURN(x)    { CountSymbol(x);\
  912. X                               RETURN_VAL(x) }           /* a string literal */
  913. X
  914. X#define RETURN_VAL(x)        { isaTYPE = 0;\
  915. X                               bytes += yyleng;\
  916. X                               strcpy(lexem, yytext);\
  917. X                               if (Debug)\
  918. X                                 fprintf(stderr," %s %d ",yytext,x);\
  919. X                               return(x); }
  920. X
  921. X/****************************************************************************/
  922. X
  923. X# define YYNEWLINE 10
  924. Xyylex(){
  925. Xint nstr; extern int yyprevious;
  926. Xwhile((nstr = yylook()) >= 0)
  927. Xyyfussy: switch(nstr){
  928. Xcase 0:
  929. Xif(yywrap()) return(0); break;
  930. Xcase 1:
  931. X                     {WHITE_RETURN(' ');}
  932. Xbreak;
  933. Xcase 2:
  934. X       {WHITE_RETURN(' ');}
  935. Xbreak;
  936. Xcase 3:
  937. X        
  938. X                               {lines++;
  939. X                                WHITE_RETURN('\n');
  940. X                    }
  941. Xbreak;
  942. Xcase 4:
  943. X                    /* Rule 1 */
  944. X                               {
  945. X                                if (Debug)
  946. X                                   fprintf(stderr," RULE1>> ");
  947. X                                isaTYPE = !ElabTypeFlag && flag <= 1;
  948. X                                REJECT;
  949. X                                }
  950. Xbreak;
  951. Xcase 5:
  952. X     /* Rule 2 */
  953. X                               {             
  954. X                                if (Debug)
  955. X                                   fprintf(stderr," RULE2>> ");
  956. X                                isaTYPE = DeclFlag && !ElabTypeFlag;
  957. X                                REJECT;
  958. X                                }
  959. Xbreak;
  960. Xcase 6:
  961. X   /* Rule 3 */
  962. X                               {             
  963. X                                if (Debug)
  964. X                                   fprintf(stderr," RULE3>> ");
  965. X                                isaTYPE = !ElabTypeFlag;
  966. X                                REJECT;
  967. X                                }
  968. Xbreak;
  969. Xcase 7:
  970. X               /* Rule 4 */
  971. X                               {
  972. X                                if (Debug)
  973. X                                   fprintf(stderr," RULE4>> ");
  974. X                                isaTYPE = !ElabTypeFlag;
  975. X                                REJECT;
  976. X                                }
  977. Xbreak;
  978. Xcase 8:
  979. X
  980. X                               {                  /* Rule 5 */
  981. X                                if (Debug)
  982. X                                   fprintf(stderr," RULE5>> ");
  983. X                                flag = 1;
  984. X                                REJECT;                                 
  985. X                                }
  986. Xbreak;
  987. Xcase 9:
  988. X               {PA_KEYWORD_RETURN(AUTO);}
  989. Xbreak;
  990. Xcase 10:
  991. X              {PA_KEYWORD_RETURN(BREAK);}
  992. Xbreak;
  993. Xcase 11:
  994. X               {PA_KEYWORD_RETURN(CASE);}
  995. Xbreak;
  996. Xcase 12:
  997. X               {PA_KEYWORD_RETURN(CHAR);}
  998. Xbreak;
  999. Xcase 13:
  1000. X              {PA_KEYWORD_RETURN(CONST);}
  1001. Xbreak;
  1002. Xcase 14:
  1003. X           {PA_KEYWORD_RETURN(CONTINUE);}
  1004. Xbreak;
  1005. Xcase 15:
  1006. X            {PA_KEYWORD_RETURN(DEFAULT);}
  1007. Xbreak;
  1008. Xcase 16:
  1009. X                 {PA_KEYWORD_RETURN(DO);}
  1010. Xbreak;
  1011. Xcase 17:
  1012. X             {PA_KEYWORD_RETURN(DOUBLE);}
  1013. Xbreak;
  1014. Xcase 18:
  1015. X               {PA_KEYWORD_RETURN(ELSE);}
  1016. Xbreak;
  1017. Xcase 19:
  1018. X               {ElabTypeFlag = 1; 
  1019. X                     PA_KEYWORD_RETURN(ENUM);}
  1020. Xbreak;
  1021. Xcase 20:
  1022. X             {PA_KEYWORD_RETURN(EXTERN);}
  1023. Xbreak;
  1024. Xcase 21:
  1025. X              {PA_KEYWORD_RETURN(FLOAT);}
  1026. Xbreak;
  1027. Xcase 22:
  1028. X                {PA_KEYWORD_RETURN(FOR);}
  1029. Xbreak;
  1030. Xcase 23:
  1031. X               {PA_KEYWORD_RETURN(GOTO);}
  1032. Xbreak;
  1033. Xcase 24:
  1034. X                 {PA_KEYWORD_RETURN(IF);}
  1035. Xbreak;
  1036. Xcase 25:
  1037. X                {PA_KEYWORD_RETURN(INT);}
  1038. Xbreak;
  1039. Xcase 26:
  1040. X               {PA_KEYWORD_RETURN(LONG);}
  1041. Xbreak;
  1042. Xcase 27:
  1043. X           {PA_KEYWORD_RETURN(REGISTER);}
  1044. Xbreak;
  1045. Xcase 28:
  1046. X             {PA_KEYWORD_RETURN(RETURN);}
  1047. Xbreak;
  1048. Xcase 29:
  1049. X              {PA_KEYWORD_RETURN(SHORT);}
  1050. Xbreak;
  1051. Xcase 30:
  1052. X             {PA_KEYWORD_RETURN(SIGNED);}
  1053. Xbreak;
  1054. Xcase 31:
  1055. X             {PA_KEYWORD_RETURN(SIZEOF);}
  1056. Xbreak;
  1057. Xcase 32:
  1058. X             {PA_KEYWORD_RETURN(STATIC);}
  1059. Xbreak;
  1060. Xcase 33:
  1061. X             {ElabTypeFlag = 1; 
  1062. X                     PA_KEYWORD_RETURN(STRUCT);}
  1063. Xbreak;
  1064. Xcase 34:
  1065. X             {PA_KEYWORD_RETURN(SWITCH);}
  1066. Xbreak;
  1067. Xcase 35:
  1068. X            {PA_KEYWORD_RETURN(TYPEDEF);}
  1069. Xbreak;
  1070. Xcase 36:
  1071. X              {ElabTypeFlag = 1; 
  1072. X                     PA_KEYWORD_RETURN(UNION);}
  1073. Xbreak;
  1074. Xcase 37:
  1075. X           {PA_KEYWORD_RETURN(UNSIGNED);}
  1076. Xbreak;
  1077. Xcase 38:
  1078. X               {PA_KEYWORD_RETURN(VOID);}
  1079. Xbreak;
  1080. Xcase 39:
  1081. X           {PA_KEYWORD_RETURN(VOLATILE);}
  1082. Xbreak;
  1083. Xcase 40:
  1084. X              {PA_KEYWORD_RETURN(WHILE);}
  1085. Xbreak;
  1086. Xcase 41:
  1087. X       {char str[STR_LEN];
  1088. X                     if (flag > 0) flag++;
  1089. X                     sprintf(str, "!");
  1090. X                     if (hfind(strcat(str, yytext)) || flag == 4)
  1091. X                             {
  1092. X                              isaTYPE = 0;
  1093. X                              if (flag == 4) flag = -1;
  1094. X                              CountSymbol(IDENTIFIER);
  1095. X                              WHITE_RETURN(IDENTIFIER);
  1096. X                              }
  1097. X                        else {
  1098. X                              str[0] = '&';
  1099. X                              if (hfind(str))
  1100. X                                  IDENTIFIER_RETURN(MACRODEF)
  1101. X                               else {
  1102. X                                  if (hfind(yytext)) 
  1103. X                                       isaTYPE = 1;
  1104. X                                    else 
  1105. X                                       if (isaTYPE) henter(yytext);
  1106. X
  1107. X                                  if (isaTYPE) 
  1108. X                                       IDENTIFIER_RETURN(TYPEDEFname)
  1109. X                                    else 
  1110. X                                       IDENTIFIER_RETURN(IDENTIFIER);
  1111. X                                     }
  1112. X                              }
  1113. X                    }
  1114. Xbreak;
  1115. Xcase 42:
  1116. X {NUMERICAL_RETURN(INTEGERconstant);}
  1117. Xbreak;
  1118. Xcase 43:
  1119. X   {NUMERICAL_RETURN(OCTALconstant);}
  1120. Xbreak;
  1121. Xcase 44:
  1122. X     {NUMERICAL_RETURN(HEXconstant);}
  1123. Xbreak;
  1124. Xcase 45:
  1125. X{NUMERICAL_RETURN(FLOATINGconstant);}
  1126. Xbreak;
  1127. Xcase 46:
  1128. X    {NUMERICAL_RETURN(CHARACTERconstant);}
  1129. Xbreak;
  1130. Xcase 47:
  1131. X    {CountLines(yytext);
  1132. X                         LITERAL_RETURN(STRINGliteral);
  1133. X                         }
  1134. Xbreak;
  1135. Xcase 48:
  1136. X                 {if (flag == -1) {
  1137. X                        flag = -2;
  1138. X                        CountSymbol('(');
  1139. X                        WHITE_RETURN(LP);
  1140. X                       }
  1141. X                       else
  1142. X                        ASCIIOP_RETURN(LP);}
  1143. Xbreak;
  1144. Xcase 49:
  1145. X       {if (flag == -2) {
  1146. X                        flag = 0;
  1147. X                        CountSymbol(')');
  1148. X                        WHITE_RETURN(RP);
  1149. X                       }
  1150. X                       else
  1151. X                        ASCIIOP_RETURN(RP);}
  1152. Xbreak;
  1153. Xcase 50:
  1154. X                 {ASCIIOP_RETURN(RP);}
  1155. Xbreak;
  1156. Xcase 51:
  1157. X                 {ASCIIOP_RETURN(COMMA);}
  1158. Xbreak;
  1159. Xcase 52:
  1160. X                 {ASCIIOP_RETURN(LC);}
  1161. Xbreak;
  1162. Xcase 53:
  1163. X                 {ASCIIOP_RETURN(RC);}
  1164. Xbreak;
  1165. Xcase 54:
  1166. X                 {ASCIIOP_RETURN(LB);}
  1167. Xbreak;
  1168. Xcase 55:
  1169. X                 {ASCIIOP_RETURN(RB);}
  1170. Xbreak;
  1171. Xcase 56:
  1172. X                 {ASCIIOP_RETURN(DOT);}
  1173. Xbreak;
  1174. Xcase 57:
  1175. X                 {ASCIIOP_RETURN(AND);}
  1176. Xbreak;
  1177. Xcase 58:
  1178. X                 {ASCIIOP_RETURN(STAR);}
  1179. Xbreak;
  1180. Xcase 59:
  1181. X                 {ASCIIOP_RETURN(PLUS);}
  1182. Xbreak;
  1183. Xcase 60:
  1184. X                 {ASCIIOP_RETURN(MINUS);}
  1185. Xbreak;
  1186. Xcase 61:
  1187. X                 {ASCIIOP_RETURN(NEGATE);}
  1188. Xbreak;
  1189. Xcase 62:
  1190. X                 {ASCIIOP_RETURN(NOT);}
  1191. Xbreak;
  1192. Xcase 63:
  1193. X                 {ASCIIOP_RETURN(DIV);}
  1194. Xbreak;
  1195. Xcase 64:
  1196. X                 {ASCIIOP_RETURN(MOD);}
  1197. Xbreak;
  1198. Xcase 65:
  1199. X                 {ASCIIOP_RETURN(LT);}
  1200. Xbreak;
  1201. Xcase 66:
  1202. X                 {ASCIIOP_RETURN(GT);}
  1203. Xbreak;
  1204. Xcase 67:
  1205. X                 {ASCIIOP_RETURN(XOR);}
  1206. Xbreak;
  1207. Xcase 68:
  1208. X                 {ASCIIOP_RETURN(PIPE);}
  1209. Xbreak;
  1210. Xcase 69:
  1211. X                 {ASCIIOP_RETURN(QUESTION);}
  1212. Xbreak;
  1213. Xcase 70:
  1214. X                 {ASCIIOP_RETURN(COLON);}
  1215. Xbreak;
  1216. Xcase 71:
  1217. X                 {ASCIIOP_RETURN(SEMICOLON);}
  1218. Xbreak;
  1219. Xcase 72:
  1220. X                 {ASCIIOP_RETURN(ASSIGN);}
  1221. Xbreak;
  1222. Xcase 73:
  1223. X                {NAMEDOP_RETURN(ARROW);}
  1224. Xbreak;
  1225. Xcase 74:
  1226. X                {NAMEDOP_RETURN(ICR);}
  1227. Xbreak;
  1228. Xcase 75:
  1229. X                {NAMEDOP_RETURN(DECR);}
  1230. Xbreak;
  1231. Xcase 76:
  1232. X                {NAMEDOP_RETURN(LS);}
  1233. Xbreak;
  1234. Xcase 77:
  1235. X                {NAMEDOP_RETURN(RS);}
  1236. Xbreak;
  1237. Xcase 78:
  1238. X                {NAMEDOP_RETURN(LE);}
  1239. Xbreak;
  1240. Xcase 79:
  1241. X                {NAMEDOP_RETURN(GE);}
  1242. Xbreak;
  1243. Xcase 80:
  1244. X                {NAMEDOP_RETURN(EQ);}
  1245. Xbreak;
  1246. Xcase 81:
  1247. X                {NAMEDOP_RETURN(NE);}
  1248. Xbreak;
  1249. Xcase 82:
  1250. X                {NAMEDOP_RETURN(ANDAND);}
  1251. Xbreak;
  1252. Xcase 83:
  1253. X                {NAMEDOP_RETURN(OROR);}
  1254. Xbreak;
  1255. Xcase 84:
  1256. X                {NAMEDOP_RETURN(MULTassign);}
  1257. Xbreak;
  1258. Xcase 85:
  1259. X                {NAMEDOP_RETURN(DIVassign);}
  1260. Xbreak;
  1261. Xcase 86:
  1262. X                {NAMEDOP_RETURN(MODassign);}
  1263. Xbreak;
  1264. Xcase 87:
  1265. X                {NAMEDOP_RETURN(PLUSassign);}
  1266. Xbreak;
  1267. Xcase 88:
  1268. X                {NAMEDOP_RETURN(MINUSassign);}
  1269. Xbreak;
  1270. Xcase 89:
  1271. X               {NAMEDOP_RETURN(LSassign);}
  1272. Xbreak;
  1273. Xcase 90:
  1274. X               {NAMEDOP_RETURN(RSassign);}
  1275. Xbreak;
  1276. Xcase 91:
  1277. X                {NAMEDOP_RETURN(ANDassign);}
  1278. Xbreak;
  1279. Xcase 92:
  1280. X                {NAMEDOP_RETURN(ERassign);}
  1281. Xbreak;
  1282. Xcase 93:
  1283. X                {NAMEDOP_RETURN(ORassign);}
  1284. Xbreak;
  1285. Xcase 94:
  1286. X               {NAMEDOP_RETURN(ELLIPSIS);}
  1287. Xbreak;
  1288. Xcase 95:
  1289. X                {ReadComment();}
  1290. Xbreak;
  1291. Xcase 96:
  1292. X   {
  1293. X                      if (!pp_comment && hfind(yytext)) {
  1294. X                              pp_comment = 1;
  1295. X                              fprintf(stderr,"Line %d: %s\n",lines+1,yytext);
  1296. X                              BeginLine = lines+1;
  1297. X                           }
  1298. X                      if (pp_comment) if_count++;
  1299. X                      yyless(1);        /* yytext = "#" */
  1300. X                      ReadPPline();
  1301. X                      }
  1302. Xbreak;
  1303. Xcase 97:
  1304. X     {if (pp_comment && --if_count == 0) {
  1305. X                              pp_comment = 0;
  1306. X                              fprintf(stderr,"Length: %d\n",lines-BeginLine);
  1307. X                           }
  1308. X                      ReadPPline();
  1309. X                      }
  1310. Xbreak;
  1311. Xcase 98:
  1312. X             {
  1313. X                      if (if_count == 1)  {
  1314. X                              pp_comment = 0;
  1315. X                              if_count--;
  1316. X                              fprintf(stderr,"Length: %d\n",lines-BeginLine);
  1317. X                           }
  1318. X                      ReadPPline();
  1319. X                      }
  1320. Xbreak;
  1321. Xcase 99:
  1322. X                 {ReadPPline();}
  1323. Xbreak;
  1324. Xcase 100:
  1325. X                   /* Handling of unknown character */
  1326. X                     {
  1327. X                      fprintf(stderr, "\nline %d: lexical error",lines+1);
  1328. X                      RETURN_VAL(0);
  1329. X                      }
  1330. Xbreak;
  1331. Xcase -1:
  1332. Xbreak;
  1333. Xdefault:
  1334. Xfprintf(yyout,"bad switch yylook %d",nstr);
  1335. X} return(0); }
  1336. X/* end of yylex */
  1337. X
  1338. X/****************************   FUNCTIONS   ********************************
  1339. X
  1340. X  CountSymbol(x)     -->  increases the respective number of identifiers
  1341. X                          or symbols and the respective number of bytes
  1342. X                          for the token x
  1343. X  ReadComment()      -->  reads comment
  1344. X  ReadPPline()       -->  reads preprocessor directives or PP comment
  1345. X                          see above II.c
  1346. X  CountLines(s)      -->  counts the number of lines in the string s
  1347. X
  1348. X***************************************************************************/
  1349. X
  1350. X
  1351. XCountSymbol (x)
  1352. Xint x;
  1353. X{
  1354. X  switch (x)
  1355. X    {
  1356. X    case IDENTIFIER:
  1357. X    case TYPEDEFname:
  1358. X    case MACRODEF:     num_identifier++;
  1359. X                   bytes_identifier += yyleng;
  1360. X                       break;
  1361. X
  1362. X    default:           num_symbols++;
  1363. X                       bytes_symbols += yyleng;
  1364. X                       break;
  1365. X    }
  1366. X}
  1367. X
  1368. X/***************************************************************************/
  1369. X
  1370. XReadComment()
  1371. X{
  1372. X  char c;
  1373. X
  1374. X  while ((c=input()) != '*') {
  1375. X           if (c == '\n') lines++;
  1376. X           comments++;
  1377. X         }
  1378. X
  1379. X  comments++;
  1380. X  if ((c=input()) == '/')
  1381. X        comments += 3;
  1382. X    else {
  1383. X        unput(c);
  1384. X        ReadComment();
  1385. X      }
  1386. X}
  1387. X
  1388. X/***************************************************************************/
  1389. X
  1390. XReadPPline()
  1391. X{
  1392. X  char c;
  1393. X  int ende = 0;
  1394. X
  1395. X  if (pp_comment < 2) {      /* '#' is the beginning of a '#if'-PP directive *
  1396. X     num_ppdirectives++;     /* that is no PP comment. */
  1397. X     bytes_ppdirectives++;
  1398. X     bytes++;         
  1399. X     while (!ende)    
  1400. X        switch (input())
  1401. X         {
  1402. X         case  '/': if ((c = input()) == '*')
  1403. X                          ReadComment();
  1404. X                    else {unput(c);
  1405. X                          bytes_ppdirectives++; 
  1406. X                          bytes++;}
  1407. X                    break;
  1408. X         
  1409. X         case '\\': if ((c = input()) == '\n')
  1410. X                         {lines++;
  1411. X                          bytes_ppdirectives++;
  1412. X                          bytes++;}
  1413. X                    else  unput(c);
  1414. X                    bytes_ppdirectives++;
  1415. X                    bytes++;
  1416. X                    break;
  1417. X
  1418. X         case '\n': ende = 1;
  1419. X                    lines++;
  1420. X         default  : bytes_ppdirectives++;
  1421. X                    bytes++;
  1422. X                    break;
  1423. X         }
  1424. X  } else Pcomments++;               /* '#' is part of PP comment */
  1425. X
  1426. X  if (pp_comment) {                 /* read PP comment up to the first '#' */
  1427. X    while ((c = input()) != '#') {
  1428. X           if (c == '\n') lines++;
  1429. X           Pcomments++;
  1430. X        }
  1431. X    unput(c);
  1432. X    pp_comment = 2;
  1433. X   }
  1434. X}
  1435. X
  1436. X/***************************************************************************/
  1437. X
  1438. XCountLines (string)
  1439. Xchar *string;
  1440. X{
  1441. X  while (*string)
  1442. X    if (*string++ == '\n') lines++;
  1443. X}
  1444. Xint yyvstop[] = {
  1445. X0,
  1446. X
  1447. X100,
  1448. X0,
  1449. X
  1450. X1,
  1451. X100,
  1452. X0,
  1453. X
  1454. X3,
  1455. X0,
  1456. X
  1457. X2,
  1458. X100,
  1459. X0,
  1460. X
  1461. X62,
  1462. X100,
  1463. X0,
  1464. X
  1465. X100,
  1466. X0,
  1467. X
  1468. X99,
  1469. X100,
  1470. X-97,
  1471. X-98,
  1472. X0,
  1473. X
  1474. X41,
  1475. X100,
  1476. X-4,
  1477. X0,
  1478. X
  1479. X64,
  1480. X100,
  1481. X0,
  1482. X
  1483. X57,
  1484. X100,
  1485. X0,
  1486. X
  1487. X100,
  1488. X0,
  1489. X
  1490. X48,
  1491. X100,
  1492. X0,
  1493. X
  1494. X50,
  1495. X100,
  1496. X-49,
  1497. X0,
  1498. X
  1499. X58,
  1500. X100,
  1501. X0,
  1502. X
  1503. X59,
  1504. X100,
  1505. X0,
  1506. X
  1507. X51,
  1508. X100,
  1509. X0,
  1510. X
  1511. X60,
  1512. X100,
  1513. X0,
  1514. X
  1515. X56,
  1516. X100,
  1517. X0,
  1518. X
  1519. X63,
  1520. X100,
  1521. X0,
  1522. X
  1523. X43,
  1524. X100,
  1525. X0,
  1526. X
  1527. X42,
  1528. X100,
  1529. X0,
  1530. X
  1531. X70,
  1532. X100,
  1533. X0,
  1534. X
  1535. X71,
  1536. X100,
  1537. X0,
  1538. X
  1539. X65,
  1540. X100,
  1541. X0,
  1542. X
  1543. X72,
  1544. X100,
  1545. X0,
  1546. X
  1547. X66,
  1548. X100,
  1549. X0,
  1550. X
  1551. X69,
  1552. X100,
  1553. X0,
  1554. X
  1555. X41,
  1556. X100,
  1557. X-4,
  1558. X0,
  1559. X
  1560. X54,
  1561. X100,
  1562. X0,
  1563. X
  1564. X55,
  1565. X100,
  1566. X0,
  1567. X
  1568. X67,
  1569. X100,
  1570. X0,
  1571. X
  1572. X41,
  1573. X100,
  1574. X-4,
  1575. X0,
  1576. X
  1577. X41,
  1578. X100,
  1579. X-4,
  1580. X0,
  1581. X
  1582. X41,
  1583. X100,
  1584. X-4,
  1585. X0,
  1586. X
  1587. X41,
  1588. X100,
  1589. X-4,
  1590. X0,
  1591. X
  1592. X41,
  1593. X100,
  1594. X-4,
  1595. X0,
  1596. X
  1597. X41,
  1598. X100,
  1599. X-4,
  1600. X0,
  1601. X
  1602. X41,
  1603. X100,
  1604. X-4,
  1605. X0,
  1606. X
  1607. X41,
  1608. X100,
  1609. X-4,
  1610. X0,
  1611. X
  1612. X41,
  1613. X100,
  1614. X-4,
  1615. X0,
  1616. X
  1617. X41,
  1618. X100,
  1619. X-4,
  1620. X0,
  1621. X
  1622. X41,
  1623. X100,
  1624. X-4,
  1625. X0,
  1626. X
  1627. X41,
  1628. X100,
  1629. X-4,
  1630. X0,
  1631. X
  1632. X41,
  1633. X100,
  1634. X-4,
  1635. X0,
  1636. X
  1637. X41,
  1638. X100,
  1639. X-4,
  1640. X0,
  1641. X
  1642. X41,
  1643. X100,
  1644. X-4,
  1645. X0,
  1646. X
  1647. X52,
  1648. X100,
  1649. X0,
  1650. X
  1651. X68,
  1652. X100,
  1653. X0,
  1654. X
  1655. X53,
  1656. X100,
  1657. X0,
  1658. X
  1659. X61,
  1660. X100,
  1661. X0,
  1662. X
  1663. X1,
  1664. X0,
  1665. X
  1666. X2,
  1667. X0,
  1668. X
  1669. X81,
  1670. X0,
  1671. X
  1672. X47,
  1673. X0,
  1674. X
  1675. X41,
  1676. X-4,
  1677. X0,
  1678. X
  1679. X86,
  1680. X0,
  1681. X
  1682. X82,
  1683. X0,
  1684. X
  1685. X91,
  1686. X0,
  1687. X
  1688. X49,
  1689. X0,
  1690. X
  1691. X84,
  1692. X0,
  1693. X
  1694. X74,
  1695. X0,
  1696. X
  1697. X87,
  1698. X0,
  1699. X
  1700. X75,
  1701. X0,
  1702. X
  1703. X88,
  1704. X0,
  1705. X
  1706. X73,
  1707. X0,
  1708. X
  1709. X45,
  1710. X0,
  1711. X
  1712. X95,
  1713. X0,
  1714. X
  1715. X85,
  1716. X0,
  1717. X
  1718. X43,
  1719. X0,
  1720. X
  1721. X43,
  1722. X0,
  1723. X
  1724. X43,
  1725. X0,
  1726. X
  1727. X42,
  1728. X0,
  1729. X
  1730. X42,
  1731. X0,
  1732. X
  1733. X42,
  1734. X0,
  1735. X
  1736. X76,
  1737. X0,
  1738. X
  1739. X78,
  1740. X0,
  1741. X
  1742. X80,
  1743. X0,
  1744. X
  1745. X79,
  1746. X0,
  1747. X
  1748. X77,
  1749. X0,
  1750. X
  1751. X92,
  1752. X0,
  1753. X
  1754. X41,
  1755. X-4,
  1756. X0,
  1757. X
  1758. X41,
  1759. X-4,
  1760. X0,
  1761. X
  1762. X41,
  1763. X-4,
  1764. X0,
  1765. X
  1766. X41,
  1767. X-4,
  1768. X0,
  1769. X
  1770. X41,
  1771. X-4,
  1772. X0,
  1773. X
  1774. X41,
  1775. X-4,
  1776. X0,
  1777. X
  1778. X16,
  1779. X41,
  1780. X-4,
  1781. X0,
  1782. X
  1783. X41,
  1784. X-4,
  1785. X0,
  1786. X
  1787. X41,
  1788. X-4,
  1789. X0,
  1790. X
  1791. X41,
  1792. X-4,
  1793. X0,
  1794. X
  1795. X41,
  1796. X-4,
  1797. X0,
  1798. X
  1799. X41,
  1800. X-4,
  1801. X0,
  1802. X
  1803. X41,
  1804. X-4,
  1805. X0,
  1806. X
  1807. X24,
  1808. X41,
  1809. X-4,
  1810. X0,
  1811. X
  1812. X41,
  1813. X-4,
  1814. X0,
  1815. X
  1816. X41,
  1817. X-4,
  1818. X0,
  1819. X
  1820. X41,
  1821. X-4,
  1822. X0,
  1823. X
  1824. X41,
  1825. X-4,
  1826. X0,
  1827. X
  1828. X41,
  1829. X-4,
  1830. X0,
  1831. X
  1832. X41,
  1833. X-4,
  1834. X0,
  1835. X
  1836. X41,
  1837. X-4,
  1838. X0,
  1839. X
  1840. X41,
  1841. X-4,
  1842. X0,
  1843. X
  1844. X41,
  1845. X-4,
  1846. X0,
  1847. X
  1848. X41,
  1849. X-4,
  1850. X0,
  1851. X
  1852. X41,
  1853. X-4,
  1854. X0,
  1855. X
  1856. X93,
  1857. X0,
  1858. X
  1859. X83,
  1860. X0,
  1861. X
  1862. X47,
  1863. X0,
  1864. X
  1865. X96,
  1866. X0,
  1867. X
  1868. X4,
  1869. X0,
  1870. X
  1871. X5,
  1872. X0,
  1873. X
  1874. X7,
  1875. X0,
  1876. X
  1877. X46,
  1878. X0,
  1879. X
  1880. X94,
  1881. X0,
  1882. X
  1883. X45,
  1884. X0,
  1885. X
  1886. X45,
  1887. X0,
  1888. X
  1889. X43,
  1890. X0,
  1891. X
  1892. X44,
  1893. X0,
  1894. X
  1895. X42,
  1896. X0,
  1897. X
  1898. X89,
  1899. X0,
  1900. X
  1901. X90,
  1902. X0,
  1903. X
  1904. X41,
  1905. X-4,
  1906. X0,
  1907. X
  1908. X41,
  1909. X-4,
  1910. X0,
  1911. X
  1912. X41,
  1913. X-4,
  1914. X0,
  1915. X
  1916. X41,
  1917. X-4,
  1918. X0,
  1919. X
  1920. X41,
  1921. X-4,
  1922. X0,
  1923. X
  1924. X41,
  1925. X-4,
  1926. X0,
  1927. X
  1928. X41,
  1929. X-4,
  1930. X0,
  1931. X
  1932. X41,
  1933. X-4,
  1934. X0,
  1935. X
  1936. X41,
  1937. X-4,
  1938. X0,
  1939. X
  1940. X41,
  1941. X-4,
  1942. X0,
  1943. X
  1944. X41,
  1945. X-4,
  1946. X0,
  1947. X
  1948. X22,
  1949. X41,
  1950. X-4,
  1951. X0,
  1952. X
  1953. X41,
  1954. X-4,
  1955. X0,
  1956. X
  1957. X25,
  1958. X41,
  1959. X-4,
  1960. X0,
  1961. X
  1962. X41,
  1963. X-4,
  1964. X0,
  1965. X
  1966. X41,
  1967. X-4,
  1968. X0,
  1969. X
  1970. X41,
  1971. X-4,
  1972. X0,
  1973. X
  1974. X41,
  1975. X-4,
  1976. X0,
  1977. X
  1978. X41,
  1979. X-4,
  1980. X0,
  1981. X
  1982. X41,
  1983. X-4,
  1984. X0,
  1985. X
  1986. X41,
  1987. X-4,
  1988. X0,
  1989. X
  1990. X41,
  1991. X-4,
  1992. X0,
  1993. X
  1994. X41,
  1995. X-4,
  1996. X0,
  1997. X
  1998. X41,
  1999. X-4,
  2000. X0,
  2001. X
  2002. X41,
  2003. X-4,
  2004. X0,
  2005. X
  2006. X41,
  2007. X-4,
  2008. X0,
  2009. X
  2010. X41,
  2011. X-4,
  2012. X0,
  2013. X
  2014. X41,
  2015. X-4,
  2016. X0,
  2017. X
  2018. X41,
  2019. X-4,
  2020. X0,
  2021. X
  2022. X96,
  2023. X0,
  2024. X
  2025. X96,
  2026. X0,
  2027. X
  2028. X96,
  2029. X0,
  2030. X
  2031. X5,
  2032. X0,
  2033. X
  2034. X6,
  2035. X0,
  2036. X
  2037. X45,
  2038. X0,
  2039. X
  2040. X44,
  2041. X0,
  2042. X
  2043. X44,
  2044. X0,
  2045. X
  2046. X9,
  2047. X41,
  2048. X-4,
  2049. X0,
  2050. X
  2051. X41,
  2052. X-4,
  2053. X0,
  2054. X
  2055. X11,
  2056. X41,
  2057. X-4,
  2058. X0,
  2059. X
  2060. X12,
  2061. X41,
  2062. X-4,
  2063. X0,
  2064. X
  2065. X41,
  2066. X-4,
  2067. X0,
  2068. X
  2069. X41,
  2070. X-4,
  2071. X0,
  2072. X
  2073. X41,
  2074. X-4,
  2075. X0,
  2076. X
  2077. X41,
  2078. X-4,
  2079. X0,
  2080. X
  2081. X18,
  2082. X41,
  2083. X-4,
  2084. X0,
  2085. X
  2086. X19,
  2087. X41,
  2088. X-4,
  2089. X0,
  2090. X
  2091. X41,
  2092. X-4,
  2093. X0,
  2094. X
  2095. X41,
  2096. X-4,
  2097. X0,
  2098. X
  2099. X23,
  2100. X41,
  2101. X-4,
  2102. X0,
  2103. X
  2104. X26,
  2105. X41,
  2106. X-4,
  2107. X0,
  2108. X
  2109. X41,
  2110. X-4,
  2111. X0,
  2112. X
  2113. X41,
  2114. X-4,
  2115. X0,
  2116. X
  2117. X41,
  2118. X-4,
  2119. X0,
  2120. X
  2121. X41,
  2122. X-4,
  2123. X0,
  2124. X
  2125. X41,
  2126. X-4,
  2127. X0,
  2128. X
  2129. X41,
  2130. X-4,
  2131. X0,
  2132. X
  2133. X41,
  2134. X-4,
  2135. X0,
  2136. X
  2137. X41,
  2138. X-4,
  2139. X0,
  2140. X
  2141. X41,
  2142. X-4,
  2143. X0,
  2144. X
  2145. X41,
  2146. X-4,
  2147. X0,
  2148. X
  2149. X41,
  2150. X-4,
  2151. X0,
  2152. X
  2153. X38,
  2154. X41,
  2155. X-4,
  2156. X0,
  2157. X
  2158. X41,
  2159. X-4,
  2160. X0,
  2161. X
  2162. X41,
  2163. X-4,
  2164. X0,
  2165. X
  2166. X98,
  2167. X0,
  2168. X
  2169. X96,
  2170. X0,
  2171. X
  2172. X96,
  2173. X0,
  2174. X
  2175. X10,
  2176. X41,
  2177. X-4,
  2178. X0,
  2179. X
  2180. X13,
  2181. X41,
  2182. X-4,
  2183. X0,
  2184. X
  2185. X41,
  2186. X-4,
  2187. X0,
  2188. X
  2189. X41,
  2190. X-4,
  2191. X0,
  2192. X
  2193. X41,
  2194. X-4,
  2195. X0,
  2196. X
  2197. X41,
  2198. X-4,
  2199. X0,
  2200. X
  2201. X21,
  2202. X41,
  2203. X-4,
  2204. X0,
  2205. X
  2206. X41,
  2207. X-4,
  2208. X0,
  2209. X
  2210. X41,
  2211. X-4,
  2212. X0,
  2213. X
  2214. X29,
  2215. X41,
  2216. X-4,
  2217. X0,
  2218. X
  2219. X41,
  2220. X-4,
  2221. X0,
  2222. X
  2223. X41,
  2224. X-4,
  2225. X0,
  2226. X
  2227. X41,
  2228. X-4,
  2229. X0,
  2230. X
  2231. X41,
  2232. X-4,
  2233. X0,
  2234. X
  2235. X41,
  2236. X-4,
  2237. X0,
  2238. X
  2239. X41,
  2240. X-4,
  2241. X0,
  2242. X
  2243. X36,
  2244. X41,
  2245. X-4,
  2246. X0,
  2247. X
  2248. X41,
  2249. X-4,
  2250. X0,
  2251. X
  2252. X41,
  2253. X-4,
  2254. X0,
  2255. X
  2256. X40,
  2257. X41,
  2258. X-4,
  2259. X0,
  2260. X
  2261. X97,
  2262. X0,
  2263. X
  2264. X96,
  2265. X0,
  2266. X
  2267. X41,
  2268. X-4,
  2269. X0,
  2270. X
  2271. X41,
  2272. X-4,
  2273. X0,
  2274. X
  2275. X17,
  2276. X41,
  2277. X-4,
  2278. X0,
  2279. X
  2280. X20,
  2281. X41,
  2282. X-4,
  2283. X0,
  2284. X
  2285. X41,
  2286. X-4,
  2287. X0,
  2288. X
  2289. X28,
  2290. X41,
  2291. X-4,
  2292. X0,
  2293. X
  2294. X30,
  2295. X41,
  2296. X-4,
  2297. X0,
  2298. X
  2299. X31,
  2300. X41,
  2301. X-4,
  2302. X0,
  2303. X
  2304. X32,
  2305. X41,
  2306. X-4,
  2307. X0,
  2308. X
  2309. X33,
  2310. X41,
  2311. X-4,
  2312. X0,
  2313. X
  2314. X34,
  2315. X41,
  2316. X-4,
  2317. X0,
  2318. X
  2319. X41,
  2320. X-4,
  2321. X0,
  2322. X
  2323. X41,
  2324. X-4,
  2325. X0,
  2326. X
  2327. X41,
  2328. X-4,
  2329. X0,
  2330. X
  2331. X8,
  2332. X0,
  2333. X
  2334. X41,
  2335. X-4,
  2336. X0,
  2337. X
  2338. X15,
  2339. X41,
  2340. X-4,
  2341. X0,
  2342. X
  2343. X41,
  2344. X-4,
  2345. X0,
  2346. X
  2347. X35,
  2348. X41,
  2349. X-4,
  2350. X0,
  2351. X
  2352. X41,
  2353. X-4,
  2354. X0,
  2355. X
  2356. X41,
  2357. X-4,
  2358. X0,
  2359. X
  2360. X14,
  2361. X41,
  2362. X-4,
  2363. X0,
  2364. X
  2365. X27,
  2366. X41,
  2367. X-4,
  2368. X0,
  2369. X
  2370. X37,
  2371. X41,
  2372. X-4,
  2373. X0,
  2374. X
  2375. X39,
  2376. X41,
  2377. X-4,
  2378. X0,
  2379. X0};
  2380. X# define YYTYPE int
  2381. Xstruct yywork { YYTYPE verify, advance; } yycrank[] = {
  2382. X0,0,    0,0,    1,3,    0,0,    
  2383. X0,0,    0,0,    0,0,    0,0,    
  2384. X0,0,    0,0,    1,4,    1,5,    
  2385. X1,6,    1,6,    1,6,    0,0,    
  2386. X0,0,    0,0,    0,0,    0,0,    
  2387. X0,0,    0,0,    0,0,    0,0,    
  2388. X0,0,    0,0,    0,0,    0,0,    
  2389. X4,53,    4,5,    4,54,    4,54,    
  2390. X4,54,    1,4,    1,7,    1,8,    
  2391. X1,9,    1,10,    1,11,    1,12,    
  2392. X1,13,    1,14,    1,15,    1,16,    
  2393. X1,17,    1,18,    1,19,    1,20,    
  2394. X1,21,    1,22,    1,23,    4,53,    
  2395. X6,54,    12,68,    6,55,    6,55,    
  2396. X6,55,    1,23,    0,0,    1,24,    
  2397. X1,25,    1,26,    1,27,    1,28,    
  2398. X1,29,    7,56,    1,10,    9,60,    
  2399. X9,60,    11,67,    1,10,    1,10,    
  2400. X16,74,    15,72,    15,72,    6,54,    
  2401. X12,69,    1,30,    27,95,    17,75,    
  2402. X26,93,    26,94,    28,96,    28,97,    
  2403. X33,99,    57,0,    1,10,    0,0,    
  2404. X0,0,    1,10,    9,60,    19,77,    
  2405. X1,31,    1,3,    1,32,    1,33,    
  2406. X15,72,    17,76,    1,34,    1,35,    
  2407. X1,36,    1,37,    1,38,    1,39,    
  2408. X1,40,    80,143,    1,41,    19,78,    
  2409. X19,79,    1,42,    21,82,    1,10,    
  2410. X0,0,    50,125,    0,0,    1,43,    
  2411. X1,44,    1,45,    1,46,    1,47,    
  2412. X1,48,    40,112,    35,101,    15,73,    
  2413. X1,49,    1,50,    1,51,    1,52,    
  2414. X2,7,    21,83,    2,9,    30,57,    
  2415. X2,11,    2,12,    34,100,    41,113,    
  2416. X30,98,    2,16,    36,102,    2,18,    
  2417. X2,19,    2,20,    2,21,    41,114,    
  2418. X37,105,    36,103,    38,107,    39,110,    
  2419. X38,108,    42,115,    39,111,    43,116,    
  2420. X36,104,    2,24,    37,106,    2,26,    
  2421. X2,27,    2,28,    38,109,    9,61,    
  2422. X45,121,    46,122,    20,80,    9,62,    
  2423. X20,81,    20,81,    20,81,    20,81,    
  2424. X20,81,    20,81,    20,81,    20,81,    
  2425. X20,81,    20,81,    47,123,    48,124,    
  2426. X50,126,    61,130,    54,54,    61,131,    
  2427. X62,132,    55,54,    93,151,    55,55,    
  2428. X55,55,    55,55,    2,31,    15,73,    
  2429. X2,32,    2,33,    44,117,    44,118,    
  2430. X97,152,    2,35,    2,36,    2,37,    
  2431. X2,38,    87,148,    2,40,    100,153,    
  2432. X2,41,    54,54,    44,119,    2,42,    
  2433. X55,54,    44,120,    70,0,    101,154,    
  2434. X102,155,    2,43,    2,44,    2,45,    
  2435. X2,46,    2,47,    2,48,    8,57,    
  2436. X103,156,    88,148,    2,49,    2,50,    
  2437. X104,157,    2,52,    98,0,    8,57,    
  2438. X8,0,    8,57,    8,57,    8,57,    
  2439. X59,57,    87,148,    105,158,    86,146,    
  2440. X91,150,    86,146,    106,159,    70,140,    
  2441. X86,147,    86,147,    86,147,    86,147,    
  2442. X86,147,    86,147,    86,147,    86,147,    
  2443. X86,147,    86,147,    8,57,    107,160,    
  2444. X8,58,    88,148,    8,57,    98,0,    
  2445. X59,127,    8,57,    8,57,    8,57,    
  2446. X92,150,    8,57,    108,161,    109,162,    
  2447. X110,163,    111,164,    8,57,    8,57,    
  2448. X91,150,    112,165,    59,128,    59,128,    
  2449. X114,166,    115,167,    8,57,    117,170,    
  2450. X116,168,    8,57,    118,171,    119,173,    
  2451. X120,175,    8,57,    121,176,    8,57,    
  2452. X124,181,    122,177,    127,0,    8,57,    
  2453. X8,57,    116,169,    10,63,    10,63,    
  2454. X92,150,    131,185,    8,57,    122,178,    
  2455. X119,174,    118,172,    123,179,    130,183,    
  2456. X134,191,    123,180,    128,0,    8,57,    
  2457. X153,203,    154,204,    8,57,    155,205,    
  2458. X156,206,    130,184,    8,59,    157,207,    
  2459. X157,208,    10,63,    158,209,    8,57,    
  2460. X159,210,    10,64,    160,211,    161,212,    
  2461. X8,57,    162,213,    10,65,    10,66,    
  2462. X163,214,    165,215,    167,216,    168,217,    
  2463. X8,57,    10,64,    10,64,    10,64,    
  2464. X10,64,    10,64,    10,64,    10,64,    
  2465. X10,64,    10,64,    10,64,    169,218,    
  2466. X128,182,    128,182,    59,129,    8,57,    
  2467. X170,219,    171,220,    10,64,    10,64,    
  2468. X10,64,    10,64,    10,64,    10,64,    
  2469. X10,64,    10,64,    10,64,    10,64,    
  2470. X10,64,    10,64,    10,64,    10,64,    
  2471. X10,64,    10,64,    10,64,    10,64,    
  2472. X10,64,    10,64,    10,64,    10,64,    
  2473. X10,64,    10,64,    10,64,    10,64,    
  2474. X172,221,    173,222,    174,223,    175,224,    
  2475. X10,64,    176,225,    10,64,    10,64,    
  2476. X10,64,    10,64,    10,64,    10,64,    
  2477. X10,64,    10,64,    10,64,    10,64,    
  2478. X10,64,    10,64,    10,64,    10,64,    
  2479. X10,64,    10,64,    10,64,    10,64,    
  2480. X10,64,    10,64,    10,64,    10,64,    
  2481. X10,64,    10,64,    10,64,    10,64,    
  2482. X13,70,    177,226,    178,227,    179,228,    
  2483. X180,229,    181,230,    129,0,    182,0,    
  2484. X13,70,    13,0,    13,70,    13,70,    
  2485. X13,70,    84,84,    84,84,    84,84,    
  2486. X84,84,    84,84,    84,84,    84,84,    
  2487. X84,84,    84,85,    84,85,    183,231,    
  2488. X184,231,    185,232,    190,189,    190,189,    
  2489. X194,237,    187,0,    197,0,    13,70,    
  2490. X188,0,    13,70,    204,238,    13,70,    
  2491. X207,239,    208,240,    13,0,    13,70,    
  2492. X13,70,    84,87,    13,70,    209,241,    
  2493. X129,129,    129,129,    210,242,    13,70,    
  2494. X13,70,    190,189,    84,88,    141,0,    
  2495. X129,129,    213,243,    147,145,    13,70,    
  2496. X214,244,    217,245,    13,70,    197,140,    
  2497. X147,145,    129,129,    13,70,    149,201,    
  2498. X13,70,    129,129,    129,129,    218,246,    
  2499. X13,70,    13,70,    219,247,    220,248,    
  2500. X149,202,    84,87,    221,249,    13,70,    
  2501. X222,250,    223,251,    224,252,    225,253,    
  2502. X141,140,    226,254,    84,88,    227,255,    
  2503. X13,70,    229,256,    147,145,    13,70,    
  2504. X230,257,    141,197,    141,197,    13,71,    
  2505. X147,145,    129,129,    200,145,    149,201,    
  2506. X13,70,    232,258,    129,129,    233,0,    
  2507. X200,145,    13,70,    195,195,    195,195,    
  2508. X149,202,    234,0,    240,262,    241,263,    
  2509. X22,81,    13,70,    22,84,    22,84,    
  2510. X22,84,    22,84,    22,84,    22,84,    
  2511. X22,84,    22,84,    22,85,    22,85,    
  2512. X187,233,    242,264,    188,234,    243,265,    
  2513. X13,70,    195,195,    200,145,    245,266,    
  2514. X246,267,    248,268,    249,269,    22,86,    
  2515. X200,145,    250,270,    195,196,    201,201,    
  2516. X251,271,    195,196,    22,87,    252,272,    
  2517. X253,273,    255,274,    256,275,    259,0,    
  2518. X201,202,    262,277,    263,278,    22,88,    
  2519. X266,279,    273,280,    22,89,    23,81,    
  2520. X274,281,    23,90,    23,90,    23,90,    
  2521. X23,90,    23,90,    23,90,    23,90,    
  2522. X23,90,    23,90,    23,90,    22,86,    
  2523. X275,282,    277,283,    279,284,    201,201,    
  2524. X63,63,    63,63,    22,87,    260,260,    
  2525. X260,260,    281,285,    23,86,    282,286,    
  2526. X201,202,    0,0,    0,0,    22,88,    
  2527. X0,0,    23,91,    22,89,    0,0,    
  2528. X261,261,    261,261,    0,0,    0,0,    
  2529. X0,0,    0,0,    23,92,    63,63,    
  2530. X0,0,    0,0,    260,260,    63,133,    
  2531. X234,259,    0,0,    0,0,    63,134,    
  2532. X63,65,    63,135,    260,261,    0,0,    
  2533. X0,0,    0,0,    23,86,    261,261,    
  2534. X0,0,    0,0,    0,0,    0,0,    
  2535. X0,0,    23,91,    0,0,    261,276,    
  2536. X0,0,    0,0,    195,196,    0,0,    
  2537. X0,0,    0,0,    23,92,    0,0,    
  2538. X63,133,    63,133,    63,133,    63,133,    
  2539. X63,133,    63,133,    63,133,    63,133,    
  2540. X63,133,    63,133,    63,133,    63,133,    
  2541. X63,133,    63,133,    63,133,    63,133,    
  2542. X63,133,    63,133,    63,133,    63,133,    
  2543. X63,133,    63,133,    63,133,    63,133,    
  2544. X63,133,    63,133,    0,0,    0,0,    
  2545. X0,0,    0,0,    63,133,    0,0,    
  2546. X63,133,    63,133,    63,133,    63,133,    
  2547. X63,133,    63,133,    63,133,    63,133,    
  2548. X63,133,    63,133,    63,133,    63,133,    
  2549. X63,133,    63,133,    63,133,    63,133,    
  2550. X63,133,    63,133,    63,133,    63,133,    
  2551. X63,133,    63,133,    63,133,    63,133,    
  2552. X63,133,    63,133,    65,65,    65,65,    
  2553. X144,199,    0,0,    144,199,    0,0,    
  2554. X0,0,    144,200,    144,200,    144,200,    
  2555. X144,200,    144,200,    144,200,    144,200,    
  2556. X144,200,    144,200,    144,200,    0,0,    
  2557. X0,0,    0,0,    0,0,    0,0,    
  2558. X0,0,    65,65,    0,0,    0,0,    
  2559. X0,0,    65,136,    85,81,    0,0,    
  2560. X85,85,    85,85,    85,85,    85,85,    
  2561. X85,85,    85,85,    85,85,    85,85,    
  2562. X85,85,    85,85,    146,147,    146,147,    
  2563. X146,147,    146,147,    146,147,    146,147,    
  2564. X146,147,    146,147,    146,147,    146,147,    
  2565. X0,0,    85,86,    0,0,    0,0,    
  2566. X0,0,    0,0,    65,136,    65,136,    
  2567. X65,136,    65,136,    65,136,    65,136,    
  2568. X65,136,    65,136,    65,136,    65,136,    
  2569. X65,136,    65,136,    65,136,    65,136,    
  2570. X65,136,    65,136,    65,136,    65,136,    
  2571. X65,136,    65,136,    65,136,    65,136,    
  2572. X65,136,    65,136,    65,136,    65,136,    
  2573. X0,0,    85,86,    0,0,    0,0,    
  2574. X65,136,    0,0,    65,136,    65,136,    
  2575. X65,136,    65,136,    65,136,    65,136,    
  2576. X65,136,    65,136,    65,136,    65,136,    
  2577. X65,136,    65,136,    65,136,    65,136,    
  2578. X65,136,    65,136,    65,136,    65,136,    
  2579. X65,136,    65,136,    65,136,    65,136,    
  2580. X65,136,    65,136,    65,136,    65,136,    
  2581. X66,66,    66,66,    199,200,    199,200,    
  2582. X199,200,    199,200,    199,200,    199,200,    
  2583. X199,200,    199,200,    199,200,    199,200,    
  2584. X0,0,    0,0,    0,0,    0,0,    
  2585. X0,0,    0,0,    0,0,    0,0,    
  2586. X0,0,    0,0,    0,0,    66,66,    
  2587. X0,0,    0,0,    0,0,    66,137,    
  2588. X0,0,    0,0,    0,0,    66,138,    
  2589. X66,139,    66,66,    0,0,    66,139,    
  2590. X0,0,    0,0,    0,0,    0,0,    
  2591. X0,0,    0,0,    0,0,    0,0,    
  2592. X0,0,    0,0,    0,0,    0,0,    
  2593. X0,0,    0,0,    0,0,    0,0,    
  2594. X0,0,    0,0,    0,0,    0,0,    
  2595. X66,137,    66,137,    66,137,    66,137,    
  2596. X66,137,    66,137,    66,137,    66,137,    
  2597. X66,137,    66,137,    66,137,    66,137,    
  2598. X66,137,    66,137,    66,137,    66,137,    
  2599. X66,137,    66,137,    66,137,    66,137,    
  2600. X66,137,    66,137,    66,137,    66,137,    
  2601. X66,137,    66,137,    0,0,    0,0,    
  2602. X0,0,    0,0,    66,137,    0,0,    
  2603. X66,137,    66,137,    66,137,    66,137,    
  2604. X66,137,    66,137,    66,137,    66,137,    
  2605. X66,137,    66,137,    66,137,    66,137,    
  2606. X66,137,    66,137,    66,137,    66,137,    
  2607. X66,137,    66,137,    66,137,    66,137,    
  2608. X66,137,    66,137,    66,137,    66,137,    
  2609. X66,137,    66,137,    71,70,    0,0,    
  2610. X0,0,    0,0,    81,81,    81,81,    
  2611. X81,81,    81,81,    81,81,    81,81,    
  2612. X81,81,    81,81,    81,81,    81,81,    
  2613. X0,0,    0,0,    0,0,    0,0,    
  2614. X0,0,    0,0,    0,0,    0,0,    
  2615. X0,0,    0,0,    71,70,    81,144,    
  2616. X81,145,    0,0,    0,0,    71,70,    
  2617. X0,0,    0,0,    81,145,    136,195,    
  2618. X136,195,    0,0,    0,0,    0,0,    
  2619. X71,141,    71,141,    71,141,    71,141,    
  2620. X71,141,    71,141,    71,141,    71,141,    
  2621. X0,0,    0,0,    0,0,    0,0,    
  2622. X0,0,    0,0,    0,0,    71,70,    
  2623. X0,0,    0,0,    136,195,    81,144,    
  2624. X81,145,    0,0,    0,0,    0,0,    
  2625. X0,0,    0,0,    81,145,    136,196,    
  2626. X0,0,    0,0,    136,196,    0,0,    
  2627. X0,0,    0,0,    136,136,    136,136,    
  2628. X136,136,    136,136,    136,136,    136,136,    
  2629. X136,136,    136,136,    136,136,    136,136,    
  2630. X71,70,    0,0,    0,0,    0,0,    
  2631. X0,0,    71,70,    71,70,    0,0,    
  2632. X0,0,    0,0,    71,70,    0,0,    
  2633. X0,0,    0,0,    0,0,    0,0,    
  2634. X0,0,    0,0,    71,70,    0,0,    
  2635. X0,0,    0,0,    71,70,    0,0,    
  2636. X71,70,    0,0,    71,70,    0,0,    
  2637. X71,142,    89,149,    89,149,    89,149,    
  2638. X89,149,    89,149,    89,149,    89,149,    
  2639. X89,149,    89,149,    89,149,    0,0,    
  2640. X0,0,    0,0,    0,0,    0,0,    
  2641. X0,0,    0,0,    89,149,    89,149,    
  2642. X89,149,    89,149,    89,149,    89,149,    
  2643. X0,0,    132,186,    0,0,    0,0,    
  2644. X0,0,    0,0,    0,0,    0,0,    
  2645. X0,0,    132,186,    132,0,    132,186,    
  2646. X132,186,    132,186,    0,0,    136,196,    
  2647. X0,0,    0,0,    0,0,    0,0,    
  2648. X0,0,    0,0,    0,0,    0,0,    
  2649. X0,0,    0,0,    89,149,    89,149,    
  2650. X89,149,    89,149,    89,149,    89,149,    
  2651. X132,186,    0,0,    132,186,    0,0,    
  2652. X132,186,    0,0,    0,0,    132,186,    
  2653. X132,186,    132,186,    0,0,    132,186,    
  2654. X0,0,    0,0,    0,0,    0,0,    
  2655. X132,186,    132,186,    0,0,    0,0,    
  2656. X0,0,    0,0,    0,0,    0,0,    
  2657. X132,186,    0,0,    0,0,    132,186,    
  2658. X0,0,    0,0,    0,0,    132,186,    
  2659. X0,0,    132,186,    0,0,    0,0,    
  2660. X0,0,    132,186,    132,186,    0,0,    
  2661. X0,0,    0,0,    0,0,    0,0,    
  2662. X132,186,    0,0,    0,0,    0,0,    
  2663. X0,0,    0,0,    0,0,    0,0,    
  2664. X0,0,    132,186,    0,0,    0,0,    
  2665. X132,186,    0,0,    133,189,    133,189,    
  2666. X132,186,    0,0,    0,0,    0,0,    
  2667. X0,0,    132,186,    0,0,    0,0,    
  2668. X132,187,    0,0,    132,186,    0,0,    
  2669. X0,0,    0,0,    0,0,    0,0,    
  2670. X0,0,    0,0,    132,188,    0,0,    
  2671. X0,0,    133,189,    132,186,    0,0,    
  2672. X132,186,    133,133,    132,186,    0,0,    
  2673. X0,0,    0,0,    133,190,    0,0,    
  2674. X0,0,    132,186,    0,0,    0,0,    
  2675. X0,0,    133,133,    133,133,    133,133,    
  2676. X133,133,    133,133,    133,133,    133,133,    
  2677. X133,133,    133,133,    133,133,    0,0,    
  2678. X0,0,    0,0,    0,0,    0,0,    
  2679. X0,0,    0,0,    133,133,    133,133,    
  2680. X133,133,    133,133,    133,133,    133,133,    
  2681. X133,133,    133,133,    133,133,    133,133,    
  2682. X133,133,    133,133,    133,133,    133,133,    
  2683. X133,133,    133,133,    133,133,    133,133,    
  2684. X133,133,    133,133,    133,133,    133,133,    
  2685. X133,133,    133,133,    133,133,    133,133,    
  2686. X0,0,    0,0,    0,0,    0,0,    
  2687. X133,133,    0,0,    133,133,    133,133,    
  2688. X133,133,    133,133,    133,133,    133,133,    
  2689. X133,133,    133,133,    133,133,    133,133,    
  2690. X133,133,    133,133,    133,133,    133,133,    
  2691. X133,133,    133,133,    133,133,    133,133,    
  2692. X133,133,    133,133,    133,133,    133,133,    
  2693. X133,133,    133,133,    133,133,    133,133,    
  2694. X135,192,    135,192,    0,0,    235,260,    
  2695. X235,260,    0,0,    0,0,    0,0,    
  2696. X0,0,    0,0,    0,0,    0,0,    
  2697. X0,0,    0,0,    0,0,    0,0,    
  2698. X0,0,    0,0,    0,0,    0,0,    
  2699. X0,0,    0,0,    0,0,    135,192,    
  2700. X0,0,    0,0,    235,260,    135,193,    
  2701. X0,0,    0,0,    0,0,    135,194,    
  2702. X0,0,    135,135,    235,261,    0,0,    
  2703. X0,0,    0,0,    0,0,    0,0,    
  2704. X0,0,    0,0,    235,235,    235,235,    
  2705. X235,235,    235,235,    235,235,    235,235,    
  2706. X235,235,    235,235,    235,235,    235,235,    
  2707. X0,0,    0,0,    0,0,    0,0,    
  2708. X135,193,    135,193,    135,193,    135,193,    
  2709. X135,193,    135,193,    135,193,    135,193,    
  2710. X135,193,    135,193,    135,193,    135,193,    
  2711. X135,193,    135,193,    135,193,    135,193,    
  2712. X135,193,    135,193,    135,193,    135,193,    
  2713. X135,193,    135,193,    135,193,    135,193,    
  2714. X135,193,    135,193,    0,0,    0,0,    
  2715. X0,0,    0,0,    135,193,    0,0,    
  2716. X135,193,    135,193,    135,193,    135,193,    
  2717. X135,193,    135,193,    135,193,    135,193,    
  2718. X135,193,    135,193,    135,193,    135,193,    
  2719. X135,193,    135,193,    135,193,    135,193,    
  2720. X135,193,    135,193,    135,193,    135,193,    
  2721. X135,193,    135,193,    135,193,    135,193,    
  2722. X135,193,    135,193,    137,137,    0,0,    
  2723. X0,0,    0,0,    0,0,    0,0,    
  2724. X0,0,    0,0,    0,0,    0,0,    
  2725. X0,0,    0,0,    137,137,    137,137,    
  2726. X137,137,    137,137,    137,137,    137,137,    
  2727. X137,137,    137,137,    137,137,    137,137,    
  2728. X0,0,    0,0,    0,0,    0,0,    
  2729. X0,0,    0,0,    0,0,    137,137,    
  2730. X137,137,    137,137,    137,137,    137,137,    
  2731. X137,137,    137,137,    137,137,    137,137,    
  2732. X137,137,    137,137,    137,137,    137,137,    
  2733. X137,137,    137,137,    137,137,    137,137,    
  2734. X137,137,    137,137,    137,137,    137,137,    
  2735. X137,137,    137,137,    137,137,    137,137,    
  2736. X137,137,    0,0,    0,0,    0,0,    
  2737. X0,0,    137,137,    0,0,    137,137,    
  2738. X137,137,    137,137,    137,137,    137,137,    
  2739. X137,137,    137,137,    137,137,    137,137,    
  2740. X137,137,    137,137,    137,137,    137,137,    
  2741. X137,137,    137,137,    137,137,    137,137,    
  2742. X137,137,    137,137,    137,137,    137,137,    
  2743. X137,137,    137,137,    137,137,    137,137,    
  2744. X137,137,    138,138,    138,138,    236,189,    
  2745. X236,189,    0,0,    0,0,    0,0,    
  2746. X0,0,    0,0,    0,0,    0,0,    
  2747. X0,0,    0,0,    0,0,    0,0,    
  2748. X0,0,    0,0,    0,0,    0,0,    
  2749. X0,0,    0,0,    0,0,    0,0,    
  2750. X138,138,    0,0,    236,189,    0,0,    
  2751. X138,137,    0,0,    0,0,    0,0,    
  2752. X138,138,    0,0,    138,138,    236,190,    
  2753. X0,0,    0,0,    0,0,    0,0,    
  2754. X0,0,    0,0,    236,236,    236,236,    
  2755. X236,236,    236,236,    236,236,    236,236,    
  2756. X236,236,    236,236,    236,236,    236,236,    
  2757. X0,0,    0,0,    0,0,    0,0,    
  2758. X0,0,    138,137,    138,137,    138,137,    
  2759. X138,137,    138,137,    138,137,    138,137,    
  2760. X138,137,    138,137,    138,137,    138,137,    
  2761. X138,137,    138,137,    138,137,    138,137,    
  2762. X138,137,    138,137,    138,137,    138,137,    
  2763. X138,137,    138,137,    138,137,    138,137,    
  2764. X138,137,    138,137,    138,137,    0,0,    
  2765. X0,0,    0,0,    0,0,    138,137,    
  2766. X0,0,    138,137,    138,137,    138,137,    
  2767. X138,137,    138,137,    138,137,    138,137,    
  2768. X138,137,    138,137,    138,137,    138,137,    
  2769. X138,137,    138,137,    138,137,    138,137,    
  2770. X138,137,    138,137,    138,137,    138,137,    
  2771. X138,137,    138,137,    138,137,    138,137,    
  2772. X138,137,    138,137,    138,137,    142,198,    
  2773. X142,198,    142,198,    142,198,    142,198,    
  2774. X142,198,    142,198,    142,198,    142,198,    
  2775. X142,198,    0,0,    0,0,    0,0,    
  2776. X0,0,    0,0,    0,0,    0,0,    
  2777. X142,198,    142,198,    142,198,    142,198,    
  2778. X142,198,    142,198,    0,0,    186,186,    
  2779. X0,0,    0,0,    0,0,    0,0,    
  2780. X0,0,    0,0,    0,0,    186,186,    
  2781. X186,0,    186,186,    186,186,    186,186,    
  2782. X0,0,    0,0,    0,0,    0,0,    
  2783. X0,0,    0,0,    0,0,    0,0,    
  2784. X198,0,    0,0,    0,0,    0,0,    
  2785. X142,198,    142,198,    142,198,    142,198,    
  2786. X142,198,    142,198,    186,186,    0,0,    
  2787. X186,186,    0,0,    186,186,    0,0,    
  2788. X0,0,    186,186,    186,186,    186,186,    
  2789. X0,0,    186,186,    0,0,    0,0,    
  2790. X0,0,    0,0,    186,186,    186,186,    
  2791. X0,0,    198,140,    0,0,    0,0,    
  2792. X0,0,    0,0,    186,186,    0,0,    
  2793. X0,0,    186,186,    198,198,    198,198,    
  2794. X0,0,    186,186,    0,0,    186,186,    
  2795. X0,0,    0,0,    198,198,    186,186,    
  2796. X186,186,    189,189,    189,189,    0,0,    
  2797. X0,0,    0,0,    186,186,    198,198,    
  2798. X0,0,    0,0,    0,0,    198,198,    
  2799. X198,198,    0,0,    0,0,    186,186,    
  2800. X0,0,    0,0,    186,186,    0,0,    
  2801. X0,0,    0,0,    186,186,    0,0,    
  2802. X189,189,    0,0,    0,0,    186,186,    
  2803. X189,235,    0,0,    0,0,    0,0,    
  2804. X186,186,    0,0,    0,0,    0,0,    
  2805. X0,0,    0,0,    0,0,    198,198,    
  2806. X186,186,    0,0,    0,0,    0,0,    
  2807. X198,198,    0,0,    0,0,    0,0,    
  2808. X0,0,    0,0,    0,0,    0,0,    
  2809. X0,0,    0,0,    0,0,    186,186,    
  2810. X0,0,    189,235,    189,235,    189,235,    
  2811. X189,235,    189,235,    189,235,    189,235,    
  2812. X189,235,    189,235,    189,235,    189,235,    
  2813. X189,235,    189,235,    189,235,    189,235,    
  2814. X189,235,    189,235,    189,235,    189,235,    
  2815. X189,235,    189,235,    189,235,    189,235,    
  2816. X189,235,    189,235,    189,235,    0,0,    
  2817. X0,0,    0,0,    191,236,    189,235,    
  2818. X0,0,    189,235,    189,235,    189,235,    
  2819. X189,235,    189,235,    189,235,    189,235,    
  2820. X189,235,    189,235,    189,235,    189,235,    
  2821. X189,235,    189,235,    189,235,    189,235,    
  2822. X189,235,    189,235,    189,235,    189,235,    
  2823. X189,235,    189,235,    189,235,    189,235,    
  2824. X189,235,    189,235,    189,235,    191,236,    
  2825. X191,236,    191,236,    191,236,    191,236,    
  2826. X191,236,    191,236,    191,236,    191,236,    
  2827. X191,236,    191,236,    191,236,    191,236,    
  2828. X191,236,    191,236,    191,236,    191,236,    
  2829. X191,236,    191,236,    191,236,    191,236,    
  2830. X191,236,    191,236,    191,236,    191,236,    
  2831. X191,236,    0,0,    0,0,    0,0,    
  2832. X0,0,    191,236,    0,0,    191,236,    
  2833. X191,236,    191,236,    191,236,    191,236,    
  2834. X191,236,    191,236,    191,236,    191,236,    
  2835. X191,236,    191,236,    191,236,    191,236,    
  2836. X191,236,    191,236,    191,236,    191,236,    
  2837. X191,236,    191,236,    191,236,    191,236,    
  2838. X191,236,    191,236,    191,236,    191,236,    
  2839. X191,236,    192,192,    192,192,    0,0,    
  2840. X0,0,    0,0,    0,0,    0,0,    
  2841. X0,0,    0,0,    0,0,    0,0,    
  2842. X0,0,    0,0,    0,0,    0,0,    
  2843. X0,0,    0,0,    0,0,    0,0,    
  2844. X0,0,    0,0,    0,0,    0,0,    
  2845. X192,192,    0,0,    0,0,    0,0,    
  2846. X192,193,    0,0,    0,0,    0,0,    
  2847. X192,194,    0,0,    0,0,    0,0,    
  2848. X0,0,    0,0,    0,0,    0,0,    
  2849. X0,0,    0,0,    0,0,    0,0,    
  2850. X0,0,    0,0,    0,0,    0,0,    
  2851. X0,0,    0,0,    0,0,    0,0,    
  2852. X0,0,    0,0,    0,0,    0,0,    
  2853. X0,0,    192,193,    192,193,    192,193,    
  2854. X192,193,    192,193,    192,193,    192,193,    
  2855. X192,193,    192,193,    192,193,    192,193,    
  2856. X192,193,    192,193,    192,193,    192,193,    
  2857. X192,193,    192,193,    192,193,    192,193,    
  2858. X192,193,    192,193,    192,193,    192,193,    
  2859. X192,193,    192,193,    192,193,    0,0,    
  2860. X0,0,    0,0,    0,0,    192,193,    
  2861. X0,0,    192,193,    192,193,    192,193,    
  2862. X192,193,    192,193,    192,193,    192,193,    
  2863. X192,193,    192,193,    192,193,    192,193,    
  2864. X192,193,    192,193,    192,193,    192,193,    
  2865. X192,193,    192,193,    192,193,    192,193,    
  2866. X192,193,    192,193,    192,193,    192,193,    
  2867. X192,193,    192,193,    192,193,    193,193,    
  2868. X0,0,    0,0,    0,0,    0,0,    
  2869. X0,0,    0,0,    0,0,    0,0,    
  2870. X0,0,    0,0,    0,0,    193,193,    
  2871. X193,193,    193,193,    193,193,    193,193,    
  2872. X193,193,    193,193,    193,193,    193,193,    
  2873. X193,193,    0,0,    0,0,    0,0,    
  2874. X0,0,    0,0,    0,0,    0,0,    
  2875. X193,193,    193,193,    193,193,    193,193,    
  2876. X193,193,    193,193,    193,193,    193,193,    
  2877. X193,193,    193,193,    193,193,    193,193,    
  2878. X193,193,    193,193,    193,193,    193,193,    
  2879. X193,193,    193,193,    193,193,    193,193,    
  2880. X193,193,    193,193,    193,193,    193,193,    
  2881. X193,193,    193,193,    0,0,    0,0,    
  2882. X0,0,    237,193,    193,193,    0,0,    
  2883. X193,193,    193,193,    193,193,    193,193,    
  2884. X193,193,    193,193,    193,193,    193,193,    
  2885. X193,193,    193,193,    193,193,    193,193,    
  2886. X193,193,    193,193,    193,193,    193,193,    
  2887. X193,193,    193,193,    193,193,    193,193,    
  2888. X193,193,    193,193,    193,193,    193,193,    
  2889. X193,193,    193,193,    237,193,    237,193,    
  2890. X237,193,    237,193,    237,193,    237,193,    
  2891. X237,193,    237,193,    237,193,    237,193,    
  2892. X237,193,    237,193,    237,193,    237,193,    
  2893. X237,193,    237,193,    237,193,    237,193,    
  2894. X237,193,    237,193,    237,193,    237,193,    
  2895. X237,193,    237,193,    237,193,    237,193,    
  2896. X0,0,    0,0,    0,0,    0,0,    
  2897. X237,193,    0,0,    237,193,    237,193,    
  2898. X237,193,    237,193,    237,193,    237,193,    
  2899. X237,193,    237,193,    237,193,    237,193,    
  2900. X237,193,    237,193,    237,193,    237,193,    
  2901. X237,193,    237,193,    237,193,    237,193,    
  2902. X237,193,    237,193,    237,193,    237,193,    
  2903. X237,193,    237,193,    237,193,    237,193,    
  2904. X0,0};
  2905. Xstruct yysvf yysvec[] = {
  2906. X0,    0,    0,
  2907. Xyycrank+-1,    0,        0,    
  2908. Xyycrank+-95,    yysvec+1,    0,    
  2909. Xyycrank+0,    0,        yyvstop+1,
  2910. Xyycrank+19,    0,        yyvstop+3,
  2911. Xyycrank+0,    0,        yyvstop+6,
  2912. Xyycrank+43,    yysvec+4,    yyvstop+8,
  2913. Xyycrank+4,    0,        yyvstop+11,
  2914. Xyycrank+-214,    0,        yyvstop+14,
  2915. Xyycrank+58,    0,        yyvstop+16,
  2916. Xyycrank+277,    0,        yyvstop+21,
  2917. Xyycrank+8,    0,        yyvstop+25,
  2918. Xyycrank+15,    0,        yyvstop+28,
  2919. Xyycrank+-399,    0,        yyvstop+31,
  2920. Xyycrank+0,    0,        yyvstop+33,
  2921. Xyycrank+64,    0,        yyvstop+36,
  2922. Xyycrank+11,    0,        yyvstop+40,
  2923. Xyycrank+36,    0,        yyvstop+43,
  2924. Xyycrank+0,    0,        yyvstop+46,
  2925. Xyycrank+46,    0,        yyvstop+49,
  2926. Xyycrank+116,    0,        yyvstop+52,
  2927. Xyycrank+68,    0,        yyvstop+55,
  2928. Xyycrank+462,    0,        yyvstop+58,
  2929. Xyycrank+505,    0,        yyvstop+61,
  2930. Xyycrank+0,    0,        yyvstop+64,
  2931. Xyycrank+0,    0,        yyvstop+67,
  2932. Xyycrank+20,    0,        yyvstop+70,
  2933. Xyycrank+17,    0,        yyvstop+73,
  2934. Xyycrank+21,    0,        yyvstop+76,
  2935. Xyycrank+0,    0,        yyvstop+79,
  2936. Xyycrank+97,    yysvec+10,    yyvstop+82,
  2937. Xyycrank+0,    0,        yyvstop+86,
  2938. Xyycrank+0,    0,        yyvstop+89,
  2939. Xyycrank+23,    0,        yyvstop+92,
  2940. Xyycrank+17,    yysvec+10,    yyvstop+95,
  2941. Xyycrank+8,    yysvec+10,    yyvstop+99,
  2942. Xyycrank+41,    yysvec+10,    yyvstop+103,
  2943. Xyycrank+43,    yysvec+10,    yyvstop+107,
  2944. Xyycrank+38,    yysvec+10,    yyvstop+111,
  2945. Xyycrank+39,    yysvec+10,    yyvstop+115,
  2946. Xyycrank+10,    yysvec+10,    yyvstop+119,
  2947. Xyycrank+33,    yysvec+10,    yyvstop+123,
  2948. Xyycrank+38,    yysvec+10,    yyvstop+127,
  2949. Xyycrank+50,    yysvec+10,    yyvstop+131,
  2950. Xyycrank+86,    yysvec+10,    yyvstop+135,
  2951. Xyycrank+39,    yysvec+10,    yyvstop+139,
  2952. Xyycrank+51,    yysvec+10,    yyvstop+143,
  2953. Xyycrank+63,    yysvec+10,    yyvstop+147,
  2954. Xyycrank+71,    yysvec+10,    yyvstop+151,
  2955. Xyycrank+0,    0,        yyvstop+155,
  2956. Xyycrank+52,    0,        yyvstop+158,
  2957. Xyycrank+0,    0,        yyvstop+161,
  2958. Xyycrank+0,    0,        yyvstop+164,
  2959. Xyycrank+0,    yysvec+4,    yyvstop+167,
  2960. Xyycrank+169,    yysvec+4,    0,    
  2961. Xyycrank+172,    yysvec+4,    yyvstop+169,
  2962. Xyycrank+0,    0,        yyvstop+171,
  2963. Xyycrank+-75,    yysvec+8,    0,    
  2964. Xyycrank+0,    0,        yyvstop+173,
  2965. Xyycrank+-218,    yysvec+8,    0,    
  2966. Xyycrank+0,    yysvec+9,    0,    
  2967. Xyycrank+69,    0,        0,    
  2968. Xyycrank+78,    0,        0,    
  2969. Xyycrank+559,    0,        0,    
  2970. Xyycrank+0,    yysvec+10,    yyvstop+175,
  2971. Xyycrank+673,    0,        0,    
  2972. Xyycrank+787,    0,        0,    
  2973. Xyycrank+0,    0,        yyvstop+178,
  2974. Xyycrank+0,    0,        yyvstop+180,
  2975. Xyycrank+0,    0,        yyvstop+182,
  2976. Xyycrank+-196,    yysvec+13,    0,    
  2977. Xyycrank+900,    0,        0,    
  2978. Xyycrank+0,    yysvec+15,    0,    
  2979. Xyycrank+0,    0,        yyvstop+184,
  2980. Xyycrank+0,    0,        yyvstop+186,
  2981. Xyycrank+0,    0,        yyvstop+188,
  2982. Xyycrank+0,    0,        yyvstop+190,
  2983. Xyycrank+0,    0,        yyvstop+192,
  2984. Xyycrank+0,    0,        yyvstop+194,
  2985. Xyycrank+0,    0,        yyvstop+196,
  2986. Xyycrank+59,    0,        0,    
  2987. Xyycrank+866,    0,        yyvstop+198,
  2988. Xyycrank+0,    0,        yyvstop+200,
  2989. Xyycrank+0,    0,        yyvstop+202,
  2990. Xyycrank+365,    yysvec+23,    yyvstop+204,
  2991. Xyycrank+664,    0,        0,    
  2992. Xyycrank+188,    0,        0,    
  2993. Xyycrank+112,    0,        yyvstop+206,
  2994. Xyycrank+141,    0,        yyvstop+208,
  2995. Xyycrank+973,    0,        0,    
  2996. Xyycrank+0,    yysvec+23,    yyvstop+210,
  2997. Xyycrank+147,    0,        yyvstop+212,
  2998. Xyycrank+180,    0,        yyvstop+214,
  2999. Xyycrank+121,    0,        yyvstop+216,
  3000. Xyycrank+0,    0,        yyvstop+218,
  3001. Xyycrank+0,    0,        yyvstop+220,
  3002. Xyycrank+0,    0,        yyvstop+222,
  3003. Xyycrank+131,    0,        yyvstop+224,
  3004. Xyycrank+-212,    yysvec+13,    0,    
  3005. Xyycrank+0,    0,        yyvstop+226,
  3006. Xyycrank+83,    yysvec+10,    yyvstop+228,
  3007. Xyycrank+106,    yysvec+10,    yyvstop+231,
  3008. Xyycrank+93,    yysvec+10,    yyvstop+234,
  3009. Xyycrank+119,    yysvec+10,    yyvstop+237,
  3010. Xyycrank+110,    yysvec+10,    yyvstop+240,
  3011. Xyycrank+128,    yysvec+10,    yyvstop+243,
  3012. Xyycrank+117,    yysvec+10,    yyvstop+246,
  3013. Xyycrank+132,    yysvec+10,    yyvstop+250,
  3014. Xyycrank+141,    yysvec+10,    yyvstop+253,
  3015. Xyycrank+143,    yysvec+10,    yyvstop+256,
  3016. Xyycrank+149,    yysvec+10,    yyvstop+259,
  3017. Xyycrank+147,    yysvec+10,    yyvstop+262,
  3018. Xyycrank+149,    yysvec+10,    yyvstop+265,
  3019. Xyycrank+0,    yysvec+10,    yyvstop+268,
  3020. Xyycrank+152,    yysvec+10,    yyvstop+272,
  3021. Xyycrank+159,    yysvec+10,    yyvstop+275,
  3022. Xyycrank+169,    yysvec+10,    yyvstop+278,
  3023. Xyycrank+160,    yysvec+10,    yyvstop+281,
  3024. Xyycrank+171,    yysvec+10,    yyvstop+284,
  3025. Xyycrank+178,    yysvec+10,    yyvstop+287,
  3026. Xyycrank+171,    yysvec+10,    yyvstop+290,
  3027. Xyycrank+166,    yysvec+10,    yyvstop+293,
  3028. Xyycrank+176,    yysvec+10,    yyvstop+296,
  3029. Xyycrank+189,    yysvec+10,    yyvstop+299,
  3030. Xyycrank+175,    yysvec+10,    yyvstop+302,
  3031. Xyycrank+0,    0,        yyvstop+305,
  3032. Xyycrank+0,    0,        yyvstop+307,
  3033. Xyycrank+-272,    yysvec+8,    yyvstop+309,
  3034. Xyycrank+-288,    yysvec+8,    0,    
  3035. Xyycrank+-396,    yysvec+8,    0,    
  3036. Xyycrank+190,    0,        0,    
  3037. Xyycrank+189,    0,        0,    
  3038. Xyycrank+-1044,    0,        yyvstop+311,
  3039. Xyycrank+1125,    0,        yyvstop+313,
  3040. Xyycrank+254,    0,        0,    
  3041. Xyycrank+1239,    yysvec+66,    0,    
  3042. Xyycrank+934,    yysvec+65,    0,    
  3043. Xyycrank+1326,    0,        yyvstop+315,
  3044. Xyycrank+1440,    0,        0,    
  3045. Xyycrank+0,    0,        yyvstop+317,
  3046. Xyycrank+0,    0,        yyvstop+319,
  3047. Xyycrank+-441,    yysvec+13,    0,    
  3048. Xyycrank+1515,    0,        0,    
  3049. Xyycrank+0,    0,        yyvstop+321,
  3050. Xyycrank+641,    0,        0,    
  3051. Xyycrank+0,    0,        yyvstop+323,
  3052. Xyycrank+674,    0,        0,    
  3053. Xyycrank+384,    yysvec+146,    yyvstop+325,
  3054. Xyycrank+0,    0,        yyvstop+327,
  3055. Xyycrank+387,    yysvec+89,    yyvstop+329,
  3056. Xyycrank+0,    0,        yyvstop+331,
  3057. Xyycrank+0,    0,        yyvstop+333,
  3058. Xyycrank+0,    0,        yyvstop+335,
  3059. Xyycrank+189,    yysvec+10,    yyvstop+337,
  3060. Xyycrank+204,    yysvec+10,    yyvstop+340,
  3061. Xyycrank+202,    yysvec+10,    yyvstop+343,
  3062. Xyycrank+190,    yysvec+10,    yyvstop+346,
  3063. Xyycrank+192,    yysvec+10,    yyvstop+349,
  3064. Xyycrank+213,    yysvec+10,    yyvstop+352,
  3065. Xyycrank+214,    yysvec+10,    yyvstop+355,
  3066. Xyycrank+213,    yysvec+10,    yyvstop+358,
  3067. Xyycrank+206,    yysvec+10,    yyvstop+361,
  3068. Xyycrank+216,    yysvec+10,    yyvstop+364,
  3069. Xyycrank+223,    yysvec+10,    yyvstop+367,
  3070. Xyycrank+0,    yysvec+10,    yyvstop+370,
  3071. Xyycrank+210,    yysvec+10,    yyvstop+374,
  3072. Xyycrank+0,    yysvec+10,    yyvstop+377,
  3073. Xyycrank+219,    yysvec+10,    yyvstop+381,
  3074. Xyycrank+218,    yysvec+10,    yyvstop+384,
  3075. Xyycrank+218,    yysvec+10,    yyvstop+387,
  3076. Xyycrank+226,    yysvec+10,    yyvstop+390,
  3077. Xyycrank+231,    yysvec+10,    yyvstop+393,
  3078. Xyycrank+267,    yysvec+10,    yyvstop+396,
  3079. Xyycrank+253,    yysvec+10,    yyvstop+399,
  3080. Xyycrank+253,    yysvec+10,    yyvstop+402,
  3081. Xyycrank+255,    yysvec+10,    yyvstop+405,
  3082. Xyycrank+272,    yysvec+10,    yyvstop+408,
  3083. Xyycrank+290,    yysvec+10,    yyvstop+411,
  3084. Xyycrank+297,    yysvec+10,    yyvstop+414,
  3085. Xyycrank+303,    yysvec+10,    yyvstop+417,
  3086. Xyycrank+307,    yysvec+10,    yyvstop+420,
  3087. Xyycrank+297,    yysvec+10,    yyvstop+423,
  3088. Xyycrank+-397,    yysvec+8,    0,    
  3089. Xyycrank+321,    0,        0,    
  3090. Xyycrank+323,    0,        0,    
  3091. Xyycrank+320,    0,        0,    
  3092. Xyycrank+-1586,    0,        yyvstop+426,
  3093. Xyycrank+-419,    yysvec+186,    yyvstop+428,
  3094. Xyycrank+-422,    yysvec+186,    yyvstop+430,
  3095. Xyycrank+1648,    0,        0,    
  3096. Xyycrank+417,    0,        0,    
  3097. Xyycrank+1706,    0,        0,    
  3098. Xyycrank+1820,    yysvec+66,    0,    
  3099. Xyycrank+1907,    yysvec+133,    yyvstop+432,
  3100. Xyycrank+386,    yysvec+138,    0,    
  3101. Xyycrank+493,    0,        0,    
  3102. Xyycrank+0,    0,        yyvstop+434,
  3103. Xyycrank+-420,    yysvec+13,    0,    
  3104. Xyycrank+-1598,    yysvec+13,    0,    
  3105. Xyycrank+750,    0,        0,    
  3106. Xyycrank+424,    yysvec+199,    yyvstop+436,
  3107. Xyycrank+459,    0,        yyvstop+438,
  3108. Xyycrank+0,    yysvec+201,    yyvstop+440,
  3109. Xyycrank+0,    yysvec+10,    yyvstop+442,
  3110. Xyycrank+327,    yysvec+10,    yyvstop+446,
  3111. Xyycrank+0,    yysvec+10,    yyvstop+449,
  3112. Xyycrank+0,    yysvec+10,    yyvstop+453,
  3113. Xyycrank+320,    yysvec+10,    yyvstop+457,
  3114. Xyycrank+332,    yysvec+10,    yyvstop+460,
  3115. Xyycrank+326,    yysvec+10,    yyvstop+463,
  3116. Xyycrank+338,    yysvec+10,    yyvstop+466,
  3117. Xyycrank+0,    yysvec+10,    yyvstop+469,
  3118. Xyycrank+0,    yysvec+10,    yyvstop+473,
  3119. Xyycrank+339,    yysvec+10,    yyvstop+477,
  3120. Xyycrank+340,    yysvec+10,    yyvstop+480,
  3121. Xyycrank+0,    yysvec+10,    yyvstop+483,
  3122. Xyycrank+0,    yysvec+10,    yyvstop+487,
  3123. Xyycrank+342,    yysvec+10,    yyvstop+491,
  3124. Xyycrank+353,    yysvec+10,    yyvstop+494,
  3125. Xyycrank+354,    yysvec+10,    yyvstop+497,
  3126. Xyycrank+370,    yysvec+10,    yyvstop+500,
  3127. Xyycrank+363,    yysvec+10,    yyvstop+503,
  3128. Xyycrank+371,    yysvec+10,    yyvstop+506,
  3129. Xyycrank+378,    yysvec+10,    yyvstop+509,
  3130. Xyycrank+379,    yysvec+10,    yyvstop+512,
  3131. Xyycrank+379,    yysvec+10,    yyvstop+515,
  3132. Xyycrank+371,    yysvec+10,    yyvstop+518,
  3133. Xyycrank+380,    yysvec+10,    yyvstop+521,
  3134. Xyycrank+0,    yysvec+10,    yyvstop+524,
  3135. Xyycrank+369,    yysvec+10,    yyvstop+528,
  3136. Xyycrank+387,    yysvec+10,    yyvstop+531,
  3137. Xyycrank+0,    0,        yyvstop+534,
  3138. Xyycrank+395,    0,        0,    
  3139. Xyycrank+-489,    yysvec+186,    yyvstop+536,
  3140. Xyycrank+-495,    yysvec+186,    yyvstop+538,
  3141. Xyycrank+1242,    yysvec+189,    0,    
  3142. Xyycrank+1442,    yysvec+191,    0,    
  3143. Xyycrank+1965,    yysvec+138,    0,    
  3144. Xyycrank+0,    yysvec+10,    yyvstop+540,
  3145. Xyycrank+0,    yysvec+10,    yyvstop+544,
  3146. Xyycrank+396,    yysvec+10,    yyvstop+548,
  3147. Xyycrank+399,    yysvec+10,    yyvstop+551,
  3148. Xyycrank+420,    yysvec+10,    yyvstop+554,
  3149. Xyycrank+413,    yysvec+10,    yyvstop+557,
  3150. Xyycrank+0,    yysvec+10,    yyvstop+560,
  3151. Xyycrank+411,    yysvec+10,    yyvstop+564,
  3152. Xyycrank+418,    yysvec+10,    yyvstop+567,
  3153. Xyycrank+0,    yysvec+10,    yyvstop+570,
  3154. Xyycrank+429,    yysvec+10,    yyvstop+574,
  3155. Xyycrank+428,    yysvec+10,    yyvstop+577,
  3156. Xyycrank+434,    yysvec+10,    yyvstop+580,
  3157. Xyycrank+420,    yysvec+10,    yyvstop+583,
  3158. Xyycrank+435,    yysvec+10,    yyvstop+586,
  3159. Xyycrank+439,    yysvec+10,    yyvstop+589,
  3160. Xyycrank+0,    yysvec+10,    yyvstop+592,
  3161. Xyycrank+431,    yysvec+10,    yyvstop+596,
  3162. Xyycrank+437,    yysvec+10,    yyvstop+599,
  3163. Xyycrank+0,    yysvec+10,    yyvstop+602,
  3164. Xyycrank+0,    0,        yyvstop+606,
  3165. Xyycrank+-533,    yysvec+186,    yyvstop+608,
  3166. Xyycrank+562,    0,        0,    
  3167. Xyycrank+575,    0,        0,    
  3168. Xyycrank+428,    yysvec+10,    yyvstop+610,
  3169. Xyycrank+430,    yysvec+10,    yyvstop+613,
  3170. Xyycrank+0,    yysvec+10,    yyvstop+616,
  3171. Xyycrank+0,    yysvec+10,    yyvstop+620,
  3172. Xyycrank+447,    yysvec+10,    yyvstop+624,
  3173. Xyycrank+0,    yysvec+10,    yyvstop+627,
  3174. Xyycrank+0,    yysvec+10,    yyvstop+631,
  3175. Xyycrank+0,    yysvec+10,    yyvstop+635,
  3176. Xyycrank+0,    yysvec+10,    yyvstop+639,
  3177. Xyycrank+0,    yysvec+10,    yyvstop+643,
  3178. Xyycrank+0,    yysvec+10,    yyvstop+647,
  3179. Xyycrank+447,    yysvec+10,    yyvstop+651,
  3180. Xyycrank+451,    yysvec+10,    yyvstop+654,
  3181. Xyycrank+456,    yysvec+10,    yyvstop+657,
  3182. Xyycrank+0,    0,        yyvstop+660,
  3183. Xyycrank+464,    yysvec+10,    yyvstop+662,
  3184. Xyycrank+0,    yysvec+10,    yyvstop+665,
  3185. Xyycrank+452,    yysvec+10,    yyvstop+669,
  3186. Xyycrank+0,    yysvec+10,    yyvstop+672,
  3187. Xyycrank+473,    yysvec+10,    yyvstop+676,
  3188. Xyycrank+474,    yysvec+10,    yyvstop+679,
  3189. Xyycrank+0,    yysvec+10,    yyvstop+682,
  3190. Xyycrank+0,    yysvec+10,    yyvstop+686,
  3191. Xyycrank+0,    yysvec+10,    yyvstop+690,
  3192. Xyycrank+0,    yysvec+10,    yyvstop+694,
  3193. X0,    0,    0};
  3194. Xstruct yywork *yytop = yycrank+2087;
  3195. Xstruct yysvf *yybgin = yysvec+1;
  3196. Xchar yymatch[] = {
  3197. X00  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
  3198. X01  ,011 ,012 ,013 ,014 ,015 ,01  ,01  ,
  3199. X01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
  3200. X01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
  3201. X040 ,01  ,'"' ,01  ,'$' ,01  ,01  ,047 ,
  3202. X'(' ,')' ,'(' ,'+' ,')' ,'+' ,01  ,01  ,
  3203. X'0' ,'1' ,'1' ,'1' ,'1' ,'1' ,'1' ,'1' ,
  3204. X'8' ,'8' ,01  ,';' ,01  ,01  ,01  ,'?' ,
  3205. X01  ,'A' ,'A' ,'A' ,'A' ,'E' ,'F' ,'$' ,
  3206. X'$' ,'$' ,'$' ,'$' ,'L' ,'$' ,'$' ,'$' ,
  3207. X'$' ,'$' ,'$' ,'$' ,'$' ,'U' ,'$' ,'$' ,
  3208. X'X' ,'$' ,'$' ,01  ,0134,01  ,01  ,'$' ,
  3209. X01  ,'a' ,'a' ,'A' ,'A' ,'E' ,'f' ,'$' ,
  3210. X'$' ,'$' ,'$' ,'$' ,'L' ,'$' ,'n' ,'$' ,
  3211. X'$' ,'$' ,'n' ,'$' ,'n' ,'U' ,'n' ,'$' ,
  3212. X'X' ,'$' ,'$' ,';' ,01  ,'}' ,01  ,01  ,
  3213. X0};
  3214. Xchar yyextra[] = {
  3215. X0,0,0,0,1,0,0,0,
  3216. X0,0,0,0,0,0,0,0,
  3217. X0,0,0,0,0,0,0,0,
  3218. X0,0,0,0,0,0,0,0,
  3219. X0,0,0,0,0,0,0,0,
  3220. X0,0,0,0,0,0,0,0,
  3221. X0,1,0,0,0,0,0,0,
  3222. X0,0,0,0,0,0,0,0,
  3223. X0,0,0,0,0,0,0,0,
  3224. X0,0,0,0,0,0,0,0,
  3225. X0,0,0,0,0,0,0,0,
  3226. X0,0,0,0,0,0,0,0,
  3227. X0,1,1,0,0,0,0,0,
  3228. X0};
  3229. X#ifndef lint
  3230. Xstatic    char ncform_sccsid[] = "@(#)ncform 1.6 88/02/08 SMI"; /* from S5R2 1.2 */
  3231. X#endif
  3232. X
  3233. Xint yylineno =1;
  3234. X# define YYU(x) x
  3235. X# define NLSTATE yyprevious=YYNEWLINE
  3236. Xchar yytext[YYLMAX];
  3237. Xstruct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
  3238. Xchar yysbuf[YYLMAX];
  3239. Xchar *yysptr = yysbuf;
  3240. Xint *yyfnd;
  3241. Xextern struct yysvf *yyestate;
  3242. Xint yyprevious = YYNEWLINE;
  3243. Xyylook(){
  3244. X    register struct yysvf *yystate, **lsp;
  3245. X    register struct yywork *yyt;
  3246. X    struct yysvf *yyz;
  3247. X    int yych, yyfirst;
  3248. X    struct yywork *yyr;
  3249. X# ifdef LEXDEBUG
  3250. X    int debug;
  3251. X# endif
  3252. X    char *yylastch;
  3253. X    /* start off machines */
  3254. X# ifdef LEXDEBUG
  3255. X    debug = 0;
  3256. X# endif
  3257. X    yyfirst=1;
  3258. X    if (!yymorfg)
  3259. X        yylastch = yytext;
  3260. X    else {
  3261. X        yymorfg=0;
  3262. X        yylastch = yytext+yyleng;
  3263. X        }
  3264. X    for(;;){
  3265. X        lsp = yylstate;
  3266. X        yyestate = yystate = yybgin;
  3267. X        if (yyprevious==YYNEWLINE) yystate++;
  3268. X        for (;;){
  3269. X# ifdef LEXDEBUG
  3270. X            if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1);
  3271. X# endif
  3272. X            yyt = yystate->yystoff;
  3273. X            if(yyt == yycrank && !yyfirst){  /* may not be any transitions */
  3274. X                yyz = yystate->yyother;
  3275. X                if(yyz == 0)break;
  3276. X                if(yyz->yystoff == yycrank)break;
  3277. X                }
  3278. X            *yylastch++ = yych = input();
  3279. X            yyfirst=0;
  3280. X        tryagain:
  3281. X# ifdef LEXDEBUG
  3282. X            if(debug){
  3283. X                fprintf(yyout,"char ");
  3284. X                allprint(yych);
  3285. X                putchar('\n');
  3286. X                }
  3287. X# endif
  3288. X            yyr = yyt;
  3289. X            if ( (int)yyt > (int)yycrank){
  3290. X                yyt = yyr + yych;
  3291. X                if (yyt <= yytop && yyt->verify+yysvec == yystate){
  3292. X                    if(yyt->advance+yysvec == YYLERR)    /* error transitions */
  3293. X                        {unput(*--yylastch);break;}
  3294. X                    *lsp++ = yystate = yyt->advance+yysvec;
  3295. X                    goto contin;
  3296. X                    }
  3297. X                }
  3298. X# ifdef YYOPTIM
  3299. X            else if((int)yyt < (int)yycrank) {        /* r < yycrank */
  3300. X                yyt = yyr = yycrank+(yycrank-yyt);
  3301. X# ifdef LEXDEBUG
  3302. X                if(debug)fprintf(yyout,"compressed state\n");
  3303. X# endif
  3304. X                yyt = yyt + yych;
  3305. X                if(yyt <= yytop && yyt->verify+yysvec == yystate){
  3306. X                    if(yyt->advance+yysvec == YYLERR)    /* error transitions */
  3307. X                        {unput(*--yylastch);break;}
  3308. X                    *lsp++ = yystate = yyt->advance+yysvec;
  3309. X                    goto contin;
  3310. X                    }
  3311. X                yyt = yyr + YYU(yymatch[yych]);
  3312. X# ifdef LEXDEBUG
  3313. X                if(debug){
  3314. X                    fprintf(yyout,"try fall back character ");
  3315. X                    allprint(YYU(yymatch[yych]));
  3316. X                    putchar('\n');
  3317. X                    }
  3318. X# endif
  3319. X                if(yyt <= yytop && yyt->verify+yysvec == yystate){
  3320. X                    if(yyt->advance+yysvec == YYLERR)    /* error transition */
  3321. X                        {unput(*--yylastch);break;}
  3322. X                    *lsp++ = yystate = yyt->advance+yysvec;
  3323. X                    goto contin;
  3324. X                    }
  3325. X                }
  3326. X            if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){
  3327. X# ifdef LEXDEBUG
  3328. X                if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1);
  3329. X# endif
  3330. X                goto tryagain;
  3331. X                }
  3332. X# endif
  3333. X            else
  3334. X                {unput(*--yylastch);break;}
  3335. X        contin:
  3336. X# ifdef LEXDEBUG
  3337. X            if(debug){
  3338. X                fprintf(yyout,"state %d char ",yystate-yysvec-1);
  3339. X                allprint(yych);
  3340. X                putchar('\n');
  3341. X                }
  3342. X# endif
  3343. X            ;
  3344. X            }
  3345. X# ifdef LEXDEBUG
  3346. X        if(debug){
  3347. X            fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1);
  3348. X            allprint(yych);
  3349. X            putchar('\n');
  3350. X            }
  3351. X# endif
  3352. X        while (lsp-- > yylstate){
  3353. X            *yylastch-- = 0;
  3354. X            if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){
  3355. X                yyolsp = lsp;
  3356. X                if(yyextra[*yyfnd]){        /* must backup */
  3357. X                    while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){
  3358. X                        lsp--;
  3359. X                        unput(*yylastch--);
  3360. X                        }
  3361. X                    }
  3362. X                yyprevious = YYU(*yylastch);
  3363. X                yylsp = lsp;
  3364. X                yyleng = yylastch-yytext+1;
  3365. X                yytext[yyleng] = 0;
  3366. X# ifdef LEXDEBUG
  3367. X                if(debug){
  3368. X                    fprintf(yyout,"\nmatch ");
  3369. X                    sprint(yytext);
  3370. X                    fprintf(yyout," action %d\n",*yyfnd);
  3371. X                    }
  3372. X# endif
  3373. X                return(*yyfnd++);
  3374. X                }
  3375. X            unput(*yylastch);
  3376. X            }
  3377. X        if (yytext[0] == 0  /* && feof(yyin) */)
  3378. X            {
  3379. X            yysptr=yysbuf;
  3380. X            return(0);
  3381. X            }
  3382. X        yyprevious = yytext[0] = input();
  3383. X        if (yyprevious>0)
  3384. X            output(yyprevious);
  3385. X        yylastch=yytext;
  3386. X# ifdef LEXDEBUG
  3387. X        if(debug)putchar('\n');
  3388. X# endif
  3389. X        }
  3390. X    }
  3391. Xyyback(p, m)
  3392. X    int *p;
  3393. X{
  3394. Xif (p==0) return(0);
  3395. Xwhile (*p)
  3396. X    {
  3397. X    if (*p++ == m)
  3398. X        return(1);
  3399. X    }
  3400. Xreturn(0);
  3401. X}
  3402. X    /* the following are only used in the lex library */
  3403. Xyyinput(){
  3404. X    return(input());
  3405. X    }
  3406. Xyyoutput(c)
  3407. X  int c; {
  3408. X    output(c);
  3409. X    }
  3410. Xyyunput(c)
  3411. X   int c; {
  3412. X    unput(c);
  3413. X    }
  3414. END_OF_FILE
  3415.   if test 53730 -ne `wc -c <'Ccount/lex.yy.c'`; then
  3416.     echo shar: \"'Ccount/lex.yy.c'\" unpacked with wrong size!
  3417.   fi
  3418.   # end of 'Ccount/lex.yy.c'
  3419. fi
  3420. echo shar: End of archive 2 \(of 3\).
  3421. cp /dev/null ark2isdone
  3422. MISSING=""
  3423. for I in 1 2 3 ; do
  3424.     if test ! -f ark${I}isdone ; then
  3425.     MISSING="${MISSING} ${I}"
  3426.     fi
  3427. done
  3428. if test "${MISSING}" = "" ; then
  3429.     echo You have unpacked all 3 archives.
  3430.     rm -f ark[1-9]isdone
  3431. else
  3432.     echo You still must unpack the following archives:
  3433.     echo "        " ${MISSING}
  3434. fi
  3435. exit 0
  3436. exit 0 # Just in case...
  3437.