LLVM  7.0.0svn
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 LLVM_LIB_TABLEGEN_TGLEXER_H
15 #define LLVM_LIB_TABLEGEN_TGLEXER_H
16 
17 #include "llvm/ADT/StringRef.h"
18 #include "llvm/Support/DataTypes.h"
19 #include "llvm/Support/SMLoc.h"
20 #include <cassert>
21 #include <map>
22 #include <string>
23 
24 namespace llvm {
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  XNe, XLe, XLt, XGe, XGt,
53 
54  // Integer value.
56 
57  // Binary constant. Note that these are sized according to the number of
58  // bits given.
60 
61  // String valued tokens.
63  };
64 }
65 
66 /// TGLexer - TableGen Lexer class.
67 class TGLexer {
69 
70  const char *CurPtr;
71  StringRef CurBuf;
72 
73  // Information about the current token.
74  const char *TokStart;
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.
78 
79  /// CurBuffer - This is the current buffer index we're lexing from as managed
80  /// by the SourceMgr object.
81  unsigned CurBuffer;
82 
83 public:
84  typedef std::map<std::string, SMLoc> DependenciesMapTy;
85 private:
86  /// Dependencies - This is the list of all included files.
87  DependenciesMapTy Dependencies;
88 
89 public:
90  TGLexer(SourceMgr &SrcMgr);
91 
93  return CurCode = LexToken();
94  }
95 
96  const DependenciesMapTy &getDependencies() const {
97  return Dependencies;
98  }
99 
100  tgtok::TokKind getCode() const { return CurCode; }
101 
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");
106  return CurStrVal;
107  }
108  int64_t getCurIntVal() const {
109  assert(CurCode == tgtok::IntVal && "This token isn't an integer");
110  return CurIntVal;
111  }
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);
116  }
117 
118  SMLoc getLoc() const;
119 
120 private:
121  /// LexToken - Read the next token and return its code.
122  tgtok::TokKind LexToken();
123 
124  tgtok::TokKind ReturnError(const char *Loc, const Twine &Msg);
125 
126  int getNextChar();
127  int peekNextChar(int Index);
128  void SkipBCPLComment();
129  bool SkipCComment();
130  tgtok::TokKind LexIdentifier();
131  bool LexInclude();
132  tgtok::TokKind LexString();
133  tgtok::TokKind LexVarName();
134  tgtok::TokKind LexNumber();
135  tgtok::TokKind LexBracket();
136  tgtok::TokKind LexExclaim();
137 };
138 
139 } // end namespace llvm
140 
141 #endif
Compute iterated dominance frontiers using a linear time algorithm.
Definition: AllocatorList.h:24
SourceMgr SrcMgr
Definition: Error.cpp:23
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
Definition: Twine.h:81
const std::string & getCurStrVal() const
Definition: TGLexer.h:102
This owns the files read by a parser, handles include stacks, and handles diagnostic wrangling...
Definition: SourceMgr.h:42
tgtok::TokKind Lex()
Definition: TGLexer.h:92
std::map< std::string, SMLoc > DependenciesMapTy
Definition: TGLexer.h:84
std::pair< int64_t, unsigned > getCurBinaryIntVal() const
Definition: TGLexer.h:112
tgtok::TokKind getCode() const
Definition: TGLexer.h:100
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
const DependenciesMapTy & getDependencies() const
Definition: TGLexer.h:96
int64_t getCurIntVal() const
Definition: TGLexer.h:108
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:49
Represents a location in source code.
Definition: SMLoc.h:24
TGLexer - TableGen Lexer class.
Definition: TGLexer.h:67