LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
TGLexer.h
Go to the documentation of this file.
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.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef TGLEXER_H
15 #define TGLEXER_H
16 
17 #include "llvm/Support/DataTypes.h"
18 #include "llvm/Support/SMLoc.h"
19 #include <cassert>
20 #include <map>
21 #include <string>
22 
23 namespace llvm {
24 class MemoryBuffer;
25 class SourceMgr;
26 class SMLoc;
27 class Twine;
28 
29 namespace tgtok {
30  enum TokKind {
31  // Markers
33 
34  // Tokens with no info.
35  minus, plus, // - +
36  l_square, r_square, // [ ]
37  l_brace, r_brace, // { }
38  l_paren, r_paren, // ( )
39  less, greater, // < >
40  colon, semi, // : ;
41  comma, period, // , .
42  equal, question, // = ?
43  paste, // #
44 
45  // Keywords.
48 
49  // !keywords.
52 
53  // Integer value.
55 
56  // String valued tokens.
58  };
59 }
60 
61 /// TGLexer - TableGen Lexer class.
62 class TGLexer {
63  SourceMgr &SrcMgr;
64 
65  const char *CurPtr;
66  const MemoryBuffer *CurBuf;
67 
68  // Information about the current token.
69  const char *TokStart;
70  tgtok::TokKind CurCode;
71  std::string CurStrVal; // This is valid for ID, STRVAL, VARNAME, CODEFRAGMENT
72  int64_t CurIntVal; // This is valid for INTVAL.
73 
74  /// CurBuffer - This is the current buffer index we're lexing from as managed
75  /// by the SourceMgr object.
76  int CurBuffer;
77 
78 public:
79  typedef std::map<std::string, SMLoc> DependenciesMapTy;
80 private:
81  /// Dependencies - This is the list of all included files.
82  DependenciesMapTy Dependencies;
83 
84 public:
85  TGLexer(SourceMgr &SrcMgr);
86  ~TGLexer() {}
87 
89  return CurCode = LexToken();
90  }
91 
93  return Dependencies;
94  }
95 
96  tgtok::TokKind getCode() const { return CurCode; }
97 
98  const std::string &getCurStrVal() const {
99  assert((CurCode == tgtok::Id || CurCode == tgtok::StrVal ||
100  CurCode == tgtok::VarName || CurCode == tgtok::CodeFragment) &&
101  "This token doesn't have a string value");
102  return CurStrVal;
103  }
104  int64_t getCurIntVal() const {
105  assert(CurCode == tgtok::IntVal && "This token isn't an integer");
106  return CurIntVal;
107  }
108 
109  SMLoc getLoc() const;
110 
111 private:
112  /// LexToken - Read the next token and return its code.
113  tgtok::TokKind LexToken();
114 
115  tgtok::TokKind ReturnError(const char *Loc, const Twine &Msg);
116 
117  int getNextChar();
118  int peekNextChar(int Index);
119  void SkipBCPLComment();
120  bool SkipCComment();
121  tgtok::TokKind LexIdentifier();
122  bool LexInclude();
123  tgtok::TokKind LexString();
124  tgtok::TokKind LexVarName();
125  tgtok::TokKind LexNumber();
126  tgtok::TokKind LexBracket();
127  tgtok::TokKind LexExclaim();
128 };
129 
130 } // end namespace llvm
131 
132 #endif
TGLexer(SourceMgr &SrcMgr)
Definition: TGLexer.cpp:29
tgtok::TokKind getCode() const
Definition: TGLexer.h:96
const DependenciesMapTy & getDependencies() const
Definition: TGLexer.h:92
int64_t getCurIntVal() const
Definition: TGLexer.h:104
const std::string & getCurStrVal() const
Definition: TGLexer.h:98
tgtok::TokKind Lex()
Definition: TGLexer.h:88
std::map< std::string, SMLoc > DependenciesMapTy
Definition: TGLexer.h:79
Represents a location in source code.
Definition: SMLoc.h:23
SMLoc getLoc() const
Definition: TGLexer.cpp:36
TGLexer - TableGen Lexer class.
Definition: TGLexer.h:62