add some missing quotes in debug output
[llvm/avr.git] / utils / TableGen / TGLexer.h
blob80405ac0bf4a9338b7d331375408024f87ce2560
1 //===- TGLexer.h - Lexer for TableGen Files ---------------------*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This class represents the Lexer for tablegen files.
12 //===----------------------------------------------------------------------===//
14 #ifndef TGLEXER_H
15 #define TGLEXER_H
17 #include "llvm/Support/DataTypes.h"
18 #include <vector>
19 #include <string>
20 #include <cassert>
22 namespace llvm {
23 class MemoryBuffer;
24 class SourceMgr;
25 class SMLoc;
27 namespace tgtok {
28 enum TokKind {
29 // Markers
30 Eof, Error,
32 // Tokens with no info.
33 minus, plus, // - +
34 l_square, r_square, // [ ]
35 l_brace, r_brace, // { }
36 l_paren, r_paren, // ( )
37 less, greater, // < >
38 colon, semi, // ; :
39 comma, period, // , .
40 equal, question, // = ?
42 // Keywords.
43 Bit, Bits, Class, Code, Dag, Def, Defm, Field, In, Int, Let, List,
44 MultiClass, String,
46 // !keywords.
47 XConcat, XSRA, XSRL, XSHL, XStrConcat, XNameConcat, XCast, XSubst,
48 XForEach, XCar, XCdr, XNull, XIf,
50 // Integer value.
51 IntVal,
53 // String valued tokens.
54 Id, StrVal, VarName, CodeFragment
58 /// TGLexer - TableGen Lexer class.
59 class TGLexer {
60 SourceMgr &SrcMgr;
62 const char *CurPtr;
63 const MemoryBuffer *CurBuf;
65 // Information about the current token.
66 const char *TokStart;
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.
73 int CurBuffer;
75 public:
76 TGLexer(SourceMgr &SrcMgr);
77 ~TGLexer() {}
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");
89 return CurStrVal;
91 int64_t getCurIntVal() const {
92 assert(CurCode == tgtok::IntVal && "This token isn't an integer");
93 return CurIntVal;
96 SMLoc getLoc() const;
98 void PrintError(const char *Loc, const std::string &Msg) const;
99 void PrintError(SMLoc Loc, const std::string &Msg) const;
101 private:
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);
107 int getNextChar();
108 void SkipBCPLComment();
109 bool SkipCComment();
110 tgtok::TokKind LexIdentifier();
111 bool LexInclude();
112 tgtok::TokKind LexString();
113 tgtok::TokKind LexVarName();
114 tgtok::TokKind LexNumber();
115 tgtok::TokKind LexBracket();
116 tgtok::TokKind LexExclaim();
119 } // end namespace llvm
121 #endif