CMake/Source/cmCommandArgumentLexer.in.l

154 lines
4.1 KiB
Plaintext
Raw Normal View History

2005-06-08 18:41:05 +04:00
%{
Simplify CMake per-source license notices Per-source copyright/license notice headers that spell out copyright holder names and years are hard to maintain and often out-of-date or plain wrong. Precise contributor information is already maintained automatically by the version control tool. Ultimately it is the receiver of a file who is responsible for determining its licensing status, and per-source notices are merely a convenience. Therefore it is simpler and more accurate for each source to have a generic notice of the license name and references to more detailed information on copyright holders and full license terms. Our `Copyright.txt` file now contains a list of Contributors whose names appeared source-level copyright notices. It also references version control history for more precise information. Therefore we no longer need to spell out the list of Contributors in each source file notice. Replace CMake per-source copyright/license notice headers with a short description of the license and links to `Copyright.txt` and online information available from "https://cmake.org/licensing". The online URL also handles cases of modules being copied out of our source into other projects, so we can drop our notices about replacing links with full license text. Run the `Utilities/Scripts/filter-notices.bash` script to perform the majority of the replacements mechanically. Manually fix up shebang lines and trailing newlines in a few files. Manually update the notices in a few files that the script does not handle.
2016-09-27 22:01:08 +03:00
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file Copyright.txt or https://cmake.org/licensing for details. */
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);
}
}