cprover
cpp_token_buffer.cpp
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: C++ Parser: Token Buffer
4 
5 Author: Daniel Kroening, kroening@cs.cmu.edu
6 
7 \*******************************************************************/
8 
11 
12 #include "cpp_token_buffer.h"
13 
14 #include <ansi-c/ansi_c_y.tab.h>
15 #include <ansi-c/ansi_c_parser.h>
16 
17 int cpp_token_buffert::LookAhead(unsigned offset)
18 {
19  assert(current_pos<=token_vector.size());
20 
21  offset+=current_pos;
22 
23  while(offset>=token_vector.size())
24  read_token();
25 
26  return token_vector[offset]->kind;
27 }
28 
30 {
31  assert(current_pos<=token_vector.size());
32 
33  if(token_vector.size()==current_pos)
34  read_token();
35 
36  token=*token_vector[current_pos];
37 
38  current_pos++;
39 
40  return token.kind;
41 }
42 
44 {
45  assert(current_pos<=token_vector.size());
46 
47  if(token_vector.size()==current_pos)
48  read_token();
49 
50  int kind=token_vector[current_pos]->kind;
51 
52  current_pos++;
53 
54  return kind;
55 }
56 
57 int cpp_token_buffert::LookAhead(unsigned offset, cpp_tokent &token)
58 {
59  assert(current_pos<=token_vector.size());
60 
61  offset+=current_pos;
62 
63  while(offset>=token_vector.size())
64  read_token();
65 
66  token=*token_vector[offset];
67 
68  return token.kind;
69 }
70 
72 extern char *yyansi_ctext;
73 
75 {
76  tokens.push_back(cpp_tokent());
77  token_vector.push_back(--tokens.end());
78 
79  int kind;
80 
81  ansi_c_parser.stack.clear();
82  kind=yyansi_clex();
83  tokens.back().text=yyansi_ctext;
84  if(ansi_c_parser.stack.size()==1)
85  {
86  tokens.back().data=ansi_c_parser.stack.front();
87  tokens.back().line_no=ansi_c_parser.get_line_no();
88  tokens.back().filename=ansi_c_parser.get_file();
89  }
90 
91  // std::cout << "TOKEN: " << kind << " " << tokens.back().text << '\n';
92 
93  tokens.back().kind=kind;
94 
95  // std::cout << "II: " << token_vector.back()->kind << '\n';
96  // std::cout << "I2: " << token_vector.size() << '\n';
97 }
98 
100 {
101  return current_pos;
102 }
103 
105 {
107 }
108 
110 {
111  assert(current_pos<=token_vector.size());
112 
113  if(token_vector.size()==current_pos)
114  read_token();
115 
116  *token_vector[current_pos]=token;
117 }
118 
120 {
121  assert(current_pos<=token_vector.size());
122 
123  tokens.push_back(token);
124 
125  token_vector.insert(token_vector.begin()+current_pos,
126  --tokens.end());
127 }
ansi_c_parsert ansi_c_parser
int LookAhead(unsigned offset)
void Replace(const cpp_tokent &token)
std::vector< tokenst::iterator > token_vector
void Restore(post pos)
void Insert(const cpp_tokent &token)
int kind
Definition: cpp_token.h:22
unsigned get_line_no() const
Definition: parser.h:97
irep_idt get_file() const
Definition: parser.h:92
std::vector< exprt > stack
Definition: parser.h:30
char * yyansi_ctext
int yyansi_clex()
C++ Parser: Token Buffer.
literalt pos(literalt a)
Definition: literal.h:194