home *** CD-ROM | disk | FTP | other *** search
- From: prechelt@ira.uka.de (Lutz Prechelt)
- Newsgroups: comp.sources.misc
- Subject: v42i021: ccount - syntactic readability analysis tool, Part02/03
- Date: 29 Mar 1994 20:37:07 -0600
- Organization: Sterling Software
- Sender: kent@sparky.sterling.com
- Approved: kent@sparky.sterling.com
- Message-ID: <2naokj$g9l@sparky.sterling.com>
- X-Md4-Signature: 96ba841bbba824a0159b9971ca249ccb
-
- Submitted-by: prechelt@ira.uka.de (Lutz Prechelt)
- Posting-number: Volume 42, Issue 21
- Archive-name: ccount/part02
- Environment: Perl, sh
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then feed it
- # into a shell via "sh file" or similar. To overwrite existing files,
- # type "sh file -c".
- # Contents: Ccount/README Ccount/README.1 Ccount/ccounter
- # Ccount/lex.yy.c
- # Wrapped by kent@sparky on Thu Mar 24 20:42:22 1994
- PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin:$PATH ; export PATH
- echo If this archive is complete, you will see the following message:
- echo ' "shar: End of archive 2 (of 3)."'
- if test -f 'Ccount/README' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Ccount/README'\"
- else
- echo shar: Extracting \"'Ccount/README'\" \(2227 characters\)
- sed "s/^X//" >'Ccount/README' <<'END_OF_FILE'
- X
- X README file for 'ccount' analysis tools
- X===========================================
- X
- X'ccount' is a set of simple tools for the analysis of the syntactic
- Xreadability of C source programs.
- X
- XThe attributes computed by the ccount tools are things such as
- X - length of modules/functions/blocks/ifs/whiles/switches,
- X - number of control structures
- X - number of operators in expressions,
- X - nesting depth of blocks etc.
- X
- Xccount consists of the kernel analysis tool 'ccount', which performs
- Xsyntactic analysis of C programs WITHOUT running the preprocessor,
- Xa simple front end 'ccounter' to simplify the use of 'ccount',
- Xand a number of statistical analysis tools that generate reports
- Xfrom the tons of data produced by running 'ccount' on a lot of C
- Xsource files.
- X
- XThese statistics include
- X - averages
- X - medians
- X - 25%, 75%, 90%, 95%, 98%, and 99% quantiles
- X - sums
- X - fractions
- Xof various of the attributes (and combinations of them) over a set of
- Xanalyzed source files.
- X
- X
- XEnvironment:
- X------------
- X
- X'ccount' is implemented as one C program (using a LEX scanner and
- Xa YACC parser) and a set of scripts (Bourne-Shell and Perl).
- XTo compile and run ccount you only need a C compiler, sh, and perl.
- X
- XInstallation:
- X-------------
- X
- XTo compile 'ccount' just type 'make'.
- XThis should generate a single executable 'ccount'.
- XPut this executable and the scripts 'statty*' and 'ccounter' into
- Xany directory that is in your $PATH. That's all.
- X
- X
- XManifest:
- X----------
- X
- XThe ccount package consists of the following files:
- X
- XREADME (this file)
- XREADME.1 Description of 'ccount' and 'ccounter'
- XREADME.2 Description of statistical tools 'statty*'
- XMakefile Makefile
- Xccount Executable 'ccount' command [must be generated by make]
- Xccount.l Source file of LEX scanner
- Xccount.y Source file of YACC parser
- Xccounter Script to simplify use of 'ccount'
- Xlex.yy.c C code generated by LEX from ccount.l
- Xstatty "Generate all reports"-script
- XstattyB Blocks report script
- XstattyCSE Control structure and expression report script
- XstattyF Function report script
- XstattyM Module report script
- Xy.tab.c C code generated by YACC from ccount.y
- Xy.tab.h C header file generated by YACC from ccount.y
- END_OF_FILE
- if test 2227 -ne `wc -c <'Ccount/README'`; then
- echo shar: \"'Ccount/README'\" unpacked with wrong size!
- fi
- # end of 'Ccount/README'
- fi
- if test -f 'Ccount/README.1' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Ccount/README.1'\"
- else
- echo shar: Extracting \"'Ccount/README.1'\" \(17228 characters\)
- sed "s/^X//" >'Ccount/README.1' <<'END_OF_FILE'
- X****************************************************************************
- X
- X R E A D M E FILE of 'C C O U N T' PROGRAM
- X
- X****************************************************************************
- X
- XAuthor: Joerg Lawrenz, Universitaet Karlsruhe
- XDate: 93/11/25
- X
- X
- X
- X============================================================================
- X0. Synopsis
- X============================================================================
- X
- X 1. Description of 'ccount' program
- X 2. Input capabilities of 'ccount' program
- X 3. Behaviour in case of syntax error
- X 4. Output format of 'ccount' program
- X 5. How to apply 'ccount' to a set of source files
- X
- X
- X
- X============================================================================
- X1. Description of 'ccount' program
- X============================================================================
- X
- Xusage: ccount [-v] <basename.c>
- X
- Xccount supplies results of the structure of a C source code, e.g. length
- Xof functions and control structures, block nesting depths, number of operators
- Xin conditions and expressions, number of comment bytes etc.
- Xccount reads 'basename.c' for the C source code and 'basename.tpp' for a list
- Xof type names and other words and writes the results to 'basename.out'.
- XThe format of 'basename.out' is described in the fourth section.
- X
- X'basename.tpp' need not exist, but it gives you the possibility to resolve
- Xseveral kinds of parsing problems. It consists of (one entry per line)
- X - type names (with no prefix)
- X - preprocessor conditional directive (line beginning with '#')
- X - name of macro declaration (line beginning with '&')
- X - ignored identifier (line beginning with '!')
- X
- XFor example:
- X #ifdef DUMMY
- X display
- X !PRIVATE
- X &$DESCRIPTION
- X HOSTINT
- X &va_dcl
- X
- XTo go into details about 'basename.tpp', see the next section.
- X
- XThe -v option:
- X
- X This option can be useful when there is a syntax error and the
- X reason is not obvious. You restart 'ccount' with this option and
- X 'ccount' will allow you to follow the lexical analysis. Each token
- X and its token number will appear on the screen. Perhaps that happens
- X too quickly for your eyes, but when it stops because of a syntax
- X error, you have what you want to see: the last tokens before the
- X error. You can now compare them with the assignments of tokens and
- X their numbers in 'y.tab.h'.
- X In addition, the numbers of five selected lexical rules concerning the
- X identifier context will be indicated (for reasons of internal action
- X the same rule will probably be indicated more than once). These rules
- X determine whether the current identifier is a possible type name or not,
- X except rule 5 which recognizes constructions to declare function
- X prototypes in ANSI as well as Kernighan/Ritchie style like
- X extern void error A((char* msg, int level));
- X For more details look at 'ccount.l', the LEX specification file for
- X the scanner.
- X Note: with the -v option 'ccount' takes longer.
- X
- X
- X
- X============================================================================
- X2. Input capabilities of 'ccount' program
- X============================================================================
- X
- XThere are some restrictions on the kinds of source code files that can
- Xsuccessfully be parsed by 'ccount'.
- XThe main reason is that the preprocessor is not run, because we must assume
- Xthat included header files are not available.
- XSince comments would be removed by the preprocessor we besides could not
- Xassign comments to functions even if we count comments seperately before
- Xthe whole analysis.
- XNot running the preprocessor has still another effect:
- XAlternative implementations of complete function fragments that are enclosed
- Xin #ifdef something ... #else ... #endif are counted completely, i.e., all
- Xalternatives are treated as part of the function. This is in the spirit of
- Xthe counting purpose and thus intended. (It is a feature, not a bug)
- XA similar statement is true for the non-expansion of macros.
- X
- XOn the other side we have some problems caused by that:
- X
- X
- X2.1 Recognizing unknown type names
- X-------------------------------------
- X
- X i.e. type names that are declared in a header file or by #define :
- X
- X Consider the following:
- X
- X BOOLEAN found;
- X display *mywindow;
- X
- X If there is no comment within each declaration, 'ccount' recognizes
- X 'BOOLEAN' and 'display' as type names by the immediate context.
- X 'ccount' assumes an identifier to be a type name whenever this
- X is appropriate and possible and retains it for the rest of the
- X input file.
- X
- X Because of this, declarations and uses of objects that have the same
- X name as a type cannot be parsed, no matter whether these objects are
- X labels, struct fields, or variables.
- X Note as well that multiplications in declaration parts can cause
- X syntax errors, e.g.
- X
- X int Stack[MaxSize*FieldLength];
- X
- X But such problems are rare.
- X
- X Special cases:
- X
- X a. Some casts to non-pointer-typedef-types X can only be parsed
- X successfully if a declaration of an X variable appears textually
- X before the cast, or if the type name occurs in 'basename.tpp'.
- X
- X b. Same as with non-pointer-typedef-types as parameters in function
- X declarations like
- X
- X extern void error (string);
- X
- X
- X2.2 Handling of #if-preprocessor directives in the following cases:
- X---------------------------------------------------------------------
- X
- X a. Comments that are not encapsulated in /* ... */ brackets but
- X instead in preprocessor constructions such as #if 0 ... #endif or
- X #ifdef somethingweird ... #endif or the like
- X
- X b. Construction variants that cause syntax conflicts, e.g.
- X
- X #if abc
- X while (x < y) {
- X #else
- X while (x < y-1 && b != a) {
- X #endif
- X do_it();
- X }
- X
- X If 'ccount' finds the preprocessor conditional directive (e.g. #if 0,
- X #ifdef dummy) in 'basename.tpp', all following this directive in the
- X source file up to the first '#else', '#elif' or '#endif' regarding
- X this '#if...' is considered as preprocessor (PP) comment and thus
- X ignored during the parsing. That is, in the example only
- X
- X while (x < y-1 && b != a) {
- X do_it();
- X }
- X
- X will be parsed.
- X
- X If the same '#if' occurs more than once in the source file, it
- X it is not always necessary and appropriate to treat each correspoding
- X section as a PPcomment. Thus, each occurence will be indicated
- X together with the length (in line) of PPcomment to help you estimating
- X whether you should modify the preprocessor condition in the
- X source file and in 'basename.tpp' in order to better control the
- X handling of PPcomments.
- X Note that there can be real excesses of interlocking '#if's and
- X '#ifdef's, so that you will probably lose track of what's going on.
- X Then the best is you give up.
- X
- X
- X2.3 Macros that break normal C syntax
- X----------------------------------------
- X
- X These macros will cause parser errors. This problem is obvious
- X for macros that for example rename literal elements of C, such as
- X
- X #define IF if(
- X #define THEN ){
- X #define END }
- X #define ELSE else{
- X
- X or the like. But also
- X
- X #define RETURN_VALUE(x) {...;}
- X ...
- X a = b + c;
- X RETURN_VALUE(a)
- X c++;
- X
- X See yourself if it is worth adding missing semicolons.
- X
- X The following exceptions can be handled by 'ccount':
- X
- X a. If it seems that a source file can only successfully be parsed
- X by ignoring an identifier, you can force 'ccount' to do it so
- X by writing this identifier with the prefix '!' in 'basename.tpp'.
- X
- X For example:
- X
- X PRIVATE char c;
- X
- X will be accepted if '!PRIVATE' occurs in 'demo.tpp'.
- X Note that 'PRIVATE' is counted as normal identifier and yet it
- X is still ignored for the whole input file.
- X
- X b. 'ccount' accepts macros in declaration parts if the macro names
- X occour each with prefix '&' in 'basename.tpp' and if the macros
- X have one of the following five forms:
- X
- X macro_name (e.g. va_dcl)
- X macro_name()
- X macro_name();
- X macro_name(list)
- X macro_name(list);
- X
- X where 'list' consists of expressions and/or type names.
- X
- X c. Finally 'ccount' accepts constructions to declare function
- X prototypes in ANSI as well as Kernighan/Ritchie style like
- X
- X extern void error A((char* msg, int level));
- X
- X
- X
- X============================================================================
- X3. Behaviour in case of syntax error
- X============================================================================
- X
- XFor many source files 'ccount' will not work upon first trial because of
- Xsyntax errors. In these cases, 'ccount' halts with an error message that
- Xlooks for example like the following:
- X
- X
- X"demo.c", line 70: parser error: syntax error at or near 'calloc'
- X-------------------------------------------------------------------------
- X /* reserve_memory_and_complain_if_necessary (Level 1) */
- X
- X b = malloc (b_size);
- X
- X>> r = (REFS)calloc ((maxref+1), sizeof (REF_INFO));
- X l = (LINES)malloc ((maxline+1) * sizeof (LINE_INFO));
- X
- X s_root = malloc (s_size);
- X
- X-------------------------------------------------------------------------
- XPlease enter type name OR
- Xpreprocessor conditional directive beginning with '#' OR
- Xname of macro declaration beginning with '&' OR
- Xignored identifier beginning with '!' OR
- Xjust RETURN for giving up!
- X'@' at the end will repeat this request:
- X
- X
- Xthat is, 'ccount' gives you a message and the according source line with
- Xfour additional lines of source context before and after it. It then prompts
- Xyou for the entry in 'basename.tpp'. If you enter just a RETURN, the program
- Xterminates. If you enter something else, it is appended to 'basename.tpp'
- Xand then the program quits. You have to restart the run for this file,
- Xperhaps with the -v option, until it terminates successfully.
- XSometimes you have nevertheless to load the input file in an editor for
- Xgetting more information and for modifying a little the source file if it's
- Xtolerable as well as worthwhile.
- XFor more support consult the previous section.
- X
- X
- X
- X============================================================================
- X4. Output format of 'ccount' program
- X============================================================================
- X
- Xccount operates on one source file, say 'basename.c', at a time and
- Xproduces one output file 'basename.out'.
- XThis output file contains exactly one line per object in the source file.
- XThe object types considered by ccount are
- X
- X - module (i.e. the whole source file)
- X - function (where its nesting depth is defined as 1)
- X - block (statement sequence between { } WITHIN a function body, nesting
- X depth > 1, except innermost blocks)
- X - innermost block (block with no blocks inside it)
- X - 'if' statement
- X - 'while' or 'do' statement
- X - 'for' statement
- X - 'switch' statement
- X - expression statement
- X
- XAn operator is counted as 1, including ?: , () , [].
- X
- XThe count of block lines begins with the first '{' and ends with the
- Xaccording '}'. So therefore, in the following example
- X
- X if (i == 3) {
- X do_it();
- X i++;
- X }
- X
- Xthe block length is equal to the length of the 'if'-statement, that is,
- Xfour lines.
- X
- XWe will now describe the output format for each of these types
- Xindividually. The common property of all these formats is that they
- Xconsist of fields that are separated by one or several spaces or Tabs
- Xand that the contents of each field are a contiguous string of
- Xnon-blank non-tab characters (most, in fact, are decimal integer numbers).
- X
- X
- XModule:
- X 1. 'M'
- X 2. Length (in bytes)
- X 3. Length (in lines)
- X 4. Comments (in bytes)
- X 5. Preprocessor comments (in bytes)
- X (see 2.2)
- X 6. Number of identifier uses
- X 7. Total accumulated length of identifier uses (in bytes)
- X 8. Number of keyword or symbol uses
- X 9. Total accumulated length of keyword/symbol uses (in bytes)
- X 10. Number of preprocessor directives
- X 11. Total accumulated length of preprocessor directives (in bytes)
- X 12. Total number of ';'
- X 13. Number of functions
- X 14. Average innermost block length (in semicolons)
- X (blockless functions are also considered here, see Function (13.))
- X 15. Standard deviation of the above
- X 16. Maximum innermost block length (in semicolons)
- X 17. Average average block nesting depth per function
- X 18. Standard deviation of the above
- X 19. Maximum average block nesting depth per function
- X
- X
- XFunction:
- X 1. 'F'
- X 2. Length (in bytes)
- X 3. Length (in lines)
- X 4. Comments (in bytes)
- X 5. Number of ';'
- X 6. Number of 'if' statements
- X 7. Number of 'while' or 'do' statements
- X 8. Number of 'for' statements
- X 9. Number of 'switch' statements
- X 10. Number of 'goto' statements
- X 11. Number of labels
- X 12. Number of all blocks
- X 13. Average innermost block length (in semicolons)
- X (is set to the value of (5.) if there are no blocks)
- X 14. Standard deviation of the above
- X 15. Maximum innermost block length (in semicolons)
- X 16. Average block nesting depth
- X 17. Standard deviation of the above
- X 18. Maximum block nesting depth
- X
- X
- XBlock (which is not an innermost block):
- X 1. 'B'
- X 2. Length (in lines)
- X 3. Number of ';'
- X 4. Nesting depth
- X 5. Total number of enclosed blocks
- X 6. Maximum absolute nesting depth of enclosed blocks
- X
- X
- XInnermost block:
- X 1. 'I'
- X 2. Length (in lines)
- X 3. Number of ';'
- X 4. Nesting depth
- X
- X
- X'if' statement:
- X 1. 'i'
- X 2. Length (in lines) total
- X 3. Number of operators in 'if' condition
- X 4. Length (in lines) of 'then' part
- X 5. Number of ';' in 'then' part
- X 6. Length (in lines) of 'else' part
- X 7. Number of ';' in 'else' part
- X 8. Nesting depth
- X
- X
- X'while' or 'do' statement:
- X 1. 'w'
- X 2. Length (in lines) total
- X 3. Number of ';'
- X 4. Nesting depth
- X 5. Number of operators in 'while' condition
- X 6. Number of 'break' or 'continue' statements for this 'do' or 'while'
- X
- X
- X'for' statement:
- X 1. 'f'
- X 2. Length (in lines) total
- X 3. Number of ';' (including those in head)
- X 4. Nesting depth
- X 5. Number of operators in second expression of head
- X 6. Number of break statements for this 'for'
- X
- X
- X'switch' statement:
- X 1. 's'
- X 2. Length (in lines) total
- X 3. Number of ';'
- X 4. Nesting depth
- X 5. Number of operators in head expression
- X 6. Number of case labels
- X 7. Number of break statements for this 'switch'
- X
- X
- Xexpression statements (i.e. expression followed by ';'):
- X 1. 'e'
- X 2. Number of operators
- X 3. Nesting depth
- X
- X
- X
- X============================================================================
- X5. How to apply 'ccount' to a set of source files
- X============================================================================
- X
- XProbably you want to get results for many source files.
- XRemember that 'ccount' can treat only one input file.
- XTherefore in addition there is 'ccounter', a shell script that
- Xanalyzes a set of source files using 'ccount'.
- XBut 'ccounter' can do still more:
- X
- X a. You can set a step size in order to select only a certain fraction
- X of source files, for example: if the step size is 2, 'ccounter' will
- X take only every second one of the given source files.
- X
- X b. If there is a syntax error you have two additional options after the
- X request:
- X - If you type '%', the current source file will be parsed again.
- X (Meanwhile you have edited the source file in another window.)
- X - If you type '*', the current source file will be parsed again with
- X the -v option.
- X Note that these two options are not indicated, yet they still are
- X available.
- X
- X c. No matter what your entry is after a parser error, if it is more than
- X a RETURN, the same source file will be parsed again automatically,
- X otherwise 'ccounter' proceeds to the next input file.
- X
- XAs you see, 'ccounter' is useful even if you consider just one source file.
- X
- XNote that 'ccount' must be in the current working directory or in your
- X$PATH before you begin.
- X
- X
- XHow to work with `ccount':
- X--------------------------
- X
- X i. Prepare a directory tree containing the sources.
- X Use whatever organization you would like for the tree.
- X The best way is to you place all source files at the same level,
- X so that you can catch them with a single wildcard expression, e.g.
- X */*/*.c for sources on the third level of subdirectories.
- X
- X ii. Type for example
- X
- X ccounter directory1/*/*.c directory2/*/*.c
- X
- X The number of source files that 'ccounter' has found, is indicated,
- X e.g. 48. Now 'ccounter' prompts you for the step size, e.g. 5.
- X After that the selected source files are parsed and analysed one
- X after the other. The current file name is indicated together with
- X the current sequence number and the number of all selected files,
- X for example
- X
- X 1/9: directory1/project1/demo1.c
- X Success. Results in 'directory1/project1/demo1.out'.
- X
- X 2/9: directory1/project1/demo2.c
- X Success. Results in 'directory1/project1/demo2.out'.
- X
- X ...
- X
- X If a parser error occurs, follow the explanations above to resolve
- X the problem.
- X Finally 'ccounter' gives you the message
- X
- X 8 file(s) successfully parsed.
- X
- X and terminates.
- X
- X iii. Now you can collect the results and generate summary statistics.
- X See 'README.2' for that.
- X
- X============================================================================
- END_OF_FILE
- if test 17228 -ne `wc -c <'Ccount/README.1'`; then
- echo shar: \"'Ccount/README.1'\" unpacked with wrong size!
- fi
- # end of 'Ccount/README.1'
- fi
- if test -f 'Ccount/ccounter' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Ccount/ccounter'\"
- else
- echo shar: Extracting \"'Ccount/ccounter'\" \(2367 characters\)
- sed "s/^X//" >'Ccount/ccounter' <<'END_OF_FILE'
- X#!/usr/bin/sh
- X
- X############################################################################
- X#
- X# Usage: ccounter filename1.c filename2.c ...
- X#
- X# 'ccounter' handles a heap of source files by using 'ccount', a program
- X# that supplies results of the structure of a C source code.
- X# See 'README.1' for more details!
- X#
- X# Author: Joerg Lawrenz, Universitaet Karlsruhe
- X# Date: 93/12/1
- X#
- X############################################################################
- X
- Xif test $# -eq 0
- X then
- X echo "Usage: $0 filename1.c filename2.c ..."
- X exit
- Xfi
- X
- Xfiles="$*"
- X
- X#
- X# Determine the number of all input files.
- X#
- X
- Xnum_files=`ls $files | wc -w`
- X
- Xecho "Files total: $num_files"
- X
- Xif test $num_files -eq 0
- X then exit
- Xfi
- X
- X#
- X# Now ask for the step size by which the files should be selected.
- X#
- X
- Xif test $num_files -eq 1
- X then step=1
- X else echo "Please enter size of step:"
- X read step
- X if test $step
- X then :
- X else echo "1"
- X step=1
- X fi
- Xfi
- X
- X#
- X# Now determine the number of selected source files.
- X#
- X
- Xmax_files=`expr $num_files / $step`
- X
- Xnumber=1 # current sequence number of all input files
- Xindex=1 # current sequence number of selected files
- Xsuccess=0 # number of files that are successfully parsed
- X
- X#
- X# Now apply 'ccount' to each selected source file, perhaps repeatedly
- X# by one or the other, depending on with which status 'ccount' will exit.
- X# Only if the status is 0 (-> success) or 1 (-> abandoning), take the next
- X# source file. If the status is 3 (-> show tokens), repeat the run with
- X# the -v option for 'ccount', otherwise if the status is 2 (-> entry
- X# occured in 'basename.tpp' or -> source file has been edited), just repeat.
- X#
- X
- Xfor file in $files
- Xdo
- X if test `expr $number % $step` -eq 0
- X then
- X status=2
- X while test $status -ge 2
- X do
- X echo
- X echo "$index/$max_files: $file"
- X if test $status -eq 2
- X then ccount $file
- X else ccount -v $file
- X fi
- X status=$?
- X done
- X
- X if test $status -eq 0
- X then success=`expr $success + 1`
- X fi
- X
- X index=`expr $index + 1`
- X fi
- X number=`expr $number + 1`
- Xdone
- X
- Xecho "$success file(s) successfully parsed."
- END_OF_FILE
- if test 2367 -ne `wc -c <'Ccount/ccounter'`; then
- echo shar: \"'Ccount/ccounter'\" unpacked with wrong size!
- fi
- chmod +x 'Ccount/ccounter'
- # end of 'Ccount/ccounter'
- fi
- if test -f 'Ccount/lex.yy.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Ccount/lex.yy.c'\"
- else
- echo shar: Extracting \"'Ccount/lex.yy.c'\" \(53730 characters\)
- sed "s/^X//" >'Ccount/lex.yy.c' <<'END_OF_FILE'
- X# include "stdio.h"
- X# define U(x) x
- X# define NLSTATE yyprevious=YYNEWLINE
- X# define BEGIN yybgin = yysvec + 1 +
- X# define INITIAL 0
- X# define YYLERR yysvec
- X# define YYSTATE (yyestate-yysvec-1)
- X# define YYOPTIM 1
- X# define YYLMAX BUFSIZ
- X# define output(c) putc(c,yyout)
- X# define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
- X# define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;}
- X# define yymore() (yymorfg=1)
- X# define ECHO fprintf(yyout, "%s",yytext)
- X# define REJECT { nstr = yyreject(); goto yyfussy;}
- Xint yyleng; extern char yytext[];
- Xint yymorfg;
- Xextern char *yysptr, yysbuf[];
- Xint yytchar;
- XFILE *yyin = {stdin}, *yyout = {stdout};
- Xextern int yylineno;
- Xstruct yysvf {
- X struct yywork *yystoff;
- X struct yysvf *yyother;
- X int *yystops;};
- Xstruct yysvf *yyestate;
- Xextern struct yysvf yysvec[], *yybgin;
- X/****************************************************************************
- X
- X SCANNER for 'C C O U N T' PROGRAM
- X
- X L E X SPECIFICATION FILE
- X
- X*****************************************************************************
- X
- X Description:
- X
- X 'ccount.l' is the lex specification file of 'ccount' program that
- X supplies results of the structure of a C source file. Before a C source
- X file can be parsed, there must be a lexical analysis, that is, a module
- X that recognizes tokens like keywords, identifiers, type names, constants,
- X operators etc.
- X Such a module is specified by this file and then created as C source code
- X by the command 'lex ccount.l' (--> lex.yy.c). Finally 'lex.yy.c' is
- X included in 'y.tab.c', the module of the syntactic analysis.
- X
- X See also 'README.1'!
- X
- X*****************************************************************************
- X
- X Author: Joerg Lawrenz, Universitaet Karlsruhe
- X Date: 12/1/93
- X
- X Portions Copyright (c) 1989, 1990 James A. Roskind
- X
- X*****************************************************************************
- X
- XI. How does 'ccount.l' recognize an unknown type name (defined by user)?
- X
- X When an identifier is read, 'ccount.l' compares the context with four
- X selected rules by looking at the following words. If one rule can be
- X applied, the variable 'isaTYPE' is set to 1. Then 'ccount.l' checks
- X if the type name is a keyword (e.g. 'int') by rejecting the rule.
- X If the list of keywords has been passed without any action, 'ccount.l'
- X comes to the single 'identifier' pattern. There the token 'TYPEDEFname'
- X is returned if 'isaTYPE' is 1 or if the identifier has been found in the
- X hash table without prefix. If necessary the type name is entered in the
- X hash table.
- X
- X Examples for the four rules:
- X
- X 1. mytype a;
- X
- X 2. mytype **a;
- X mytype (*f)();
- X mytype (*a)[];
- X
- X 3. mytype) a, casting
- X mytype) a)
- X mytype) a}
- X
- X 4. mytype *, pointer type as parameter
- X mytype **)
- X
- X Up to now there are no conflicts between these rules and other C structures.
- X
- X*****************************************************************************
- X
- XII. Further details:
- X
- X a) Rule 5:
- X
- X Another rule (5) comparing the identifier context recognizes constructions
- X to declare function prototypes in ANSI as well as Kernighan/Ritchie style
- X like
- X extern void error A((char* msg, int level));
- X
- X by using the state variable 'flag':
- X
- X extern void error A ( ( char* msg, int level ) );
- X flag 0 1 2 3 4 -1 -2 -2 ....................-2 0
- X ignore | | |
- X
- X --------------------------------------------------------------------------
- X
- X b) Identifier:
- X
- X If 'ccount.l' considers an identifier, it also checks if the identifier
- X is the name of a macro in declaration part (token 'MACRODEF' will be
- X returned in this case) or if the identifier has to be ignored. For this,
- X 'ccount.l' adds the according prefix ('&' or '!') to the identifier and
- X looks for this word in the hash table.
- X
- X --------------------------------------------------------------------------
- X
- X c) Handling of '#if'-preprocessor directives (see also 'README.1', 2.2):
- X
- X If 'ccount.l' reads a '#if'-preprocessor directive which it finds also
- X in the hash table, the state variable 'pp_comment' and the count variable
- X 'if_count' are set to 1. The line number is indicated and saved in
- X 'BeginLine'. Then 'ReadPPline()' counts the directive line and reads the
- X following lines up to the first '#' by treating them as 'preprocessor
- X comment'. 'pp_comment' is set to 2. Now 'ccount.l' looks for the rest
- X of the directive. If it is the according 'endif', 'else' or 'elif'
- X ('if_count' == 1 ?), 'pp_comment' is set to 0 and 'ccount.l' returns
- X to the normal read mode. Otherwise or if the directive itself is part of
- X PP comment, 'ReadPPline' is called again treating all up to the next '#'
- X as PP comment, and so on.
- X
- X
- X********************** DECLARATIONS *********************************/
- X
- X/* The following global variables and functions are already defined
- X in 'y.tab.c': */
- X
- Xextern int lines;
- Xextern long bytes;
- Xextern long comments;
- Xextern long Pcomments;
- X
- Xextern int num_identifier;
- Xextern int num_symbols;
- Xextern int num_ppdirectives;
- Xextern long bytes_identifier;
- Xextern long bytes_symbols;
- Xextern long bytes_ppdirectives;
- X
- Xextern char lexem[];
- Xextern char last_identifier[];
- X
- Xextern BOOL DeclFlag;
- Xextern BOOL ElabTypeFlag;
- Xextern BOOL Debug;
- X
- Xextern void henter(); /* enters a word in the hash table */
- Xextern BOOL hfind(); /* finds a word in the hash table */
- X
- X/***************************************************************************/
- X
- XBOOL isaTYPE = 0; /* state variable, see above I. */
- X
- Xint flag = 0; /* state variable, see above II.a */
- X
- Xint if_count = 0; /* count variable, see above II.c */
- Xint BeginLine = 0; /* line store variable, see above II.c */
- Xint pp_comment = 0; /* state variable, see above II.c */
- X
- X
- X/******************************* DEFINES ***********************************/
- X
- X#define WHITE_RETURN(x) bytes += yyleng; /* just count bytes */
- X
- X#define PA_KEYWORD_RETURN(x) { if (flag > 0)\
- X if (flag == 1) flag++; else flag = 0;\
- X CountSymbol(x);\
- X RETURN_VAL(x) } /* standard C PArser Keyword */
- X
- X#define IDENTIFIER_RETURN(x) { strcpy(last_identifier, yytext);\
- X CountSymbol(x);\
- X RETURN_VAL(x) }
- X
- X#define ASCIIOP_RETURN(x) { CountSymbol((int)*yytext);\
- X RETURN_VAL((int)*yytext) }
- X /* a single character operator */
- X#define NAMEDOP_RETURN(x) { CountSymbol(x);\
- X RETURN_VAL(x) }
- X /* a multichar operator, with a name */
- X
- X#define NUMERICAL_RETURN(x) { CountSymbol(x);\
- X RETURN_VAL(x) } /* some sort of constant */
- X
- X#define LITERAL_RETURN(x) { CountSymbol(x);\
- X RETURN_VAL(x) } /* a string literal */
- X
- X#define RETURN_VAL(x) { isaTYPE = 0;\
- X bytes += yyleng;\
- X strcpy(lexem, yytext);\
- X if (Debug)\
- X fprintf(stderr," %s %d ",yytext,x);\
- X return(x); }
- X
- X/****************************************************************************/
- X
- X# define YYNEWLINE 10
- Xyylex(){
- Xint nstr; extern int yyprevious;
- Xwhile((nstr = yylook()) >= 0)
- Xyyfussy: switch(nstr){
- Xcase 0:
- Xif(yywrap()) return(0); break;
- Xcase 1:
- X {WHITE_RETURN(' ');}
- Xbreak;
- Xcase 2:
- X {WHITE_RETURN(' ');}
- Xbreak;
- Xcase 3:
- X
- X {lines++;
- X WHITE_RETURN('\n');
- X }
- Xbreak;
- Xcase 4:
- X /* Rule 1 */
- X {
- X if (Debug)
- X fprintf(stderr," RULE1>> ");
- X isaTYPE = !ElabTypeFlag && flag <= 1;
- X REJECT;
- X }
- Xbreak;
- Xcase 5:
- X /* Rule 2 */
- X {
- X if (Debug)
- X fprintf(stderr," RULE2>> ");
- X isaTYPE = DeclFlag && !ElabTypeFlag;
- X REJECT;
- X }
- Xbreak;
- Xcase 6:
- X /* Rule 3 */
- X {
- X if (Debug)
- X fprintf(stderr," RULE3>> ");
- X isaTYPE = !ElabTypeFlag;
- X REJECT;
- X }
- Xbreak;
- Xcase 7:
- X /* Rule 4 */
- X {
- X if (Debug)
- X fprintf(stderr," RULE4>> ");
- X isaTYPE = !ElabTypeFlag;
- X REJECT;
- X }
- Xbreak;
- Xcase 8:
- X
- X { /* Rule 5 */
- X if (Debug)
- X fprintf(stderr," RULE5>> ");
- X flag = 1;
- X REJECT;
- X }
- Xbreak;
- Xcase 9:
- X {PA_KEYWORD_RETURN(AUTO);}
- Xbreak;
- Xcase 10:
- X {PA_KEYWORD_RETURN(BREAK);}
- Xbreak;
- Xcase 11:
- X {PA_KEYWORD_RETURN(CASE);}
- Xbreak;
- Xcase 12:
- X {PA_KEYWORD_RETURN(CHAR);}
- Xbreak;
- Xcase 13:
- X {PA_KEYWORD_RETURN(CONST);}
- Xbreak;
- Xcase 14:
- X {PA_KEYWORD_RETURN(CONTINUE);}
- Xbreak;
- Xcase 15:
- X {PA_KEYWORD_RETURN(DEFAULT);}
- Xbreak;
- Xcase 16:
- X {PA_KEYWORD_RETURN(DO);}
- Xbreak;
- Xcase 17:
- X {PA_KEYWORD_RETURN(DOUBLE);}
- Xbreak;
- Xcase 18:
- X {PA_KEYWORD_RETURN(ELSE);}
- Xbreak;
- Xcase 19:
- X {ElabTypeFlag = 1;
- X PA_KEYWORD_RETURN(ENUM);}
- Xbreak;
- Xcase 20:
- X {PA_KEYWORD_RETURN(EXTERN);}
- Xbreak;
- Xcase 21:
- X {PA_KEYWORD_RETURN(FLOAT);}
- Xbreak;
- Xcase 22:
- X {PA_KEYWORD_RETURN(FOR);}
- Xbreak;
- Xcase 23:
- X {PA_KEYWORD_RETURN(GOTO);}
- Xbreak;
- Xcase 24:
- X {PA_KEYWORD_RETURN(IF);}
- Xbreak;
- Xcase 25:
- X {PA_KEYWORD_RETURN(INT);}
- Xbreak;
- Xcase 26:
- X {PA_KEYWORD_RETURN(LONG);}
- Xbreak;
- Xcase 27:
- X {PA_KEYWORD_RETURN(REGISTER);}
- Xbreak;
- Xcase 28:
- X {PA_KEYWORD_RETURN(RETURN);}
- Xbreak;
- Xcase 29:
- X {PA_KEYWORD_RETURN(SHORT);}
- Xbreak;
- Xcase 30:
- X {PA_KEYWORD_RETURN(SIGNED);}
- Xbreak;
- Xcase 31:
- X {PA_KEYWORD_RETURN(SIZEOF);}
- Xbreak;
- Xcase 32:
- X {PA_KEYWORD_RETURN(STATIC);}
- Xbreak;
- Xcase 33:
- X {ElabTypeFlag = 1;
- X PA_KEYWORD_RETURN(STRUCT);}
- Xbreak;
- Xcase 34:
- X {PA_KEYWORD_RETURN(SWITCH);}
- Xbreak;
- Xcase 35:
- X {PA_KEYWORD_RETURN(TYPEDEF);}
- Xbreak;
- Xcase 36:
- X {ElabTypeFlag = 1;
- X PA_KEYWORD_RETURN(UNION);}
- Xbreak;
- Xcase 37:
- X {PA_KEYWORD_RETURN(UNSIGNED);}
- Xbreak;
- Xcase 38:
- X {PA_KEYWORD_RETURN(VOID);}
- Xbreak;
- Xcase 39:
- X {PA_KEYWORD_RETURN(VOLATILE);}
- Xbreak;
- Xcase 40:
- X {PA_KEYWORD_RETURN(WHILE);}
- Xbreak;
- Xcase 41:
- X {char str[STR_LEN];
- X if (flag > 0) flag++;
- X sprintf(str, "!");
- X if (hfind(strcat(str, yytext)) || flag == 4)
- X {
- X isaTYPE = 0;
- X if (flag == 4) flag = -1;
- X CountSymbol(IDENTIFIER);
- X WHITE_RETURN(IDENTIFIER);
- X }
- X else {
- X str[0] = '&';
- X if (hfind(str))
- X IDENTIFIER_RETURN(MACRODEF)
- X else {
- X if (hfind(yytext))
- X isaTYPE = 1;
- X else
- X if (isaTYPE) henter(yytext);
- X
- X if (isaTYPE)
- X IDENTIFIER_RETURN(TYPEDEFname)
- X else
- X IDENTIFIER_RETURN(IDENTIFIER);
- X }
- X }
- X }
- Xbreak;
- Xcase 42:
- X {NUMERICAL_RETURN(INTEGERconstant);}
- Xbreak;
- Xcase 43:
- X {NUMERICAL_RETURN(OCTALconstant);}
- Xbreak;
- Xcase 44:
- X {NUMERICAL_RETURN(HEXconstant);}
- Xbreak;
- Xcase 45:
- X{NUMERICAL_RETURN(FLOATINGconstant);}
- Xbreak;
- Xcase 46:
- X {NUMERICAL_RETURN(CHARACTERconstant);}
- Xbreak;
- Xcase 47:
- X {CountLines(yytext);
- X LITERAL_RETURN(STRINGliteral);
- X }
- Xbreak;
- Xcase 48:
- X {if (flag == -1) {
- X flag = -2;
- X CountSymbol('(');
- X WHITE_RETURN(LP);
- X }
- X else
- X ASCIIOP_RETURN(LP);}
- Xbreak;
- Xcase 49:
- X {if (flag == -2) {
- X flag = 0;
- X CountSymbol(')');
- X WHITE_RETURN(RP);
- X }
- X else
- X ASCIIOP_RETURN(RP);}
- Xbreak;
- Xcase 50:
- X {ASCIIOP_RETURN(RP);}
- Xbreak;
- Xcase 51:
- X {ASCIIOP_RETURN(COMMA);}
- Xbreak;
- Xcase 52:
- X {ASCIIOP_RETURN(LC);}
- Xbreak;
- Xcase 53:
- X {ASCIIOP_RETURN(RC);}
- Xbreak;
- Xcase 54:
- X {ASCIIOP_RETURN(LB);}
- Xbreak;
- Xcase 55:
- X {ASCIIOP_RETURN(RB);}
- Xbreak;
- Xcase 56:
- X {ASCIIOP_RETURN(DOT);}
- Xbreak;
- Xcase 57:
- X {ASCIIOP_RETURN(AND);}
- Xbreak;
- Xcase 58:
- X {ASCIIOP_RETURN(STAR);}
- Xbreak;
- Xcase 59:
- X {ASCIIOP_RETURN(PLUS);}
- Xbreak;
- Xcase 60:
- X {ASCIIOP_RETURN(MINUS);}
- Xbreak;
- Xcase 61:
- X {ASCIIOP_RETURN(NEGATE);}
- Xbreak;
- Xcase 62:
- X {ASCIIOP_RETURN(NOT);}
- Xbreak;
- Xcase 63:
- X {ASCIIOP_RETURN(DIV);}
- Xbreak;
- Xcase 64:
- X {ASCIIOP_RETURN(MOD);}
- Xbreak;
- Xcase 65:
- X {ASCIIOP_RETURN(LT);}
- Xbreak;
- Xcase 66:
- X {ASCIIOP_RETURN(GT);}
- Xbreak;
- Xcase 67:
- X {ASCIIOP_RETURN(XOR);}
- Xbreak;
- Xcase 68:
- X {ASCIIOP_RETURN(PIPE);}
- Xbreak;
- Xcase 69:
- X {ASCIIOP_RETURN(QUESTION);}
- Xbreak;
- Xcase 70:
- X {ASCIIOP_RETURN(COLON);}
- Xbreak;
- Xcase 71:
- X {ASCIIOP_RETURN(SEMICOLON);}
- Xbreak;
- Xcase 72:
- X {ASCIIOP_RETURN(ASSIGN);}
- Xbreak;
- Xcase 73:
- X {NAMEDOP_RETURN(ARROW);}
- Xbreak;
- Xcase 74:
- X {NAMEDOP_RETURN(ICR);}
- Xbreak;
- Xcase 75:
- X {NAMEDOP_RETURN(DECR);}
- Xbreak;
- Xcase 76:
- X {NAMEDOP_RETURN(LS);}
- Xbreak;
- Xcase 77:
- X {NAMEDOP_RETURN(RS);}
- Xbreak;
- Xcase 78:
- X {NAMEDOP_RETURN(LE);}
- Xbreak;
- Xcase 79:
- X {NAMEDOP_RETURN(GE);}
- Xbreak;
- Xcase 80:
- X {NAMEDOP_RETURN(EQ);}
- Xbreak;
- Xcase 81:
- X {NAMEDOP_RETURN(NE);}
- Xbreak;
- Xcase 82:
- X {NAMEDOP_RETURN(ANDAND);}
- Xbreak;
- Xcase 83:
- X {NAMEDOP_RETURN(OROR);}
- Xbreak;
- Xcase 84:
- X {NAMEDOP_RETURN(MULTassign);}
- Xbreak;
- Xcase 85:
- X {NAMEDOP_RETURN(DIVassign);}
- Xbreak;
- Xcase 86:
- X {NAMEDOP_RETURN(MODassign);}
- Xbreak;
- Xcase 87:
- X {NAMEDOP_RETURN(PLUSassign);}
- Xbreak;
- Xcase 88:
- X {NAMEDOP_RETURN(MINUSassign);}
- Xbreak;
- Xcase 89:
- X {NAMEDOP_RETURN(LSassign);}
- Xbreak;
- Xcase 90:
- X {NAMEDOP_RETURN(RSassign);}
- Xbreak;
- Xcase 91:
- X {NAMEDOP_RETURN(ANDassign);}
- Xbreak;
- Xcase 92:
- X {NAMEDOP_RETURN(ERassign);}
- Xbreak;
- Xcase 93:
- X {NAMEDOP_RETURN(ORassign);}
- Xbreak;
- Xcase 94:
- X {NAMEDOP_RETURN(ELLIPSIS);}
- Xbreak;
- Xcase 95:
- X {ReadComment();}
- Xbreak;
- Xcase 96:
- X {
- X if (!pp_comment && hfind(yytext)) {
- X pp_comment = 1;
- X fprintf(stderr,"Line %d: %s\n",lines+1,yytext);
- X BeginLine = lines+1;
- X }
- X if (pp_comment) if_count++;
- X yyless(1); /* yytext = "#" */
- X ReadPPline();
- X }
- Xbreak;
- Xcase 97:
- X {if (pp_comment && --if_count == 0) {
- X pp_comment = 0;
- X fprintf(stderr,"Length: %d\n",lines-BeginLine);
- X }
- X ReadPPline();
- X }
- Xbreak;
- Xcase 98:
- X {
- X if (if_count == 1) {
- X pp_comment = 0;
- X if_count--;
- X fprintf(stderr,"Length: %d\n",lines-BeginLine);
- X }
- X ReadPPline();
- X }
- Xbreak;
- Xcase 99:
- X {ReadPPline();}
- Xbreak;
- Xcase 100:
- X /* Handling of unknown character */
- X {
- X fprintf(stderr, "\nline %d: lexical error",lines+1);
- X RETURN_VAL(0);
- X }
- Xbreak;
- Xcase -1:
- Xbreak;
- Xdefault:
- Xfprintf(yyout,"bad switch yylook %d",nstr);
- X} return(0); }
- X/* end of yylex */
- X
- X/**************************** FUNCTIONS ********************************
- X
- X CountSymbol(x) --> increases the respective number of identifiers
- X or symbols and the respective number of bytes
- X for the token x
- X ReadComment() --> reads comment
- X ReadPPline() --> reads preprocessor directives or PP comment
- X see above II.c
- X CountLines(s) --> counts the number of lines in the string s
- X
- X***************************************************************************/
- X
- X
- XCountSymbol (x)
- Xint x;
- X{
- X switch (x)
- X {
- X case IDENTIFIER:
- X case TYPEDEFname:
- X case MACRODEF: num_identifier++;
- X bytes_identifier += yyleng;
- X break;
- X
- X default: num_symbols++;
- X bytes_symbols += yyleng;
- X break;
- X }
- X}
- X
- X/***************************************************************************/
- X
- XReadComment()
- X{
- X char c;
- X
- X while ((c=input()) != '*') {
- X if (c == '\n') lines++;
- X comments++;
- X }
- X
- X comments++;
- X if ((c=input()) == '/')
- X comments += 3;
- X else {
- X unput(c);
- X ReadComment();
- X }
- X}
- X
- X/***************************************************************************/
- X
- XReadPPline()
- X{
- X char c;
- X int ende = 0;
- X
- X if (pp_comment < 2) { /* '#' is the beginning of a '#if'-PP directive *
- X num_ppdirectives++; /* that is no PP comment. */
- X bytes_ppdirectives++;
- X bytes++;
- X while (!ende)
- X switch (input())
- X {
- X case '/': if ((c = input()) == '*')
- X ReadComment();
- X else {unput(c);
- X bytes_ppdirectives++;
- X bytes++;}
- X break;
- X
- X case '\\': if ((c = input()) == '\n')
- X {lines++;
- X bytes_ppdirectives++;
- X bytes++;}
- X else unput(c);
- X bytes_ppdirectives++;
- X bytes++;
- X break;
- X
- X case '\n': ende = 1;
- X lines++;
- X default : bytes_ppdirectives++;
- X bytes++;
- X break;
- X }
- X } else Pcomments++; /* '#' is part of PP comment */
- X
- X if (pp_comment) { /* read PP comment up to the first '#' */
- X while ((c = input()) != '#') {
- X if (c == '\n') lines++;
- X Pcomments++;
- X }
- X unput(c);
- X pp_comment = 2;
- X }
- X}
- X
- X/***************************************************************************/
- X
- XCountLines (string)
- Xchar *string;
- X{
- X while (*string)
- X if (*string++ == '\n') lines++;
- X}
- Xint yyvstop[] = {
- X0,
- X
- X100,
- X0,
- X
- X1,
- X100,
- X0,
- X
- X3,
- X0,
- X
- X2,
- X100,
- X0,
- X
- X62,
- X100,
- X0,
- X
- X100,
- X0,
- X
- X99,
- X100,
- X-97,
- X-98,
- X0,
- X
- X41,
- X100,
- X-4,
- X0,
- X
- X64,
- X100,
- X0,
- X
- X57,
- X100,
- X0,
- X
- X100,
- X0,
- X
- X48,
- X100,
- X0,
- X
- X50,
- X100,
- X-49,
- X0,
- X
- X58,
- X100,
- X0,
- X
- X59,
- X100,
- X0,
- X
- X51,
- X100,
- X0,
- X
- X60,
- X100,
- X0,
- X
- X56,
- X100,
- X0,
- X
- X63,
- X100,
- X0,
- X
- X43,
- X100,
- X0,
- X
- X42,
- X100,
- X0,
- X
- X70,
- X100,
- X0,
- X
- X71,
- X100,
- X0,
- X
- X65,
- X100,
- X0,
- X
- X72,
- X100,
- X0,
- X
- X66,
- X100,
- X0,
- X
- X69,
- X100,
- X0,
- X
- X41,
- X100,
- X-4,
- X0,
- X
- X54,
- X100,
- X0,
- X
- X55,
- X100,
- X0,
- X
- X67,
- X100,
- X0,
- X
- X41,
- X100,
- X-4,
- X0,
- X
- X41,
- X100,
- X-4,
- X0,
- X
- X41,
- X100,
- X-4,
- X0,
- X
- X41,
- X100,
- X-4,
- X0,
- X
- X41,
- X100,
- X-4,
- X0,
- X
- X41,
- X100,
- X-4,
- X0,
- X
- X41,
- X100,
- X-4,
- X0,
- X
- X41,
- X100,
- X-4,
- X0,
- X
- X41,
- X100,
- X-4,
- X0,
- X
- X41,
- X100,
- X-4,
- X0,
- X
- X41,
- X100,
- X-4,
- X0,
- X
- X41,
- X100,
- X-4,
- X0,
- X
- X41,
- X100,
- X-4,
- X0,
- X
- X41,
- X100,
- X-4,
- X0,
- X
- X41,
- X100,
- X-4,
- X0,
- X
- X52,
- X100,
- X0,
- X
- X68,
- X100,
- X0,
- X
- X53,
- X100,
- X0,
- X
- X61,
- X100,
- X0,
- X
- X1,
- X0,
- X
- X2,
- X0,
- X
- X81,
- X0,
- X
- X47,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X86,
- X0,
- X
- X82,
- X0,
- X
- X91,
- X0,
- X
- X49,
- X0,
- X
- X84,
- X0,
- X
- X74,
- X0,
- X
- X87,
- X0,
- X
- X75,
- X0,
- X
- X88,
- X0,
- X
- X73,
- X0,
- X
- X45,
- X0,
- X
- X95,
- X0,
- X
- X85,
- X0,
- X
- X43,
- X0,
- X
- X43,
- X0,
- X
- X43,
- X0,
- X
- X42,
- X0,
- X
- X42,
- X0,
- X
- X42,
- X0,
- X
- X76,
- X0,
- X
- X78,
- X0,
- X
- X80,
- X0,
- X
- X79,
- X0,
- X
- X77,
- X0,
- X
- X92,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X16,
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X24,
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X93,
- X0,
- X
- X83,
- X0,
- X
- X47,
- X0,
- X
- X96,
- X0,
- X
- X4,
- X0,
- X
- X5,
- X0,
- X
- X7,
- X0,
- X
- X46,
- X0,
- X
- X94,
- X0,
- X
- X45,
- X0,
- X
- X45,
- X0,
- X
- X43,
- X0,
- X
- X44,
- X0,
- X
- X42,
- X0,
- X
- X89,
- X0,
- X
- X90,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X22,
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X25,
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X96,
- X0,
- X
- X96,
- X0,
- X
- X96,
- X0,
- X
- X5,
- X0,
- X
- X6,
- X0,
- X
- X45,
- X0,
- X
- X44,
- X0,
- X
- X44,
- X0,
- X
- X9,
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X11,
- X41,
- X-4,
- X0,
- X
- X12,
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X18,
- X41,
- X-4,
- X0,
- X
- X19,
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X23,
- X41,
- X-4,
- X0,
- X
- X26,
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X38,
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X98,
- X0,
- X
- X96,
- X0,
- X
- X96,
- X0,
- X
- X10,
- X41,
- X-4,
- X0,
- X
- X13,
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X21,
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X29,
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X36,
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X40,
- X41,
- X-4,
- X0,
- X
- X97,
- X0,
- X
- X96,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X17,
- X41,
- X-4,
- X0,
- X
- X20,
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X28,
- X41,
- X-4,
- X0,
- X
- X30,
- X41,
- X-4,
- X0,
- X
- X31,
- X41,
- X-4,
- X0,
- X
- X32,
- X41,
- X-4,
- X0,
- X
- X33,
- X41,
- X-4,
- X0,
- X
- X34,
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X8,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X15,
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X35,
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X41,
- X-4,
- X0,
- X
- X14,
- X41,
- X-4,
- X0,
- X
- X27,
- X41,
- X-4,
- X0,
- X
- X37,
- X41,
- X-4,
- X0,
- X
- X39,
- X41,
- X-4,
- X0,
- X0};
- X# define YYTYPE int
- Xstruct yywork { YYTYPE verify, advance; } yycrank[] = {
- X0,0, 0,0, 1,3, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 1,4, 1,5,
- X1,6, 1,6, 1,6, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X4,53, 4,5, 4,54, 4,54,
- X4,54, 1,4, 1,7, 1,8,
- X1,9, 1,10, 1,11, 1,12,
- X1,13, 1,14, 1,15, 1,16,
- X1,17, 1,18, 1,19, 1,20,
- X1,21, 1,22, 1,23, 4,53,
- X6,54, 12,68, 6,55, 6,55,
- X6,55, 1,23, 0,0, 1,24,
- X1,25, 1,26, 1,27, 1,28,
- X1,29, 7,56, 1,10, 9,60,
- X9,60, 11,67, 1,10, 1,10,
- X16,74, 15,72, 15,72, 6,54,
- X12,69, 1,30, 27,95, 17,75,
- X26,93, 26,94, 28,96, 28,97,
- X33,99, 57,0, 1,10, 0,0,
- X0,0, 1,10, 9,60, 19,77,
- X1,31, 1,3, 1,32, 1,33,
- X15,72, 17,76, 1,34, 1,35,
- X1,36, 1,37, 1,38, 1,39,
- X1,40, 80,143, 1,41, 19,78,
- X19,79, 1,42, 21,82, 1,10,
- X0,0, 50,125, 0,0, 1,43,
- X1,44, 1,45, 1,46, 1,47,
- X1,48, 40,112, 35,101, 15,73,
- X1,49, 1,50, 1,51, 1,52,
- X2,7, 21,83, 2,9, 30,57,
- X2,11, 2,12, 34,100, 41,113,
- X30,98, 2,16, 36,102, 2,18,
- X2,19, 2,20, 2,21, 41,114,
- X37,105, 36,103, 38,107, 39,110,
- X38,108, 42,115, 39,111, 43,116,
- X36,104, 2,24, 37,106, 2,26,
- X2,27, 2,28, 38,109, 9,61,
- X45,121, 46,122, 20,80, 9,62,
- X20,81, 20,81, 20,81, 20,81,
- X20,81, 20,81, 20,81, 20,81,
- X20,81, 20,81, 47,123, 48,124,
- X50,126, 61,130, 54,54, 61,131,
- X62,132, 55,54, 93,151, 55,55,
- X55,55, 55,55, 2,31, 15,73,
- X2,32, 2,33, 44,117, 44,118,
- X97,152, 2,35, 2,36, 2,37,
- X2,38, 87,148, 2,40, 100,153,
- X2,41, 54,54, 44,119, 2,42,
- X55,54, 44,120, 70,0, 101,154,
- X102,155, 2,43, 2,44, 2,45,
- X2,46, 2,47, 2,48, 8,57,
- X103,156, 88,148, 2,49, 2,50,
- X104,157, 2,52, 98,0, 8,57,
- X8,0, 8,57, 8,57, 8,57,
- X59,57, 87,148, 105,158, 86,146,
- X91,150, 86,146, 106,159, 70,140,
- X86,147, 86,147, 86,147, 86,147,
- X86,147, 86,147, 86,147, 86,147,
- X86,147, 86,147, 8,57, 107,160,
- X8,58, 88,148, 8,57, 98,0,
- X59,127, 8,57, 8,57, 8,57,
- X92,150, 8,57, 108,161, 109,162,
- X110,163, 111,164, 8,57, 8,57,
- X91,150, 112,165, 59,128, 59,128,
- X114,166, 115,167, 8,57, 117,170,
- X116,168, 8,57, 118,171, 119,173,
- X120,175, 8,57, 121,176, 8,57,
- X124,181, 122,177, 127,0, 8,57,
- X8,57, 116,169, 10,63, 10,63,
- X92,150, 131,185, 8,57, 122,178,
- X119,174, 118,172, 123,179, 130,183,
- X134,191, 123,180, 128,0, 8,57,
- X153,203, 154,204, 8,57, 155,205,
- X156,206, 130,184, 8,59, 157,207,
- X157,208, 10,63, 158,209, 8,57,
- X159,210, 10,64, 160,211, 161,212,
- X8,57, 162,213, 10,65, 10,66,
- X163,214, 165,215, 167,216, 168,217,
- X8,57, 10,64, 10,64, 10,64,
- X10,64, 10,64, 10,64, 10,64,
- X10,64, 10,64, 10,64, 169,218,
- X128,182, 128,182, 59,129, 8,57,
- X170,219, 171,220, 10,64, 10,64,
- X10,64, 10,64, 10,64, 10,64,
- X10,64, 10,64, 10,64, 10,64,
- X10,64, 10,64, 10,64, 10,64,
- X10,64, 10,64, 10,64, 10,64,
- X10,64, 10,64, 10,64, 10,64,
- X10,64, 10,64, 10,64, 10,64,
- X172,221, 173,222, 174,223, 175,224,
- X10,64, 176,225, 10,64, 10,64,
- X10,64, 10,64, 10,64, 10,64,
- X10,64, 10,64, 10,64, 10,64,
- X10,64, 10,64, 10,64, 10,64,
- X10,64, 10,64, 10,64, 10,64,
- X10,64, 10,64, 10,64, 10,64,
- X10,64, 10,64, 10,64, 10,64,
- X13,70, 177,226, 178,227, 179,228,
- X180,229, 181,230, 129,0, 182,0,
- X13,70, 13,0, 13,70, 13,70,
- X13,70, 84,84, 84,84, 84,84,
- X84,84, 84,84, 84,84, 84,84,
- X84,84, 84,85, 84,85, 183,231,
- X184,231, 185,232, 190,189, 190,189,
- X194,237, 187,0, 197,0, 13,70,
- X188,0, 13,70, 204,238, 13,70,
- X207,239, 208,240, 13,0, 13,70,
- X13,70, 84,87, 13,70, 209,241,
- X129,129, 129,129, 210,242, 13,70,
- X13,70, 190,189, 84,88, 141,0,
- X129,129, 213,243, 147,145, 13,70,
- X214,244, 217,245, 13,70, 197,140,
- X147,145, 129,129, 13,70, 149,201,
- X13,70, 129,129, 129,129, 218,246,
- X13,70, 13,70, 219,247, 220,248,
- X149,202, 84,87, 221,249, 13,70,
- X222,250, 223,251, 224,252, 225,253,
- X141,140, 226,254, 84,88, 227,255,
- X13,70, 229,256, 147,145, 13,70,
- X230,257, 141,197, 141,197, 13,71,
- X147,145, 129,129, 200,145, 149,201,
- X13,70, 232,258, 129,129, 233,0,
- X200,145, 13,70, 195,195, 195,195,
- X149,202, 234,0, 240,262, 241,263,
- X22,81, 13,70, 22,84, 22,84,
- X22,84, 22,84, 22,84, 22,84,
- X22,84, 22,84, 22,85, 22,85,
- X187,233, 242,264, 188,234, 243,265,
- X13,70, 195,195, 200,145, 245,266,
- X246,267, 248,268, 249,269, 22,86,
- X200,145, 250,270, 195,196, 201,201,
- X251,271, 195,196, 22,87, 252,272,
- X253,273, 255,274, 256,275, 259,0,
- X201,202, 262,277, 263,278, 22,88,
- X266,279, 273,280, 22,89, 23,81,
- X274,281, 23,90, 23,90, 23,90,
- X23,90, 23,90, 23,90, 23,90,
- X23,90, 23,90, 23,90, 22,86,
- X275,282, 277,283, 279,284, 201,201,
- X63,63, 63,63, 22,87, 260,260,
- X260,260, 281,285, 23,86, 282,286,
- X201,202, 0,0, 0,0, 22,88,
- X0,0, 23,91, 22,89, 0,0,
- X261,261, 261,261, 0,0, 0,0,
- X0,0, 0,0, 23,92, 63,63,
- X0,0, 0,0, 260,260, 63,133,
- X234,259, 0,0, 0,0, 63,134,
- X63,65, 63,135, 260,261, 0,0,
- X0,0, 0,0, 23,86, 261,261,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 23,91, 0,0, 261,276,
- X0,0, 0,0, 195,196, 0,0,
- X0,0, 0,0, 23,92, 0,0,
- X63,133, 63,133, 63,133, 63,133,
- X63,133, 63,133, 63,133, 63,133,
- X63,133, 63,133, 63,133, 63,133,
- X63,133, 63,133, 63,133, 63,133,
- X63,133, 63,133, 63,133, 63,133,
- X63,133, 63,133, 63,133, 63,133,
- X63,133, 63,133, 0,0, 0,0,
- X0,0, 0,0, 63,133, 0,0,
- X63,133, 63,133, 63,133, 63,133,
- X63,133, 63,133, 63,133, 63,133,
- X63,133, 63,133, 63,133, 63,133,
- X63,133, 63,133, 63,133, 63,133,
- X63,133, 63,133, 63,133, 63,133,
- X63,133, 63,133, 63,133, 63,133,
- X63,133, 63,133, 65,65, 65,65,
- X144,199, 0,0, 144,199, 0,0,
- X0,0, 144,200, 144,200, 144,200,
- X144,200, 144,200, 144,200, 144,200,
- X144,200, 144,200, 144,200, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 65,65, 0,0, 0,0,
- X0,0, 65,136, 85,81, 0,0,
- X85,85, 85,85, 85,85, 85,85,
- X85,85, 85,85, 85,85, 85,85,
- X85,85, 85,85, 146,147, 146,147,
- X146,147, 146,147, 146,147, 146,147,
- X146,147, 146,147, 146,147, 146,147,
- X0,0, 85,86, 0,0, 0,0,
- X0,0, 0,0, 65,136, 65,136,
- X65,136, 65,136, 65,136, 65,136,
- X65,136, 65,136, 65,136, 65,136,
- X65,136, 65,136, 65,136, 65,136,
- X65,136, 65,136, 65,136, 65,136,
- X65,136, 65,136, 65,136, 65,136,
- X65,136, 65,136, 65,136, 65,136,
- X0,0, 85,86, 0,0, 0,0,
- X65,136, 0,0, 65,136, 65,136,
- X65,136, 65,136, 65,136, 65,136,
- X65,136, 65,136, 65,136, 65,136,
- X65,136, 65,136, 65,136, 65,136,
- X65,136, 65,136, 65,136, 65,136,
- X65,136, 65,136, 65,136, 65,136,
- X65,136, 65,136, 65,136, 65,136,
- X66,66, 66,66, 199,200, 199,200,
- X199,200, 199,200, 199,200, 199,200,
- X199,200, 199,200, 199,200, 199,200,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 66,66,
- X0,0, 0,0, 0,0, 66,137,
- X0,0, 0,0, 0,0, 66,138,
- X66,139, 66,66, 0,0, 66,139,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X66,137, 66,137, 66,137, 66,137,
- X66,137, 66,137, 66,137, 66,137,
- X66,137, 66,137, 66,137, 66,137,
- X66,137, 66,137, 66,137, 66,137,
- X66,137, 66,137, 66,137, 66,137,
- X66,137, 66,137, 66,137, 66,137,
- X66,137, 66,137, 0,0, 0,0,
- X0,0, 0,0, 66,137, 0,0,
- X66,137, 66,137, 66,137, 66,137,
- X66,137, 66,137, 66,137, 66,137,
- X66,137, 66,137, 66,137, 66,137,
- X66,137, 66,137, 66,137, 66,137,
- X66,137, 66,137, 66,137, 66,137,
- X66,137, 66,137, 66,137, 66,137,
- X66,137, 66,137, 71,70, 0,0,
- X0,0, 0,0, 81,81, 81,81,
- X81,81, 81,81, 81,81, 81,81,
- X81,81, 81,81, 81,81, 81,81,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 71,70, 81,144,
- X81,145, 0,0, 0,0, 71,70,
- X0,0, 0,0, 81,145, 136,195,
- X136,195, 0,0, 0,0, 0,0,
- X71,141, 71,141, 71,141, 71,141,
- X71,141, 71,141, 71,141, 71,141,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 71,70,
- X0,0, 0,0, 136,195, 81,144,
- X81,145, 0,0, 0,0, 0,0,
- X0,0, 0,0, 81,145, 136,196,
- X0,0, 0,0, 136,196, 0,0,
- X0,0, 0,0, 136,136, 136,136,
- X136,136, 136,136, 136,136, 136,136,
- X136,136, 136,136, 136,136, 136,136,
- X71,70, 0,0, 0,0, 0,0,
- X0,0, 71,70, 71,70, 0,0,
- X0,0, 0,0, 71,70, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 71,70, 0,0,
- X0,0, 0,0, 71,70, 0,0,
- X71,70, 0,0, 71,70, 0,0,
- X71,142, 89,149, 89,149, 89,149,
- X89,149, 89,149, 89,149, 89,149,
- X89,149, 89,149, 89,149, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 89,149, 89,149,
- X89,149, 89,149, 89,149, 89,149,
- X0,0, 132,186, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 132,186, 132,0, 132,186,
- X132,186, 132,186, 0,0, 136,196,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 89,149, 89,149,
- X89,149, 89,149, 89,149, 89,149,
- X132,186, 0,0, 132,186, 0,0,
- X132,186, 0,0, 0,0, 132,186,
- X132,186, 132,186, 0,0, 132,186,
- X0,0, 0,0, 0,0, 0,0,
- X132,186, 132,186, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X132,186, 0,0, 0,0, 132,186,
- X0,0, 0,0, 0,0, 132,186,
- X0,0, 132,186, 0,0, 0,0,
- X0,0, 132,186, 132,186, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X132,186, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 132,186, 0,0, 0,0,
- X132,186, 0,0, 133,189, 133,189,
- X132,186, 0,0, 0,0, 0,0,
- X0,0, 132,186, 0,0, 0,0,
- X132,187, 0,0, 132,186, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 132,188, 0,0,
- X0,0, 133,189, 132,186, 0,0,
- X132,186, 133,133, 132,186, 0,0,
- X0,0, 0,0, 133,190, 0,0,
- X0,0, 132,186, 0,0, 0,0,
- X0,0, 133,133, 133,133, 133,133,
- X133,133, 133,133, 133,133, 133,133,
- X133,133, 133,133, 133,133, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 133,133, 133,133,
- X133,133, 133,133, 133,133, 133,133,
- X133,133, 133,133, 133,133, 133,133,
- X133,133, 133,133, 133,133, 133,133,
- X133,133, 133,133, 133,133, 133,133,
- X133,133, 133,133, 133,133, 133,133,
- X133,133, 133,133, 133,133, 133,133,
- X0,0, 0,0, 0,0, 0,0,
- X133,133, 0,0, 133,133, 133,133,
- X133,133, 133,133, 133,133, 133,133,
- X133,133, 133,133, 133,133, 133,133,
- X133,133, 133,133, 133,133, 133,133,
- X133,133, 133,133, 133,133, 133,133,
- X133,133, 133,133, 133,133, 133,133,
- X133,133, 133,133, 133,133, 133,133,
- X135,192, 135,192, 0,0, 235,260,
- X235,260, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 135,192,
- X0,0, 0,0, 235,260, 135,193,
- X0,0, 0,0, 0,0, 135,194,
- X0,0, 135,135, 235,261, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 235,235, 235,235,
- X235,235, 235,235, 235,235, 235,235,
- X235,235, 235,235, 235,235, 235,235,
- X0,0, 0,0, 0,0, 0,0,
- X135,193, 135,193, 135,193, 135,193,
- X135,193, 135,193, 135,193, 135,193,
- X135,193, 135,193, 135,193, 135,193,
- X135,193, 135,193, 135,193, 135,193,
- X135,193, 135,193, 135,193, 135,193,
- X135,193, 135,193, 135,193, 135,193,
- X135,193, 135,193, 0,0, 0,0,
- X0,0, 0,0, 135,193, 0,0,
- X135,193, 135,193, 135,193, 135,193,
- X135,193, 135,193, 135,193, 135,193,
- X135,193, 135,193, 135,193, 135,193,
- X135,193, 135,193, 135,193, 135,193,
- X135,193, 135,193, 135,193, 135,193,
- X135,193, 135,193, 135,193, 135,193,
- X135,193, 135,193, 137,137, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 137,137, 137,137,
- X137,137, 137,137, 137,137, 137,137,
- X137,137, 137,137, 137,137, 137,137,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 137,137,
- X137,137, 137,137, 137,137, 137,137,
- X137,137, 137,137, 137,137, 137,137,
- X137,137, 137,137, 137,137, 137,137,
- X137,137, 137,137, 137,137, 137,137,
- X137,137, 137,137, 137,137, 137,137,
- X137,137, 137,137, 137,137, 137,137,
- X137,137, 0,0, 0,0, 0,0,
- X0,0, 137,137, 0,0, 137,137,
- X137,137, 137,137, 137,137, 137,137,
- X137,137, 137,137, 137,137, 137,137,
- X137,137, 137,137, 137,137, 137,137,
- X137,137, 137,137, 137,137, 137,137,
- X137,137, 137,137, 137,137, 137,137,
- X137,137, 137,137, 137,137, 137,137,
- X137,137, 138,138, 138,138, 236,189,
- X236,189, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X138,138, 0,0, 236,189, 0,0,
- X138,137, 0,0, 0,0, 0,0,
- X138,138, 0,0, 138,138, 236,190,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 236,236, 236,236,
- X236,236, 236,236, 236,236, 236,236,
- X236,236, 236,236, 236,236, 236,236,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 138,137, 138,137, 138,137,
- X138,137, 138,137, 138,137, 138,137,
- X138,137, 138,137, 138,137, 138,137,
- X138,137, 138,137, 138,137, 138,137,
- X138,137, 138,137, 138,137, 138,137,
- X138,137, 138,137, 138,137, 138,137,
- X138,137, 138,137, 138,137, 0,0,
- X0,0, 0,0, 0,0, 138,137,
- X0,0, 138,137, 138,137, 138,137,
- X138,137, 138,137, 138,137, 138,137,
- X138,137, 138,137, 138,137, 138,137,
- X138,137, 138,137, 138,137, 138,137,
- X138,137, 138,137, 138,137, 138,137,
- X138,137, 138,137, 138,137, 138,137,
- X138,137, 138,137, 138,137, 142,198,
- X142,198, 142,198, 142,198, 142,198,
- X142,198, 142,198, 142,198, 142,198,
- X142,198, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X142,198, 142,198, 142,198, 142,198,
- X142,198, 142,198, 0,0, 186,186,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 186,186,
- X186,0, 186,186, 186,186, 186,186,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X198,0, 0,0, 0,0, 0,0,
- X142,198, 142,198, 142,198, 142,198,
- X142,198, 142,198, 186,186, 0,0,
- X186,186, 0,0, 186,186, 0,0,
- X0,0, 186,186, 186,186, 186,186,
- X0,0, 186,186, 0,0, 0,0,
- X0,0, 0,0, 186,186, 186,186,
- X0,0, 198,140, 0,0, 0,0,
- X0,0, 0,0, 186,186, 0,0,
- X0,0, 186,186, 198,198, 198,198,
- X0,0, 186,186, 0,0, 186,186,
- X0,0, 0,0, 198,198, 186,186,
- X186,186, 189,189, 189,189, 0,0,
- X0,0, 0,0, 186,186, 198,198,
- X0,0, 0,0, 0,0, 198,198,
- X198,198, 0,0, 0,0, 186,186,
- X0,0, 0,0, 186,186, 0,0,
- X0,0, 0,0, 186,186, 0,0,
- X189,189, 0,0, 0,0, 186,186,
- X189,235, 0,0, 0,0, 0,0,
- X186,186, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 198,198,
- X186,186, 0,0, 0,0, 0,0,
- X198,198, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 186,186,
- X0,0, 189,235, 189,235, 189,235,
- X189,235, 189,235, 189,235, 189,235,
- X189,235, 189,235, 189,235, 189,235,
- X189,235, 189,235, 189,235, 189,235,
- X189,235, 189,235, 189,235, 189,235,
- X189,235, 189,235, 189,235, 189,235,
- X189,235, 189,235, 189,235, 0,0,
- X0,0, 0,0, 191,236, 189,235,
- X0,0, 189,235, 189,235, 189,235,
- X189,235, 189,235, 189,235, 189,235,
- X189,235, 189,235, 189,235, 189,235,
- X189,235, 189,235, 189,235, 189,235,
- X189,235, 189,235, 189,235, 189,235,
- X189,235, 189,235, 189,235, 189,235,
- X189,235, 189,235, 189,235, 191,236,
- X191,236, 191,236, 191,236, 191,236,
- X191,236, 191,236, 191,236, 191,236,
- X191,236, 191,236, 191,236, 191,236,
- X191,236, 191,236, 191,236, 191,236,
- X191,236, 191,236, 191,236, 191,236,
- X191,236, 191,236, 191,236, 191,236,
- X191,236, 0,0, 0,0, 0,0,
- X0,0, 191,236, 0,0, 191,236,
- X191,236, 191,236, 191,236, 191,236,
- X191,236, 191,236, 191,236, 191,236,
- X191,236, 191,236, 191,236, 191,236,
- X191,236, 191,236, 191,236, 191,236,
- X191,236, 191,236, 191,236, 191,236,
- X191,236, 191,236, 191,236, 191,236,
- X191,236, 192,192, 192,192, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X192,192, 0,0, 0,0, 0,0,
- X192,193, 0,0, 0,0, 0,0,
- X192,194, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 192,193, 192,193, 192,193,
- X192,193, 192,193, 192,193, 192,193,
- X192,193, 192,193, 192,193, 192,193,
- X192,193, 192,193, 192,193, 192,193,
- X192,193, 192,193, 192,193, 192,193,
- X192,193, 192,193, 192,193, 192,193,
- X192,193, 192,193, 192,193, 0,0,
- X0,0, 0,0, 0,0, 192,193,
- X0,0, 192,193, 192,193, 192,193,
- X192,193, 192,193, 192,193, 192,193,
- X192,193, 192,193, 192,193, 192,193,
- X192,193, 192,193, 192,193, 192,193,
- X192,193, 192,193, 192,193, 192,193,
- X192,193, 192,193, 192,193, 192,193,
- X192,193, 192,193, 192,193, 193,193,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 193,193,
- X193,193, 193,193, 193,193, 193,193,
- X193,193, 193,193, 193,193, 193,193,
- X193,193, 0,0, 0,0, 0,0,
- X0,0, 0,0, 0,0, 0,0,
- X193,193, 193,193, 193,193, 193,193,
- X193,193, 193,193, 193,193, 193,193,
- X193,193, 193,193, 193,193, 193,193,
- X193,193, 193,193, 193,193, 193,193,
- X193,193, 193,193, 193,193, 193,193,
- X193,193, 193,193, 193,193, 193,193,
- X193,193, 193,193, 0,0, 0,0,
- X0,0, 237,193, 193,193, 0,0,
- X193,193, 193,193, 193,193, 193,193,
- X193,193, 193,193, 193,193, 193,193,
- X193,193, 193,193, 193,193, 193,193,
- X193,193, 193,193, 193,193, 193,193,
- X193,193, 193,193, 193,193, 193,193,
- X193,193, 193,193, 193,193, 193,193,
- X193,193, 193,193, 237,193, 237,193,
- X237,193, 237,193, 237,193, 237,193,
- X237,193, 237,193, 237,193, 237,193,
- X237,193, 237,193, 237,193, 237,193,
- X237,193, 237,193, 237,193, 237,193,
- X237,193, 237,193, 237,193, 237,193,
- X237,193, 237,193, 237,193, 237,193,
- X0,0, 0,0, 0,0, 0,0,
- X237,193, 0,0, 237,193, 237,193,
- X237,193, 237,193, 237,193, 237,193,
- X237,193, 237,193, 237,193, 237,193,
- X237,193, 237,193, 237,193, 237,193,
- X237,193, 237,193, 237,193, 237,193,
- X237,193, 237,193, 237,193, 237,193,
- X237,193, 237,193, 237,193, 237,193,
- X0,0};
- Xstruct yysvf yysvec[] = {
- X0, 0, 0,
- Xyycrank+-1, 0, 0,
- Xyycrank+-95, yysvec+1, 0,
- Xyycrank+0, 0, yyvstop+1,
- Xyycrank+19, 0, yyvstop+3,
- Xyycrank+0, 0, yyvstop+6,
- Xyycrank+43, yysvec+4, yyvstop+8,
- Xyycrank+4, 0, yyvstop+11,
- Xyycrank+-214, 0, yyvstop+14,
- Xyycrank+58, 0, yyvstop+16,
- Xyycrank+277, 0, yyvstop+21,
- Xyycrank+8, 0, yyvstop+25,
- Xyycrank+15, 0, yyvstop+28,
- Xyycrank+-399, 0, yyvstop+31,
- Xyycrank+0, 0, yyvstop+33,
- Xyycrank+64, 0, yyvstop+36,
- Xyycrank+11, 0, yyvstop+40,
- Xyycrank+36, 0, yyvstop+43,
- Xyycrank+0, 0, yyvstop+46,
- Xyycrank+46, 0, yyvstop+49,
- Xyycrank+116, 0, yyvstop+52,
- Xyycrank+68, 0, yyvstop+55,
- Xyycrank+462, 0, yyvstop+58,
- Xyycrank+505, 0, yyvstop+61,
- Xyycrank+0, 0, yyvstop+64,
- Xyycrank+0, 0, yyvstop+67,
- Xyycrank+20, 0, yyvstop+70,
- Xyycrank+17, 0, yyvstop+73,
- Xyycrank+21, 0, yyvstop+76,
- Xyycrank+0, 0, yyvstop+79,
- Xyycrank+97, yysvec+10, yyvstop+82,
- Xyycrank+0, 0, yyvstop+86,
- Xyycrank+0, 0, yyvstop+89,
- Xyycrank+23, 0, yyvstop+92,
- Xyycrank+17, yysvec+10, yyvstop+95,
- Xyycrank+8, yysvec+10, yyvstop+99,
- Xyycrank+41, yysvec+10, yyvstop+103,
- Xyycrank+43, yysvec+10, yyvstop+107,
- Xyycrank+38, yysvec+10, yyvstop+111,
- Xyycrank+39, yysvec+10, yyvstop+115,
- Xyycrank+10, yysvec+10, yyvstop+119,
- Xyycrank+33, yysvec+10, yyvstop+123,
- Xyycrank+38, yysvec+10, yyvstop+127,
- Xyycrank+50, yysvec+10, yyvstop+131,
- Xyycrank+86, yysvec+10, yyvstop+135,
- Xyycrank+39, yysvec+10, yyvstop+139,
- Xyycrank+51, yysvec+10, yyvstop+143,
- Xyycrank+63, yysvec+10, yyvstop+147,
- Xyycrank+71, yysvec+10, yyvstop+151,
- Xyycrank+0, 0, yyvstop+155,
- Xyycrank+52, 0, yyvstop+158,
- Xyycrank+0, 0, yyvstop+161,
- Xyycrank+0, 0, yyvstop+164,
- Xyycrank+0, yysvec+4, yyvstop+167,
- Xyycrank+169, yysvec+4, 0,
- Xyycrank+172, yysvec+4, yyvstop+169,
- Xyycrank+0, 0, yyvstop+171,
- Xyycrank+-75, yysvec+8, 0,
- Xyycrank+0, 0, yyvstop+173,
- Xyycrank+-218, yysvec+8, 0,
- Xyycrank+0, yysvec+9, 0,
- Xyycrank+69, 0, 0,
- Xyycrank+78, 0, 0,
- Xyycrank+559, 0, 0,
- Xyycrank+0, yysvec+10, yyvstop+175,
- Xyycrank+673, 0, 0,
- Xyycrank+787, 0, 0,
- Xyycrank+0, 0, yyvstop+178,
- Xyycrank+0, 0, yyvstop+180,
- Xyycrank+0, 0, yyvstop+182,
- Xyycrank+-196, yysvec+13, 0,
- Xyycrank+900, 0, 0,
- Xyycrank+0, yysvec+15, 0,
- Xyycrank+0, 0, yyvstop+184,
- Xyycrank+0, 0, yyvstop+186,
- Xyycrank+0, 0, yyvstop+188,
- Xyycrank+0, 0, yyvstop+190,
- Xyycrank+0, 0, yyvstop+192,
- Xyycrank+0, 0, yyvstop+194,
- Xyycrank+0, 0, yyvstop+196,
- Xyycrank+59, 0, 0,
- Xyycrank+866, 0, yyvstop+198,
- Xyycrank+0, 0, yyvstop+200,
- Xyycrank+0, 0, yyvstop+202,
- Xyycrank+365, yysvec+23, yyvstop+204,
- Xyycrank+664, 0, 0,
- Xyycrank+188, 0, 0,
- Xyycrank+112, 0, yyvstop+206,
- Xyycrank+141, 0, yyvstop+208,
- Xyycrank+973, 0, 0,
- Xyycrank+0, yysvec+23, yyvstop+210,
- Xyycrank+147, 0, yyvstop+212,
- Xyycrank+180, 0, yyvstop+214,
- Xyycrank+121, 0, yyvstop+216,
- Xyycrank+0, 0, yyvstop+218,
- Xyycrank+0, 0, yyvstop+220,
- Xyycrank+0, 0, yyvstop+222,
- Xyycrank+131, 0, yyvstop+224,
- Xyycrank+-212, yysvec+13, 0,
- Xyycrank+0, 0, yyvstop+226,
- Xyycrank+83, yysvec+10, yyvstop+228,
- Xyycrank+106, yysvec+10, yyvstop+231,
- Xyycrank+93, yysvec+10, yyvstop+234,
- Xyycrank+119, yysvec+10, yyvstop+237,
- Xyycrank+110, yysvec+10, yyvstop+240,
- Xyycrank+128, yysvec+10, yyvstop+243,
- Xyycrank+117, yysvec+10, yyvstop+246,
- Xyycrank+132, yysvec+10, yyvstop+250,
- Xyycrank+141, yysvec+10, yyvstop+253,
- Xyycrank+143, yysvec+10, yyvstop+256,
- Xyycrank+149, yysvec+10, yyvstop+259,
- Xyycrank+147, yysvec+10, yyvstop+262,
- Xyycrank+149, yysvec+10, yyvstop+265,
- Xyycrank+0, yysvec+10, yyvstop+268,
- Xyycrank+152, yysvec+10, yyvstop+272,
- Xyycrank+159, yysvec+10, yyvstop+275,
- Xyycrank+169, yysvec+10, yyvstop+278,
- Xyycrank+160, yysvec+10, yyvstop+281,
- Xyycrank+171, yysvec+10, yyvstop+284,
- Xyycrank+178, yysvec+10, yyvstop+287,
- Xyycrank+171, yysvec+10, yyvstop+290,
- Xyycrank+166, yysvec+10, yyvstop+293,
- Xyycrank+176, yysvec+10, yyvstop+296,
- Xyycrank+189, yysvec+10, yyvstop+299,
- Xyycrank+175, yysvec+10, yyvstop+302,
- Xyycrank+0, 0, yyvstop+305,
- Xyycrank+0, 0, yyvstop+307,
- Xyycrank+-272, yysvec+8, yyvstop+309,
- Xyycrank+-288, yysvec+8, 0,
- Xyycrank+-396, yysvec+8, 0,
- Xyycrank+190, 0, 0,
- Xyycrank+189, 0, 0,
- Xyycrank+-1044, 0, yyvstop+311,
- Xyycrank+1125, 0, yyvstop+313,
- Xyycrank+254, 0, 0,
- Xyycrank+1239, yysvec+66, 0,
- Xyycrank+934, yysvec+65, 0,
- Xyycrank+1326, 0, yyvstop+315,
- Xyycrank+1440, 0, 0,
- Xyycrank+0, 0, yyvstop+317,
- Xyycrank+0, 0, yyvstop+319,
- Xyycrank+-441, yysvec+13, 0,
- Xyycrank+1515, 0, 0,
- Xyycrank+0, 0, yyvstop+321,
- Xyycrank+641, 0, 0,
- Xyycrank+0, 0, yyvstop+323,
- Xyycrank+674, 0, 0,
- Xyycrank+384, yysvec+146, yyvstop+325,
- Xyycrank+0, 0, yyvstop+327,
- Xyycrank+387, yysvec+89, yyvstop+329,
- Xyycrank+0, 0, yyvstop+331,
- Xyycrank+0, 0, yyvstop+333,
- Xyycrank+0, 0, yyvstop+335,
- Xyycrank+189, yysvec+10, yyvstop+337,
- Xyycrank+204, yysvec+10, yyvstop+340,
- Xyycrank+202, yysvec+10, yyvstop+343,
- Xyycrank+190, yysvec+10, yyvstop+346,
- Xyycrank+192, yysvec+10, yyvstop+349,
- Xyycrank+213, yysvec+10, yyvstop+352,
- Xyycrank+214, yysvec+10, yyvstop+355,
- Xyycrank+213, yysvec+10, yyvstop+358,
- Xyycrank+206, yysvec+10, yyvstop+361,
- Xyycrank+216, yysvec+10, yyvstop+364,
- Xyycrank+223, yysvec+10, yyvstop+367,
- Xyycrank+0, yysvec+10, yyvstop+370,
- Xyycrank+210, yysvec+10, yyvstop+374,
- Xyycrank+0, yysvec+10, yyvstop+377,
- Xyycrank+219, yysvec+10, yyvstop+381,
- Xyycrank+218, yysvec+10, yyvstop+384,
- Xyycrank+218, yysvec+10, yyvstop+387,
- Xyycrank+226, yysvec+10, yyvstop+390,
- Xyycrank+231, yysvec+10, yyvstop+393,
- Xyycrank+267, yysvec+10, yyvstop+396,
- Xyycrank+253, yysvec+10, yyvstop+399,
- Xyycrank+253, yysvec+10, yyvstop+402,
- Xyycrank+255, yysvec+10, yyvstop+405,
- Xyycrank+272, yysvec+10, yyvstop+408,
- Xyycrank+290, yysvec+10, yyvstop+411,
- Xyycrank+297, yysvec+10, yyvstop+414,
- Xyycrank+303, yysvec+10, yyvstop+417,
- Xyycrank+307, yysvec+10, yyvstop+420,
- Xyycrank+297, yysvec+10, yyvstop+423,
- Xyycrank+-397, yysvec+8, 0,
- Xyycrank+321, 0, 0,
- Xyycrank+323, 0, 0,
- Xyycrank+320, 0, 0,
- Xyycrank+-1586, 0, yyvstop+426,
- Xyycrank+-419, yysvec+186, yyvstop+428,
- Xyycrank+-422, yysvec+186, yyvstop+430,
- Xyycrank+1648, 0, 0,
- Xyycrank+417, 0, 0,
- Xyycrank+1706, 0, 0,
- Xyycrank+1820, yysvec+66, 0,
- Xyycrank+1907, yysvec+133, yyvstop+432,
- Xyycrank+386, yysvec+138, 0,
- Xyycrank+493, 0, 0,
- Xyycrank+0, 0, yyvstop+434,
- Xyycrank+-420, yysvec+13, 0,
- Xyycrank+-1598, yysvec+13, 0,
- Xyycrank+750, 0, 0,
- Xyycrank+424, yysvec+199, yyvstop+436,
- Xyycrank+459, 0, yyvstop+438,
- Xyycrank+0, yysvec+201, yyvstop+440,
- Xyycrank+0, yysvec+10, yyvstop+442,
- Xyycrank+327, yysvec+10, yyvstop+446,
- Xyycrank+0, yysvec+10, yyvstop+449,
- Xyycrank+0, yysvec+10, yyvstop+453,
- Xyycrank+320, yysvec+10, yyvstop+457,
- Xyycrank+332, yysvec+10, yyvstop+460,
- Xyycrank+326, yysvec+10, yyvstop+463,
- Xyycrank+338, yysvec+10, yyvstop+466,
- Xyycrank+0, yysvec+10, yyvstop+469,
- Xyycrank+0, yysvec+10, yyvstop+473,
- Xyycrank+339, yysvec+10, yyvstop+477,
- Xyycrank+340, yysvec+10, yyvstop+480,
- Xyycrank+0, yysvec+10, yyvstop+483,
- Xyycrank+0, yysvec+10, yyvstop+487,
- Xyycrank+342, yysvec+10, yyvstop+491,
- Xyycrank+353, yysvec+10, yyvstop+494,
- Xyycrank+354, yysvec+10, yyvstop+497,
- Xyycrank+370, yysvec+10, yyvstop+500,
- Xyycrank+363, yysvec+10, yyvstop+503,
- Xyycrank+371, yysvec+10, yyvstop+506,
- Xyycrank+378, yysvec+10, yyvstop+509,
- Xyycrank+379, yysvec+10, yyvstop+512,
- Xyycrank+379, yysvec+10, yyvstop+515,
- Xyycrank+371, yysvec+10, yyvstop+518,
- Xyycrank+380, yysvec+10, yyvstop+521,
- Xyycrank+0, yysvec+10, yyvstop+524,
- Xyycrank+369, yysvec+10, yyvstop+528,
- Xyycrank+387, yysvec+10, yyvstop+531,
- Xyycrank+0, 0, yyvstop+534,
- Xyycrank+395, 0, 0,
- Xyycrank+-489, yysvec+186, yyvstop+536,
- Xyycrank+-495, yysvec+186, yyvstop+538,
- Xyycrank+1242, yysvec+189, 0,
- Xyycrank+1442, yysvec+191, 0,
- Xyycrank+1965, yysvec+138, 0,
- Xyycrank+0, yysvec+10, yyvstop+540,
- Xyycrank+0, yysvec+10, yyvstop+544,
- Xyycrank+396, yysvec+10, yyvstop+548,
- Xyycrank+399, yysvec+10, yyvstop+551,
- Xyycrank+420, yysvec+10, yyvstop+554,
- Xyycrank+413, yysvec+10, yyvstop+557,
- Xyycrank+0, yysvec+10, yyvstop+560,
- Xyycrank+411, yysvec+10, yyvstop+564,
- Xyycrank+418, yysvec+10, yyvstop+567,
- Xyycrank+0, yysvec+10, yyvstop+570,
- Xyycrank+429, yysvec+10, yyvstop+574,
- Xyycrank+428, yysvec+10, yyvstop+577,
- Xyycrank+434, yysvec+10, yyvstop+580,
- Xyycrank+420, yysvec+10, yyvstop+583,
- Xyycrank+435, yysvec+10, yyvstop+586,
- Xyycrank+439, yysvec+10, yyvstop+589,
- Xyycrank+0, yysvec+10, yyvstop+592,
- Xyycrank+431, yysvec+10, yyvstop+596,
- Xyycrank+437, yysvec+10, yyvstop+599,
- Xyycrank+0, yysvec+10, yyvstop+602,
- Xyycrank+0, 0, yyvstop+606,
- Xyycrank+-533, yysvec+186, yyvstop+608,
- Xyycrank+562, 0, 0,
- Xyycrank+575, 0, 0,
- Xyycrank+428, yysvec+10, yyvstop+610,
- Xyycrank+430, yysvec+10, yyvstop+613,
- Xyycrank+0, yysvec+10, yyvstop+616,
- Xyycrank+0, yysvec+10, yyvstop+620,
- Xyycrank+447, yysvec+10, yyvstop+624,
- Xyycrank+0, yysvec+10, yyvstop+627,
- Xyycrank+0, yysvec+10, yyvstop+631,
- Xyycrank+0, yysvec+10, yyvstop+635,
- Xyycrank+0, yysvec+10, yyvstop+639,
- Xyycrank+0, yysvec+10, yyvstop+643,
- Xyycrank+0, yysvec+10, yyvstop+647,
- Xyycrank+447, yysvec+10, yyvstop+651,
- Xyycrank+451, yysvec+10, yyvstop+654,
- Xyycrank+456, yysvec+10, yyvstop+657,
- Xyycrank+0, 0, yyvstop+660,
- Xyycrank+464, yysvec+10, yyvstop+662,
- Xyycrank+0, yysvec+10, yyvstop+665,
- Xyycrank+452, yysvec+10, yyvstop+669,
- Xyycrank+0, yysvec+10, yyvstop+672,
- Xyycrank+473, yysvec+10, yyvstop+676,
- Xyycrank+474, yysvec+10, yyvstop+679,
- Xyycrank+0, yysvec+10, yyvstop+682,
- Xyycrank+0, yysvec+10, yyvstop+686,
- Xyycrank+0, yysvec+10, yyvstop+690,
- Xyycrank+0, yysvec+10, yyvstop+694,
- X0, 0, 0};
- Xstruct yywork *yytop = yycrank+2087;
- Xstruct yysvf *yybgin = yysvec+1;
- Xchar yymatch[] = {
- X00 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
- X01 ,011 ,012 ,013 ,014 ,015 ,01 ,01 ,
- X01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
- X01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
- X040 ,01 ,'"' ,01 ,'$' ,01 ,01 ,047 ,
- X'(' ,')' ,'(' ,'+' ,')' ,'+' ,01 ,01 ,
- X'0' ,'1' ,'1' ,'1' ,'1' ,'1' ,'1' ,'1' ,
- X'8' ,'8' ,01 ,';' ,01 ,01 ,01 ,'?' ,
- X01 ,'A' ,'A' ,'A' ,'A' ,'E' ,'F' ,'$' ,
- X'$' ,'$' ,'$' ,'$' ,'L' ,'$' ,'$' ,'$' ,
- X'$' ,'$' ,'$' ,'$' ,'$' ,'U' ,'$' ,'$' ,
- X'X' ,'$' ,'$' ,01 ,0134,01 ,01 ,'$' ,
- X01 ,'a' ,'a' ,'A' ,'A' ,'E' ,'f' ,'$' ,
- X'$' ,'$' ,'$' ,'$' ,'L' ,'$' ,'n' ,'$' ,
- X'$' ,'$' ,'n' ,'$' ,'n' ,'U' ,'n' ,'$' ,
- X'X' ,'$' ,'$' ,';' ,01 ,'}' ,01 ,01 ,
- X0};
- Xchar yyextra[] = {
- X0,0,0,0,1,0,0,0,
- X0,0,0,0,0,0,0,0,
- X0,0,0,0,0,0,0,0,
- X0,0,0,0,0,0,0,0,
- X0,0,0,0,0,0,0,0,
- X0,0,0,0,0,0,0,0,
- X0,1,0,0,0,0,0,0,
- X0,0,0,0,0,0,0,0,
- X0,0,0,0,0,0,0,0,
- X0,0,0,0,0,0,0,0,
- X0,0,0,0,0,0,0,0,
- X0,0,0,0,0,0,0,0,
- X0,1,1,0,0,0,0,0,
- X0};
- X#ifndef lint
- Xstatic char ncform_sccsid[] = "@(#)ncform 1.6 88/02/08 SMI"; /* from S5R2 1.2 */
- X#endif
- X
- Xint yylineno =1;
- X# define YYU(x) x
- X# define NLSTATE yyprevious=YYNEWLINE
- Xchar yytext[YYLMAX];
- Xstruct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
- Xchar yysbuf[YYLMAX];
- Xchar *yysptr = yysbuf;
- Xint *yyfnd;
- Xextern struct yysvf *yyestate;
- Xint yyprevious = YYNEWLINE;
- Xyylook(){
- X register struct yysvf *yystate, **lsp;
- X register struct yywork *yyt;
- X struct yysvf *yyz;
- X int yych, yyfirst;
- X struct yywork *yyr;
- X# ifdef LEXDEBUG
- X int debug;
- X# endif
- X char *yylastch;
- X /* start off machines */
- X# ifdef LEXDEBUG
- X debug = 0;
- X# endif
- X yyfirst=1;
- X if (!yymorfg)
- X yylastch = yytext;
- X else {
- X yymorfg=0;
- X yylastch = yytext+yyleng;
- X }
- X for(;;){
- X lsp = yylstate;
- X yyestate = yystate = yybgin;
- X if (yyprevious==YYNEWLINE) yystate++;
- X for (;;){
- X# ifdef LEXDEBUG
- X if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1);
- X# endif
- X yyt = yystate->yystoff;
- X if(yyt == yycrank && !yyfirst){ /* may not be any transitions */
- X yyz = yystate->yyother;
- X if(yyz == 0)break;
- X if(yyz->yystoff == yycrank)break;
- X }
- X *yylastch++ = yych = input();
- X yyfirst=0;
- X tryagain:
- X# ifdef LEXDEBUG
- X if(debug){
- X fprintf(yyout,"char ");
- X allprint(yych);
- X putchar('\n');
- X }
- X# endif
- X yyr = yyt;
- X if ( (int)yyt > (int)yycrank){
- X yyt = yyr + yych;
- X if (yyt <= yytop && yyt->verify+yysvec == yystate){
- X if(yyt->advance+yysvec == YYLERR) /* error transitions */
- X {unput(*--yylastch);break;}
- X *lsp++ = yystate = yyt->advance+yysvec;
- X goto contin;
- X }
- X }
- X# ifdef YYOPTIM
- X else if((int)yyt < (int)yycrank) { /* r < yycrank */
- X yyt = yyr = yycrank+(yycrank-yyt);
- X# ifdef LEXDEBUG
- X if(debug)fprintf(yyout,"compressed state\n");
- X# endif
- X yyt = yyt + yych;
- X if(yyt <= yytop && yyt->verify+yysvec == yystate){
- X if(yyt->advance+yysvec == YYLERR) /* error transitions */
- X {unput(*--yylastch);break;}
- X *lsp++ = yystate = yyt->advance+yysvec;
- X goto contin;
- X }
- X yyt = yyr + YYU(yymatch[yych]);
- X# ifdef LEXDEBUG
- X if(debug){
- X fprintf(yyout,"try fall back character ");
- X allprint(YYU(yymatch[yych]));
- X putchar('\n');
- X }
- X# endif
- X if(yyt <= yytop && yyt->verify+yysvec == yystate){
- X if(yyt->advance+yysvec == YYLERR) /* error transition */
- X {unput(*--yylastch);break;}
- X *lsp++ = yystate = yyt->advance+yysvec;
- X goto contin;
- X }
- X }
- X if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){
- X# ifdef LEXDEBUG
- X if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1);
- X# endif
- X goto tryagain;
- X }
- X# endif
- X else
- X {unput(*--yylastch);break;}
- X contin:
- X# ifdef LEXDEBUG
- X if(debug){
- X fprintf(yyout,"state %d char ",yystate-yysvec-1);
- X allprint(yych);
- X putchar('\n');
- X }
- X# endif
- X ;
- X }
- X# ifdef LEXDEBUG
- X if(debug){
- X fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1);
- X allprint(yych);
- X putchar('\n');
- X }
- X# endif
- X while (lsp-- > yylstate){
- X *yylastch-- = 0;
- X if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){
- X yyolsp = lsp;
- X if(yyextra[*yyfnd]){ /* must backup */
- X while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){
- X lsp--;
- X unput(*yylastch--);
- X }
- X }
- X yyprevious = YYU(*yylastch);
- X yylsp = lsp;
- X yyleng = yylastch-yytext+1;
- X yytext[yyleng] = 0;
- X# ifdef LEXDEBUG
- X if(debug){
- X fprintf(yyout,"\nmatch ");
- X sprint(yytext);
- X fprintf(yyout," action %d\n",*yyfnd);
- X }
- X# endif
- X return(*yyfnd++);
- X }
- X unput(*yylastch);
- X }
- X if (yytext[0] == 0 /* && feof(yyin) */)
- X {
- X yysptr=yysbuf;
- X return(0);
- X }
- X yyprevious = yytext[0] = input();
- X if (yyprevious>0)
- X output(yyprevious);
- X yylastch=yytext;
- X# ifdef LEXDEBUG
- X if(debug)putchar('\n');
- X# endif
- X }
- X }
- Xyyback(p, m)
- X int *p;
- X{
- Xif (p==0) return(0);
- Xwhile (*p)
- X {
- X if (*p++ == m)
- X return(1);
- X }
- Xreturn(0);
- X}
- X /* the following are only used in the lex library */
- Xyyinput(){
- X return(input());
- X }
- Xyyoutput(c)
- X int c; {
- X output(c);
- X }
- Xyyunput(c)
- X int c; {
- X unput(c);
- X }
- END_OF_FILE
- if test 53730 -ne `wc -c <'Ccount/lex.yy.c'`; then
- echo shar: \"'Ccount/lex.yy.c'\" unpacked with wrong size!
- fi
- # end of 'Ccount/lex.yy.c'
- fi
- echo shar: End of archive 2 \(of 3\).
- cp /dev/null ark2isdone
- MISSING=""
- for I in 1 2 3 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 3 archives.
- rm -f ark[1-9]isdone
- else
- echo You still must unpack the following archives:
- echo " " ${MISSING}
- fi
- exit 0
- exit 0 # Just in case...
-