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/Support/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
,
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