58e524165d
Teach the lexer to return tokens for whitespace. Teach the parser to tolerate the space tokens where whitespace is allowed. Also teach the parser to diagnose and warn about cases of quoted arguments followed immediately by another argument. This was accidentally allowed previously, so we only warn. Update the RunCMake.Syntax test case StringNoSpace expected stderr to include the warnings.
61 lines
1.8 KiB
C
61 lines
1.8 KiB
C
/*============================================================================
|
|
CMake - Cross Platform Makefile Generator
|
|
Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
|
|
|
|
Distributed under the OSI-approved BSD License (the "License");
|
|
see accompanying file Copyright.txt for details.
|
|
|
|
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.
|
|
============================================================================*/
|
|
#ifndef cmListFileLexer_h
|
|
#define cmListFileLexer_h
|
|
|
|
typedef enum cmListFileLexer_Type_e
|
|
{
|
|
cmListFileLexer_Token_None,
|
|
cmListFileLexer_Token_Space,
|
|
cmListFileLexer_Token_Newline,
|
|
cmListFileLexer_Token_Identifier,
|
|
cmListFileLexer_Token_ParenLeft,
|
|
cmListFileLexer_Token_ParenRight,
|
|
cmListFileLexer_Token_ArgumentUnquoted,
|
|
cmListFileLexer_Token_ArgumentQuoted,
|
|
cmListFileLexer_Token_BadCharacter,
|
|
cmListFileLexer_Token_BadString
|
|
} cmListFileLexer_Type;
|
|
|
|
typedef struct cmListFileLexer_Token_s cmListFileLexer_Token;
|
|
struct cmListFileLexer_Token_s
|
|
{
|
|
cmListFileLexer_Type type;
|
|
char* text;
|
|
int length;
|
|
int line;
|
|
int column;
|
|
};
|
|
|
|
typedef struct cmListFileLexer_s cmListFileLexer;
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
cmListFileLexer* cmListFileLexer_New();
|
|
int cmListFileLexer_SetFileName(cmListFileLexer*, const char*);
|
|
int cmListFileLexer_SetString(cmListFileLexer*, const char*);
|
|
cmListFileLexer_Token* cmListFileLexer_Scan(cmListFileLexer*);
|
|
long cmListFileLexer_GetCurrentLine(cmListFileLexer*);
|
|
long cmListFileLexer_GetCurrentColumn(cmListFileLexer*);
|
|
const char* cmListFileLexer_GetTypeAsString(cmListFileLexer*,
|
|
cmListFileLexer_Type);
|
|
void cmListFileLexer_Delete(cmListFileLexer*);
|
|
|
|
#ifdef __cplusplus
|
|
} /* extern "C" */
|
|
#endif
|
|
|
|
#endif
|