home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume4 / fxref / fxrefa.l < prev    next >
Encoding:
Text File  |  1989-02-03  |  3.1 KB  |  188 lines

  1. /* xref.a -- f77 cross reference mapper -- from Bourne's C xref, p. 204 */
  2. %k 100
  3. %a 5000
  4. %o 5000
  5. %n 1000
  6. %e 1500
  7. %p 5000
  8. %{
  9. #undef ECHO
  10. static char SCCSID[] = "@(#)fxrefa.l    Ver. 2.17, 88/08/10 15:11:25";
  11. char *filename="-";
  12. char flag, oldflag, equals;
  13. char firstname[8];    /* where the first name encountered gets stored */
  14.  
  15. main(argc,argv)
  16.     int argc;
  17.     char *argv[];
  18. {
  19.     register int rc=0;
  20.     flag = ' ';
  21.     oldflag = ' ';
  22.     if(argc <= 1) {
  23.         yylex();
  24.     }
  25.     else {
  26.         while(argc > 1) {
  27.             if(freopen(argv[1],"r",stdin)==NULL) {
  28.                 fprintf(stderr,"%s: %s: cannot open\n",
  29.                         argv[0],argv[1]);
  30.                 rc++;
  31.             }
  32.             else {
  33.                 filename=argv[1];
  34.                 yylineno=1;
  35.                 yylex();
  36.             }
  37.             argc--;
  38.             argv++;
  39.         }
  40.     }
  41.     return(rc);
  42. }
  43. %}
  44. %%
  45. AIMAG\ *"("    ;
  46. AINT\ *"("    ;
  47. CABS\ *"("    ;
  48. CCOS\ *"("    ;
  49. CEXP\ *"("    ;
  50. CLOG\ *"("    ;
  51. CMPLX\ *"("    ;
  52. CONJG\ *"("    ;
  53. CSIN\ *"("    ;
  54. CSQRT\ *"("    ;
  55. DABS\ *"("    ;
  56. DATAN\ *"("    ;
  57. DATAN2\ *"("    ;
  58. DBLE\ *"("    ;
  59. DCOS\ *"("    ;
  60. DEXP\ *"("    ;
  61. DLOG\ *"("    ;
  62. DLOG10\ *"("    ;
  63. DMAX1\ *"("    ;
  64. DMIN1\ *"("    ;
  65. DMOD\ *"("    ;
  66. DSIGN\ *"("    ;
  67. DSIN\ *"("    ;
  68. DSQRT\ *"("    ;
  69. IABS\ *"("    ;
  70. IDIM\ *"("    ;
  71. IDINT\ *"("    ;
  72. ALOG\ *"("    ;
  73. ALOG10\ *"("    ;
  74. AMAX0\ *"("    ;
  75. AMAX1\ *"("    ;
  76. AMIN0\ *"("    ;
  77. AMIN1\ *"("    ;
  78. AMOD\ *"("    ;
  79. COMPLEX    flag = 'C';
  80. DOUBLE\ *PRECISION    flag = '#';
  81. IMPLICIT.*\n    oldflag=flag='\0';
  82. ISIGN\ *"("    ;
  83. MAX0\ *"("    ;
  84. MAX1\ *"("    ;
  85. MIN0\ *"("    ;
  86. MIN1\ *"("    ;
  87. ^[C*].*\n    ;            /* skip comments */
  88. FORMAT.*\n    oldflag=flag='\0';    /* and ignore FORMAT statements */
  89. "\'"    {
  90.     while(yyinput() != '\''); /* skip quoted material */
  91.     }
  92. ^"     "[^ ]    flag=oldflag;    /* continuation line */
  93. ABS\ *"("    ;
  94. ".AND."    ;
  95. ATAN\ *"("    ;
  96. ATAN2\ *"("    ;
  97. BACKSPACE    ;
  98. BLOCK\ *DATA    flag = 'h';
  99. CALL        flag = '@';
  100. CHAR\ *"("    ;
  101. ICHAR\ *"("    ;
  102. CHARACTER    flag = '$';
  103. CLOSE\ *"("    ;
  104. COMMON    flag = 'c';
  105. CONTINUE    ;
  106. COS\ *"("    ;
  107. ACOS\ *"("    ;
  108. DATA    flag = 'i';
  109. DIMENSION    flag = 'd';
  110. DO\ [0-9 \t,]*    flag = 'D';
  111. ELSE\ *IF[ \t]*"("    flag = '?';
  112. ELSE    ;
  113. END\ *FILE    ;
  114. END\ *IF    ;
  115. END    ;
  116. ENTRY        flag = 'h';
  117. ".EQ."    ;
  118. EQUIVALENCE\ *"("    flag =  '~';
  119. EXP\ *"("    ;
  120. EXTERNAL    flag =  'x';
  121. ".FALSE."    ;
  122. FILE    ;
  123. FLOAT\ *"("    ;
  124. FUNCTION    flag =  'h';
  125. ".GE."    ;
  126. GO\ *TO    ;
  127. ".GT."    ;
  128. IF\ *"("    flag = '?';
  129. IFIX\ *"("    ;
  130. INDEX\ *"("    ;
  131. INT\ *"("    ;
  132. NINT\ *"("    ;
  133. INTEGER    flag =  '%';
  134. INTERNAL    flag =  'p';
  135. ".LE."    ;
  136. LEN\ *"("    ;
  137. LGE\ *"("    ;
  138. LGT\ *"("    ;
  139. LLE\ *"("    ;
  140. LLT\ *"("    ;
  141. LOG\ *"("    ;
  142. LOG10\ *"("    ;
  143. LOGICAL    flag = 'L';
  144. ".LT."    ;
  145. MAX\ *"("    ;
  146. MIN\ *"("    ;
  147. MOD\ *"("    ;
  148. ".NE."    ;
  149. ".NOT."    ;
  150. ".OR."    ;
  151. OPEN\ *"("    flag = 'o';
  152. PARAMETER\ *"("    flag =  'p';
  153. PRINT    flag = '>';
  154. PROGRAM    flag = 'h';
  155. READ    flag = '<';
  156. REAL    flag =  '!';
  157. REC    ;
  158. RECL    ;
  159. RETURN    ;
  160. REWIND\ *"("    ;
  161. SAVE    ;
  162. SIGN\ *"("    ;
  163. SIN\ *"("    ;
  164. SQRT\ *"("    ;
  165. STOP    ;
  166. SUBROUTINE    flag = 'h';
  167. TANH\ *"("    ;
  168. THEN    ;
  169. TO    ;
  170. ".TRUE."    ;
  171. WRITE\ *"("    flag = '>';
  172. [0-9.]*[ED][-+0-9]*    ;    /* skip floating point numbers */
  173. [A-Z][A-Z0-9]* { if(flag)    /* at last we come to variable names! */
  174.     if(*firstname)
  175.         printf("%s\t%s\t%03d%c\n", yytext, filename, yylineno, flag);
  176.     else
  177.         strcpy(firstname, yytext); }
  178. =    equals++ ;
  179. .    ;
  180. \n    { if(*firstname) {
  181.         if(equals)
  182.         printf("%s\t%s\t%03d=\n", firstname, filename, yylineno-1);
  183.         else
  184.         printf("%s\t%s\t%03d%c\n", firstname,filename,yylineno-1,flag);
  185.         *firstname = '\0';
  186.       }
  187.       oldflag = flag; flag =  ' '; equals = 0; }
  188.