CMake/Source/cmCommandArgumentLexer.in.l

163 lines
4.5 KiB
Plaintext
Raw Normal View History

2005-06-08 18:41:05 +04:00
%{
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
2005-06-08 18:41:05 +04:00
Distributed under the OSI-approved BSD License (the "License");
see accompanying file Copyright.txt for details.
2005-06-08 18:41:05 +04:00
This software is distributed WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the License for more information.
============================================================================*/
2005-06-08 18:41:05 +04:00
/*
This file must be translated to C and modified to build everywhere.
Run flex like this:
flex --prefix=cmCommandArgument_yy --header-file=cmCommandArgumentLexer.h -ocmCommandArgumentLexer.cxx cmCommandArgumentLexer.in.l
Modify cmCommandArgumentLexer.cxx:
2007-06-05 17:19:27 +04:00
- add #include "cmStandardIncludes.h" to top of file
- put header block at top of file
2005-06-08 18:41:05 +04:00
- remove TABs
- remove use of the 'register' storage class specifier
2005-06-08 18:41:05 +04:00
- remove "yyscanner" argument from these methods:
yy_fatal_error, cmCommandArgument_yyalloc, cmCommandArgument_yyrealloc, cmCommandArgument_yyfree
2005-06-08 18:41:05 +04:00
- remove all YY_BREAK lines occurring right after return statements
- change while ( 1 ) to for(;;)
- add "return 0;" to end of cmCommandArgument_yylex
2005-06-08 18:41:05 +04:00
Modify cmCommandArgumentLexer.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"
#include "cmCommandArgumentParserHelper.h"
2005-06-08 18:41:05 +04:00
/* Replace the lexer input function. */
#undef YY_INPUT
#define YY_INPUT(buf, result, max_size) \
{ result = yyextra->LexInput(buf, max_size); }
/* Include the set of tokens from the parser. */
#include "cmCommandArgumentParserTokens.h"
/*--------------------------------------------------------------------------*/
%}
%option reentrant
%option noyywrap
%option nounput
2005-06-08 18:41:05 +04:00
%pointer
%s ESCAPES
%s NOESCAPES
2005-06-08 18:41:05 +04:00
%%
\$ENV\{ {
//std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl;
yyextra->AllocateParserType(yylvalp, yytext+1, strlen(yytext)-2);
return cal_ENVCURLY;
}
\$[A-Za-z0-9/_.+-]+\{ {
2005-06-08 22:18:31 +04:00
//std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl;
yyextra->AllocateParserType(yylvalp, yytext+1, strlen(yytext)-2);
return cal_NCURLY;
}
2005-06-08 18:41:05 +04:00
@[A-Za-z0-9/_.+-]+@ {
2005-06-08 22:18:31 +04:00
//std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl;
yyextra->AllocateParserType(yylvalp, yytext+1, strlen(yytext)-2);
return cal_ATNAME;
}
2005-06-08 22:18:31 +04:00
2005-06-08 18:41:05 +04:00
"${" {
2005-06-08 22:18:31 +04:00
//std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl;
//yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext));
yylvalp->str = yyextra->DCURLYVariable;
2005-06-08 18:41:05 +04:00
return cal_DCURLY;
}
"}" {
2005-06-08 22:18:31 +04:00
//std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl;
//yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext));
yylvalp->str = yyextra->RCURLYVariable;
2005-06-08 18:41:05 +04:00
return cal_RCURLY;
}
"@" {
2005-06-08 22:18:31 +04:00
//std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl;
//yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext));
yylvalp->str = yyextra->ATVariable;
2005-06-08 18:41:05 +04:00
return cal_AT;
}
[A-Za-z0-9/_.+-]+ {
2005-06-08 22:18:31 +04:00
//std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl;
yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext));
return cal_NAME;
2005-06-08 18:41:05 +04:00
}
<ESCAPES>\\. {
if ( !yyextra->HandleEscapeSymbol(yylvalp, *(yytext+1)) )
{
return cal_ERROR;
}
return cal_SYMBOL;
}
[^\${}\\@]+ {
2005-06-08 22:18:31 +04:00
//std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl;
yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext));
return cal_SYMBOL;
2005-06-08 18:41:05 +04:00
}
2005-06-08 22:18:31 +04:00
"$" {
//yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext));
yylvalp->str = yyextra->DOLLARVariable;
return cal_DOLLAR;
2005-06-08 22:18:31 +04:00
}
"{" {
//yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext));
yylvalp->str = yyextra->LCURLYVariable;
return cal_LCURLY;
2005-06-08 22:18:31 +04:00
}
<ESCAPES>"\\" {
//yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext));
yylvalp->str = yyextra->BSLASHVariable;
return cal_BSLASH;
2005-06-08 22:18:31 +04:00
}
<NOESCAPES>"\\" {
//yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext));
yylvalp->str = yyextra->BSLASHVariable;
return cal_SYMBOL;
}
2005-06-08 18:41:05 +04:00
%%
/*--------------------------------------------------------------------------*/
void cmCommandArgument_SetupEscapes(yyscan_t yyscanner, bool noEscapes)
{
/* Hack into the internal flex-generated scanner to set the state. */
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
if(noEscapes)
{
BEGIN(NOESCAPES);
}
else
{
BEGIN(ESCAPES);
}
}