a2k_p1.l
上传用户:dgyhgb
上传日期:2007-01-07
资源大小:676k
文件大小:4k
源码类别:

SQL Server

开发平台:

Unix_Linux

  1. %{
  2. /*
  3.  *  a2k_p1.l - ansi 2 knr processing
  4.  *            
  5.  *  This file is a part of GNU SQL Server
  6.  *
  7.  *  Copyright (c) 1996, 1997, Free Software Foundation, Inc
  8.  *  Developed at the Institute of System Programming
  9.  *  This file is written by Michael Kimelman.
  10.  * 
  11.  *  This program is free software; you can redistribute it and/or modify
  12.  *  it under the terms of the GNU General Public License as published by
  13.  *  the Free Software Foundation; either version 2 of the License, or
  14.  *  (at your option) any later version.
  15.  *
  16.  *  This program is distributed in the hope that it will be useful,
  17.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19.  *  GNU General Public License for more details.
  20.  *
  21.  *  You should have received a copy of the GNU General Public License
  22.  *  along with this program; if not, write to the Free Software
  23.  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  24.  *
  25.  *  Contact:  gss@ispras.ru
  26.  *
  27.  */
  28. #include <assert.h>
  29. /* $Id: a2k_p1.l,v 1.245 1997/03/31 03:46:38 kml Exp $ */
  30. %}
  31. %x C_str C_str1 Skip
  32. WS              [ tf]+
  33. NNS             [^A-Za-z0-9_]
  34. OWS             [ tf]*
  35. NOT_WS          [^ tfn]
  36. LET             [A-Za-z]
  37. NAME            [A-Za-z_][A-Za-z_0-9]*
  38. COMMENT         "/*"([^/*]+|[*]+[^/*]|"/"+)*[*]+"/"
  39. EWS             ({WS}|n|{COMMENT})*
  40. %%
  41.     
  42.   /*********************************************
  43.    *                C lexics                   *
  44.    *********************************************/
  45. {COMMENT}       ECHO;
  46. "              {
  47.                           ECHO;
  48.   BEGIN(C_str);
  49. }
  50. .|n            ECHO;
  51. "##"            fputs("/**/",yyout);  /* ## --> comments in macro */
  52. {OWS}","{OWS}   fputs(",",yyout);     /* condence spaces in calls */
  53. "("{OWS}        fputs("(",yyout);    /*        ---- // ----      */
  54. {OWS}")"        fputs(")",yyout);    /*          ---- // ----    */
  55.                 /* adjust cpp directives    */ 
  56. ^{OWS}"#if"       fputs("#if",yyout);     
  57. ^{OWS}"#ifdef"    fputs("#ifdef",yyout);  
  58. ^{OWS}"#else"     fputs("#else",yyout);   
  59. ^{OWS}"#endif"    fputs("#endif",yyout);  
  60. ^{OWS}"#define"   fputs("#define",yyout);  
  61. ^{OWS}"#undef"    fputs("#undef",yyout);  
  62. ^{OWS}"#include"  { fputs("#include",yyout); BEGIN(Skip); }
  63. ^{OWS}"#pragma"   { fputs("#pragma",yyout);  BEGIN(Skip); }
  64. ^{OWS}"#line"     { fputs("#line",yyout);    BEGIN(Skip); }
  65. ^{OWS}"#"         fputs("#",yyout);  
  66. ^{OWS}"#"{NAME}  { fprintf(yyout,""%s",yytext+1); BEGIN(C_str); }
  67. <Skip>.*n        { ECHO; BEGIN(INITIAL); }
  68.   /*********************************************
  69.    *               C string recognizer         *
  70.    *********************************************/
  71. <C_str>\"              { ECHO; }
  72. <C_str>\n              { ECHO; }
  73. <C_str>"                { BEGIN(C_str1); }
  74. <C_str>\?[^"n]         { ECHO; }
  75. <C_str1>{WS}             ; /* waiting */
  76. <C_str1>n               ; /* waiting */
  77. <C_str1>{COMMENT}        ; /* waiting */
  78. <C_str1>"               { BEGIN(C_str);  } /* clip strings */
  79. <C_str1>^{OWS}"#if"       { fputs(""n#if",yyout);       BEGIN(INITIAL);  }
  80. <C_str1>^{OWS}"#ifdef"    { fputs(""n#ifdef",yyout);    BEGIN(INITIAL);  }
  81. <C_str1>^{OWS}"#else"     { fputs(""n#else",yyout);     BEGIN(INITIAL);  }
  82. <C_str1>^{OWS}"#endif"    { fputs(""n#endif",yyout);    BEGIN(INITIAL);  }
  83. <C_str1>^{OWS}"#define"   { fputs(""n#define",yyout);    BEGIN(INITIAL);  }
  84. <C_str1>^{OWS}"#undef"    { fputs(""n#undef",yyout);    BEGIN(INITIAL);  }
  85. <C_str1>^{OWS}"#include"  { fputs(""n#include",yyout);  BEGIN(Skip);  }
  86. <C_str1>^{OWS}"#pragma"   { fputs(""n#pragma",yyout);   BEGIN(Skip);  }
  87. <C_str1>^{OWS}"#line"     { fputs(""n#line",yyout);     BEGIN(Skip);  }
  88. <C_str1>^{OWS}"#"         { fputs(""n#",yyout);         BEGIN(INITIAL);  }
  89. <C_str1>"#"{NAME}          fputs(yytext+1,yyout); /* threw away # and leave name inside string */
  90. <C_str1>,{OWS}           { fputs("",",yyout); BEGIN(INITIAL);  }
  91. <C_str1>.                { fprintf(yyout,""%s",yytext); BEGIN(INITIAL);  }
  92. %%
  93. int
  94. yywrap()
  95. {
  96.   return 1;
  97. }
  98. int
  99. main (argc,argv)
  100.      i4_t argc;
  101.      char **argv;
  102. {
  103.   if ( argc != 3 )
  104.     {
  105.       fprintf("Usage: %s input_file output_filen",argv[0]);
  106.       return 1;
  107.     }
  108.   yy_flex_debug = 0;
  109.   yyin = fopen(argv[1],"r");
  110.   assert( yyin != NULL);
  111.   yyout = fopen(argv[2],"w");
  112.   assert(yyout != NULL);
  113.   yylex();
  114.   fclose(yyin);
  115.   fclose(yyout);
  116.   return 0;
  117. }