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 //===----------------------------------------------------------------------===//
14 #ifndef LLVM_LIB_TABLEGEN_TGLEXER_H
15 #define LLVM_LIB_TABLEGEN_TGLEXER_H
17 #include "llvm/ADT/StringRef.h"
18 #include "llvm/Support/DataTypes.h"
19 #include "llvm/Support/SMLoc.h"
34 // Tokens with no info.
36 l_square
, r_square
, // [ ]
37 l_brace
, r_brace
, // { }
38 l_paren
, r_paren
, // ( )
42 equal
, question
, // = ?
46 Bit
, Bits
, Class
, Code
, Dag
, Def
, Foreach
, Defm
, Field
, In
, Int
, Let
, List
,
47 MultiClass
, String
, Defset
,
50 XConcat
, XADD
, XAND
, XOR
, XSRA
, XSRL
, XSHL
, XListConcat
, XStrConcat
, XCast
,
51 XSubst
, XForEach
, XFoldl
, XHead
, XTail
, XSize
, XEmpty
, XIf
, XEq
, XIsA
, XDag
,
52 XNe
, XLe
, XLt
, XGe
, XGt
,
57 // Binary constant. Note that these are sized according to the number of
61 // String valued tokens.
62 Id
, StrVal
, VarName
, CodeFragment
66 /// TGLexer - TableGen Lexer class.
73 // Information about the current token.
75 tgtok::TokKind CurCode
;
76 std::string CurStrVal
; // This is valid for ID, STRVAL, VARNAME, CODEFRAGMENT
77 int64_t CurIntVal
; // This is valid for INTVAL.
79 /// CurBuffer - This is the current buffer index we're lexing from as managed
80 /// by the SourceMgr object.
84 typedef std::map
<std::string
, SMLoc
> DependenciesMapTy
;
86 /// Dependencies - This is the list of all included files.
87 DependenciesMapTy Dependencies
;
90 TGLexer(SourceMgr
&SrcMgr
);
92 tgtok::TokKind
Lex() {
93 return CurCode
= LexToken();
96 const DependenciesMapTy
&getDependencies() const {
100 tgtok::TokKind
getCode() const { return CurCode
; }
102 const std::string
&getCurStrVal() const {
103 assert((CurCode
== tgtok::Id
|| CurCode
== tgtok::StrVal
||
104 CurCode
== tgtok::VarName
|| CurCode
== tgtok::CodeFragment
) &&
105 "This token doesn't have a string value");
108 int64_t getCurIntVal() const {
109 assert(CurCode
== tgtok::IntVal
&& "This token isn't an integer");
112 std::pair
<int64_t, unsigned> getCurBinaryIntVal() const {
113 assert(CurCode
== tgtok::BinaryIntVal
&&
114 "This token isn't a binary integer");
115 return std::make_pair(CurIntVal
, (CurPtr
- TokStart
)-2);
118 SMLoc
getLoc() const;
121 /// LexToken - Read the next token and return its code.
122 tgtok::TokKind
LexToken();
124 tgtok::TokKind
ReturnError(const char *Loc
, const Twine
&Msg
);
127 int peekNextChar(int Index
);
128 void SkipBCPLComment();
130 tgtok::TokKind
LexIdentifier();
132 tgtok::TokKind
LexString();
133 tgtok::TokKind
LexVarName();
134 tgtok::TokKind
LexNumber();
135 tgtok::TokKind
LexBracket();
136 tgtok::TokKind
LexExclaim();
139 } // end namespace llvm