%{ /*========================================================================= Program: CMake - Cross-Platform Makefile Generator Module: $RCSfile$ Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved. See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ /*------------------------------------------------------------------------- Portions of this source have been derived from makefdep90 version 2.6.2, Copyright (C) 2000,2001 Erik Edelmann <eedelman@beam.helsinki.fi>. The code was originally distributed under the GPL but permission from the copyright holder has been obtained to distribute this derived work under the CMake license. -------------------------------------------------------------------------*/ /* This file must be translated to C and modified to build everywhere. Run flex like this: flex -i --prefix=cmDependsFortran_yy --header-file=cmDependsFortranLexer.h -ocmDependsFortranLexer.cxx cmDependsFortranLexer.in.l Modify cmDependsFortranLexer.cxx: - remove TABs - remove "yyscanner" argument from these methods: yy_fatal_error, cmDependsFortran_yyalloc, cmDependsFortran_yyrealloc, cmDependsFortran_yyfree - remove all YY_BREAK lines occurring right after return statements - change while ( 1 ) to for(;;) Modify cmDependsFortranLexer.h: - remove TABs - remove the yy_init_globals function - remove the block that includes unistd.h - remove #line directives (avoids bogus warning on old Sun) */ #include "cmStandardLexer.h" #define cmDependsFortranLexer_cxx #include "cmDependsFortranParser.h" /* Interface to parser object. */ /* Replace the lexer input function. */ #undef YY_INPUT #define YY_INPUT(buf, result, max_size) \ { result = cmDependsFortranParser_Input(yyextra, buf, max_size); } /* Include the set of tokens from the parser. */ #include "cmDependsFortranParserTokens.h" /*--------------------------------------------------------------------------*/ %} %option reentrant %option noyywrap %pointer %s free_fmt fixed_fmt %x str_sq str_dq %% \" { cmDependsFortranParser_StringStart(yyextra); BEGIN(str_dq); } ' { cmDependsFortranParser_StringStart(yyextra); BEGIN(str_sq); } <str_dq>\" | <str_sq>' { yylvalp->string = strdup(cmDependsFortranParser_StringEnd(yyextra)); return STRING; } <str_dq,str_sq>&[ \t]*\n | <str_dq,str_sq>&[ \t]*\n[ \t]*& /* Ignore (continued strings, free fmt) */ <fixed_fmt,str_dq,str_sq>\n[ ]{5}[^ \t\n] /*Ignore (cont. strings, fixed fmt) */ <str_dq,str_sq>\n { unput ('\n'); BEGIN(INITIAL); return UNTERMINATED_STRING; } <str_sq,str_dq>. { cmDependsFortranParser_StringAppend(yyextra, yytext[0]); } !.*\n { return EOSTMT; } /* Treat comments like */ <fixed_fmt>^[cC*dD].*\n { return EOSTMT; } /* empty lines */ #[ \t]*include { return CPP_INCLUDE; } \$[ \t]*include { return F90PPR_INCLUDE; } \?\?[ \t]*include { return COCO_INCLUDE; } INCLUDE { return F_INCLUDE; } USE { return USE; } END" "*INTERFACE { cmDependsFortranParser_SetInInterface(yyextra, 0); } INTERFACE { cmDependsFortranParser_SetInInterface(yyextra, 1); } END" "*MODULE /* Ignore */ MODULE { if(!cmDependsFortranParser_GetInInterface(yyextra)) { return MODULE; } } #[ \t]*define { return CPP_DEFINE; } \$[ \t]*DEFINE { return F90PPR_DEFINE; } #[ \t]*undef { return CPP_UNDEF; } \$[ \t]*UNDEF { return F90PPR_UNDEF; } #[ \t]*ifdef { return CPP_IFDEF; } #[ \t]*ifndef { return CPP_IFNDEF; } #[ \t]*if { return CPP_IF; } #[ \t]*elif { return CPP_ELIF; } #[ \t]*else { return CPP_ELSE; } #[ \t]*endif { return CPP_ENDIF; } $[ \t]*ifdef { return F90PPR_IFDEF; } $[ \t]*ifndef { return F90PPR_IFNDEF; } $[ \t]*if { return F90PPR_IF; } $[ \t]*elif { return F90PPR_ELIF; } $[ \t]*else { return F90PPR_ELSE; } $[ \t]*endif { return F90PPR_ENDIF; } &[ \t]*\n | &[ \t]*\n[ \t]*& /* Ignore */ [^ \t\n\r;,!'""']+ { yylvalp->string = strdup(yytext); return WORD; } ;|\n { return EOSTMT; } [ \t\r,] /* Ignore */ . { return *yytext; } <<EOF>> { if(!cmDependsFortranParser_FilePop(yyextra)) { return YY_NULL; } } %% /*--------------------------------------------------------------------------*/ YY_BUFFER_STATE cmDependsFortranLexer_GetCurrentBuffer(yyscan_t yyscanner) { /* Hack into the internal flex-generated scanner to get the buffer. */ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return YY_CURRENT_BUFFER; }