%{ /* @(#)File: $RCSfile: sqlfmt.l,v $ @(#)Version: $Revision: 1.1 $ @(#)Last changed: $Date: 2002/11/28 06:40:47 $ @(#)Purpose: Lexical Analyser for SQLFMT/FGLFMT @(#)Author: J Leffler @(#)Copyright: (C) JLSS 1992 @(#)Product: SQLFMT Version 14 (1998-11-04) */ /*TABSTOP=4*/ #include <stdio.h> #include "sqlfmt.h" #include "stderr.h" #define ALPHA 1 #define DIGIT 2 #define SPACE 3 #define OTHER 4 #define QUOTE 5 #define BRACE 6 #define COMMENT 7 static char *yyfn; static void yylex_reset(FILE *fp, char *fn); static void rdcomment(void); static void rdbrace(void); #ifndef lint static const char sccs[] = "@(#)$Id: sqlfmt.l,v 1.1 2002/11/28 06:40:47 afalout Exp $"; #endif %} alpha [A-Za-z] alphanum [A-Za-z0-9_] string \"[^"]*\" digit [0-9] space [ \t\n\f] %% {alpha}{alphanum}* { return(ALPHA); } {string} { return(QUOTE); } {digit}+ { return(DIGIT); } {space}+ { return(SPACE); } \{ { return(BRACE); } #|\-\-|! { return(COMMENT); } . { return(OTHER); } %% #ifdef FLEX_SCANNER #define output(c) putc(c, yyout) #endif void sqlfmt(FILE *fp, char *fn) { int type; yylex_reset(fp, fn); while ((type = yylex()) != 0) { switch (type) { case ALPHA: dokeyword(yytext, strlen(yytext)); break; case BRACE: rdbrace(); break; case COMMENT: rdcomment(); break; default: printf("%s", yytext); break; } } } static void rdbrace(void) { int c; int oc; oc = '{'; output('{'); while ((c = input()) != '}' || oc == '\\') { output(c); oc = c; } output('}'); } static void rdcomment(void) { int c; output(*yytext); if (*(yytext + 1) != '\0') output(*(yytext + 1)); while ((c = input()) != '\n') output(c); output('\n'); } static void yylex_reset(FILE *fp, char *fn) { #ifdef FLEX_SCANNER yy_init = 1; yy_start = 0; #endif /* FLEX_SCANNER */ yyin = fp; yyfn = fn; }