7 static char Copyright[] =
8 "@(#) Copyright (c) 1992 Jeff Hollingsworth. All rights reserved.";
10 static char rcsid[] = "@(#) $Header: /home/jaw/CVSROOT_20081103/CVSROOT/core/igen/src/scanner.l,v 1.6 1994/06/02 23:34:29 markc Exp $";
17 #define YYSTYPE union parseStack
19 extern int generatePVM;
20 extern int generateXDR;
22 #include "util/h/stringPool.h"
27 extern int emitHeader;
28 extern stringPool pool;
35 /* flex defines this as a macro (bad flex!). */
41 extern void yyerror(char *);
48 extern char *serverTypeName;
51 int getScanChar(FILE *file)
56 ret = fgets(line, MAX, file);
57 if (!ret) return(EOF);
67 #define YY_INPUT(buf,result,max_size) \
69 int c = getScanChar(yyin); \
70 result = (c == EOF) ? YY_NULL : (buf[0] = c, 1); \
80 IDENT {ALPHA}({ALPHA}|{DIGIT}|_|".")*
82 \$remote { parsing = 1; }
83 "//".*\n { if (!parsing) REJECT; }
84 .*\n { if (!parsing) {
85 if (!strncmp(yytext, "$remote", strlen("$remote"))) {
88 if (emitHeader) dump_to_dot_h(yytext);
94 \$upcall { return(tUPCALL); }
95 \$cmember { return(tCMEMBER); }
96 \$smember { return(tSMEMBER); }
97 \$virtual { return(tVIRTUAL); }
98 \$base { return(tBASE); }
99 \$name { return(tNAME); }
100 \$version { return(tVERSION); }
101 \$async { return(tASYNC); }
102 \$array { return(tARRAY); }
103 \$server { yylval.cp = serverTypeName;
106 "(" { return(tLPAREN); }
107 ")" { return(tRPAREN); }
108 "{" { return(tLBLOCK); }
109 "}" { return(tRBLOCK); }
110 "," { return(tCOMMA); }
111 "[]" { return(tARRAY); }
112 "*" { return(tSTAR); }
113 ";" { /* parsing = 0; */
116 "typedef" { return(tTYPEDEF); }
117 "struct" { return(tSTRUCT); }
118 {IDENT} { /* it's a identifier */
120 temp = (char *) malloc(strlen(yytext) + 1);
121 strcpy(temp, yytext);
122 yylval.cp = pool.findAndAdd(temp);
127 yylval.i = atoi(yytext);
131 . { yyerror("invalid character"); }
139 ch = getScanChar(yyin);
142 yytext[yyleng] = '\0';
147 yyerror("Unterminated string literal");
159 void yyerror(char *message)
162 fprintf(stderr, "line %d, col %d:%s\n", lineNo, curr, message);
163 fprintf(stderr, line);
164 for (i=0; i < curr; i++) {
165 fprintf(stderr, " ");
167 fprintf(stderr, "^\n");