| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- %{
- /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
- file Copyright.txt or https://cmake.org/licensing for details. */
- /* IWYU pragma: no_forward_declare yyguts_t */
- #ifndef __clang_analyzer__ /* Suppress clang-analyzer warnings */
- #include <cmGccDepfileLexerHelper.h>
- #include <string>
- %}
- %option prefix="cmGccDepfile_yy"
- %option noyywrap
- %option reentrant
- %pointer
- WSPACE [ \t]
- NEWLINE \r?\n
- %%
- \${2} {
- // Unescape the dollar sign.
- yyextra->addToCurrentPath("$");
- }
- \\# {
- // Unescape the hash.
- yyextra->addToCurrentPath("#");
- }
- (\\\\)*\\[ ] {
- // 2N+1 backslashes plus space -> N backslashes plus space.
- size_t c = (strlen(yytext) - 1) / 2;
- std::string s(c, '\\');
- s.push_back(' ');
- yyextra->addToCurrentPath(s.c_str());
- }
- (\\\\)+[ ] {
- // 2N backslashes plus space -> 2N backslashes, end of filename.
- yytext[strlen(yytext) - 1] = 0;
- yyextra->addToCurrentPath(yytext);
- yyextra->newDependency();
- }
- {WSPACE}*\\{NEWLINE} {
- // A line continuation ends the current file name.
- yyextra->newRuleOrDependency();
- }
- {NEWLINE} {
- // A newline ends the current file name and the current rule.
- yyextra->newEntry();
- }
- :{WSPACE}+ {
- // A colon followed by space ends the rules and starts a new dependency.
- yyextra->newDependency();
- }
- {WSPACE}+ {
- // Rules and dependencies are separated by blocks of whitespace.
- yyextra->newRuleOrDependency();
- }
- [a-zA-Z0-9+,/_.~()}{%=@\x5B\x5D!\x80-\xFF-]+ {
- // Got a span of plain text.
- yyextra->addToCurrentPath(yytext);
- }
- . {
- // Got an otherwise unmatched character.
- yyextra->addToCurrentPath(yytext);
- }
- %%
- /*--------------------------------------------------------------------------*/
- #endif /* __clang_analyzer__ */
|