home *** CD-ROM | disk | FTP | other *** search
- /* xref.a -- f77 cross reference mapper -- from Bourne's C xref, p. 204 */
- %k 100
- %a 5000
- %o 5000
- %n 1000
- %e 1500
- %p 5000
- %{
- #undef ECHO
- static char SCCSID[] = "@(#)fxrefa.l Ver. 2.17, 88/08/10 15:11:25";
- char *filename="-";
- char flag, oldflag, equals;
- char firstname[8]; /* where the first name encountered gets stored */
-
- main(argc,argv)
- int argc;
- char *argv[];
- {
- register int rc=0;
- flag = ' ';
- oldflag = ' ';
- if(argc <= 1) {
- yylex();
- }
- else {
- while(argc > 1) {
- if(freopen(argv[1],"r",stdin)==NULL) {
- fprintf(stderr,"%s: %s: cannot open\n",
- argv[0],argv[1]);
- rc++;
- }
- else {
- filename=argv[1];
- yylineno=1;
- yylex();
- }
- argc--;
- argv++;
- }
- }
- return(rc);
- }
- %}
- %%
- AIMAG\ *"(" ;
- AINT\ *"(" ;
- CABS\ *"(" ;
- CCOS\ *"(" ;
- CEXP\ *"(" ;
- CLOG\ *"(" ;
- CMPLX\ *"(" ;
- CONJG\ *"(" ;
- CSIN\ *"(" ;
- CSQRT\ *"(" ;
- DABS\ *"(" ;
- DATAN\ *"(" ;
- DATAN2\ *"(" ;
- DBLE\ *"(" ;
- DCOS\ *"(" ;
- DEXP\ *"(" ;
- DLOG\ *"(" ;
- DLOG10\ *"(" ;
- DMAX1\ *"(" ;
- DMIN1\ *"(" ;
- DMOD\ *"(" ;
- DSIGN\ *"(" ;
- DSIN\ *"(" ;
- DSQRT\ *"(" ;
- IABS\ *"(" ;
- IDIM\ *"(" ;
- IDINT\ *"(" ;
- ALOG\ *"(" ;
- ALOG10\ *"(" ;
- AMAX0\ *"(" ;
- AMAX1\ *"(" ;
- AMIN0\ *"(" ;
- AMIN1\ *"(" ;
- AMOD\ *"(" ;
- COMPLEX flag = 'C';
- DOUBLE\ *PRECISION flag = '#';
- IMPLICIT.*\n oldflag=flag='\0';
- ISIGN\ *"(" ;
- MAX0\ *"(" ;
- MAX1\ *"(" ;
- MIN0\ *"(" ;
- MIN1\ *"(" ;
- ^[C*].*\n ; /* skip comments */
- FORMAT.*\n oldflag=flag='\0'; /* and ignore FORMAT statements */
- "\'" {
- while(yyinput() != '\''); /* skip quoted material */
- }
- ^" "[^ ] flag=oldflag; /* continuation line */
- ABS\ *"(" ;
- ".AND." ;
- ATAN\ *"(" ;
- ATAN2\ *"(" ;
- BACKSPACE ;
- BLOCK\ *DATA flag = 'h';
- CALL flag = '@';
- CHAR\ *"(" ;
- ICHAR\ *"(" ;
- CHARACTER flag = '$';
- CLOSE\ *"(" ;
- COMMON flag = 'c';
- CONTINUE ;
- COS\ *"(" ;
- ACOS\ *"(" ;
- DATA flag = 'i';
- DIMENSION flag = 'd';
- DO\ [0-9 \t,]* flag = 'D';
- ELSE\ *IF[ \t]*"(" flag = '?';
- ELSE ;
- END\ *FILE ;
- END\ *IF ;
- END ;
- ENTRY flag = 'h';
- ".EQ." ;
- EQUIVALENCE\ *"(" flag = '~';
- EXP\ *"(" ;
- EXTERNAL flag = 'x';
- ".FALSE." ;
- FILE ;
- FLOAT\ *"(" ;
- FUNCTION flag = 'h';
- ".GE." ;
- GO\ *TO ;
- ".GT." ;
- IF\ *"(" flag = '?';
- IFIX\ *"(" ;
- INDEX\ *"(" ;
- INT\ *"(" ;
- NINT\ *"(" ;
- INTEGER flag = '%';
- INTERNAL flag = 'p';
- ".LE." ;
- LEN\ *"(" ;
- LGE\ *"(" ;
- LGT\ *"(" ;
- LLE\ *"(" ;
- LLT\ *"(" ;
- LOG\ *"(" ;
- LOG10\ *"(" ;
- LOGICAL flag = 'L';
- ".LT." ;
- MAX\ *"(" ;
- MIN\ *"(" ;
- MOD\ *"(" ;
- ".NE." ;
- ".NOT." ;
- ".OR." ;
- OPEN\ *"(" flag = 'o';
- PARAMETER\ *"(" flag = 'p';
- PRINT flag = '>';
- PROGRAM flag = 'h';
- READ flag = '<';
- REAL flag = '!';
- REC ;
- RECL ;
- RETURN ;
- REWIND\ *"(" ;
- SAVE ;
- SIGN\ *"(" ;
- SIN\ *"(" ;
- SQRT\ *"(" ;
- STOP ;
- SUBROUTINE flag = 'h';
- TANH\ *"(" ;
- THEN ;
- TO ;
- ".TRUE." ;
- WRITE\ *"(" flag = '>';
- [0-9.]*[ED][-+0-9]* ; /* skip floating point numbers */
- [A-Z][A-Z0-9]* { if(flag) /* at last we come to variable names! */
- if(*firstname)
- printf("%s\t%s\t%03d%c\n", yytext, filename, yylineno, flag);
- else
- strcpy(firstname, yytext); }
- = equals++ ;
- . ;
- \n { if(*firstname) {
- if(equals)
- printf("%s\t%s\t%03d=\n", firstname, filename, yylineno-1);
- else
- printf("%s\t%s\t%03d%c\n", firstname,filename,yylineno-1,flag);
- *firstname = '\0';
- }
- oldflag = flag; flag = ' '; equals = 0; }
-