1
//===- TGLexer.h - Lexer for TableGen Files ---------------------*- C++ -*-===//
3
// The LLVM Compiler Infrastructure
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
8
//===----------------------------------------------------------------------===//
10
// This class represents the Lexer for tablegen files.
12
//===----------------------------------------------------------------------===//
17
#include "llvm/System/DataTypes.h"
32
// Tokens with no info.
34
l_square, r_square, // [ ]
35
l_brace, r_brace, // { }
36
l_paren, r_paren, // ( )
40
equal, question, // = ?
43
Bit, Bits, Class, Code, Dag, Def, Defm, Field, In, Int, Let, List,
47
XConcat, XSRA, XSRL, XSHL, XStrConcat, XNameConcat, XCast, XSubst,
48
XForEach, XCar, XCdr, XNull, XIf, XEq,
53
// String valued tokens.
54
Id, StrVal, VarName, CodeFragment
58
/// TGLexer - TableGen Lexer class.
63
const MemoryBuffer *CurBuf;
65
// Information about the current token.
67
tgtok::TokKind CurCode;
68
std::string CurStrVal; // This is valid for ID, STRVAL, VARNAME, CODEFRAGMENT
69
int64_t CurIntVal; // This is valid for INTVAL.
71
/// CurBuffer - This is the current buffer index we're lexing from as managed
72
/// by the SourceMgr object.
76
TGLexer(SourceMgr &SrcMgr);
79
tgtok::TokKind Lex() {
80
return CurCode = LexToken();
83
tgtok::TokKind getCode() const { return CurCode; }
85
const std::string &getCurStrVal() const {
86
assert((CurCode == tgtok::Id || CurCode == tgtok::StrVal ||
87
CurCode == tgtok::VarName || CurCode == tgtok::CodeFragment) &&
88
"This token doesn't have a string value");
91
int64_t getCurIntVal() const {
92
assert(CurCode == tgtok::IntVal && "This token isn't an integer");
98
void PrintError(const char *Loc, const std::string &Msg) const;
99
void PrintError(SMLoc Loc, const std::string &Msg) const;
102
/// LexToken - Read the next token and return its code.
103
tgtok::TokKind LexToken();
105
tgtok::TokKind ReturnError(const char *Loc, const std::string &Msg);
108
void SkipBCPLComment();
110
tgtok::TokKind LexIdentifier();
112
tgtok::TokKind LexString();
113
tgtok::TokKind LexVarName();
114
tgtok::TokKind LexNumber();
115
tgtok::TokKind LexBracket();
116
tgtok::TokKind LexExclaim();
119
} // end namespace llvm