1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-24 05:23:45 +02:00
llvm-mirror/tools/llvmc/ConfigLexer.h
Reid Spencer 737adb695d Converted to use flex for tokenizing input so we can use an easier to
understand recursive descent parser, we can easily handle more syntax
variety, and we can more easily change the configuration items accepted.

llvm-svn: 15732
2004-08-14 09:37:15 +00:00

78 lines
2.5 KiB
C++

//===- ConfigLexer.h - ConfigLexer Declarations -----------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file was developed by Reid Spencer and is distributed under the
// University of Illinois Open Source License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file declares the types and data needed by ConfigLexer.l
//
//===------------------------------------------------------------------------===
#ifndef LLVM_TOOLS_LLVMC_CONFIGLEXER_H
#define LLVM_TOOLS_LLVMC_CONFIGLEXER_H
#include <string>
#include <istream>
namespace llvm {
struct ConfigLexerInfo
{
int64_t IntegerVal;
std::string StringVal;
};
extern ConfigLexerInfo ConfigLexerData;
extern unsigned ConfigLexerLine;
class InputProvider {
public:
InputProvider(const std::string& nm) {
name = nm;
errCount = 0;
}
virtual ~InputProvider();
virtual unsigned read(char *buf, unsigned max_size) = 0;
virtual void error(const std::string& msg);
virtual void checkErrors();
private:
std::string name;
unsigned errCount;
};
extern InputProvider* ConfigLexerInput;
enum ConfigLexerTokens {
EOFTOK = 0, ///< Returned by Configlex when we hit end of file
EOLTOK, ///< End of line
ERRORTOK, ///< Error token
OPTION, ///< A command line option
SEPARATOR, ///< A configuration item separator
EQUALS, ///< The equals sign, =
TRUETOK, ///< A boolean true value (true/yes/on)
FALSETOK, ///< A boolean false value (false/no/off)
INTEGER, ///< An integer
STRING, ///< A quoted string
IN_SUBST, ///< The input substitution item @in@
OUT_SUBST, ///< The output substitution item @out@
LANG, ///< The item "lang" (and case variants)
PREPROCESSOR, ///< The item "preprocessor" (and case variants)
TRANSLATOR, ///< The item "translator" (and case variants)
OPTIMIZER, ///< The item "optimizer" (and case variants)
ASSEMBLER, ///< The item "assembler" (and case variants)
LINKER, ///< The item "linker" (and case variants)
NAME, ///< The item "name" (and case variants)
NEEDED, ///< The item "needed" (and case variants)
COMMAND, ///< The item "command" (and case variants)
PREPROCESSES, ///< The item "preprocesses" (and case variants)
GROKS_DASH_O, ///< The item "groks_dash_O" (and case variants)
OPTIMIZES, ///< The item "optimizes" (and case variants)
};
}
#endif