CBMC
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 int cpp_token_buffert::LookAhead(unsigned offset)
15 {
17 
18  offset+=current_pos;
19 
20  while(offset>=token_vector.size())
21  read_token();
22 
23  return token_vector[offset]->kind;
24 }
25 
27 {
29 
30  if(token_vector.size()==current_pos)
31  read_token();
32 
33  token=*token_vector[current_pos];
34 
35  current_pos++;
36 
37  return token.kind;
38 }
39 
41 {
43 
44  if(token_vector.size()==current_pos)
45  read_token();
46 
47  int kind=token_vector[current_pos]->kind;
48 
49  current_pos++;
50 
51  return kind;
52 }
53 
54 int cpp_token_buffert::LookAhead(unsigned offset, cpp_tokent &token)
55 {
57 
58  offset+=current_pos;
59 
60  while(offset>=token_vector.size())
61  read_token();
62 
63  token=*token_vector[offset];
64 
65  return token.kind;
66 }
67 
69 extern char *yyansi_ctext;
70 
72 {
73  tokens.push_back(cpp_tokent());
74  token_vector.push_back(--tokens.end());
75 
76  int kind;
77 
78  ansi_c_parser.stack.clear();
79  kind = yyansi_clex();
80  tokens.back().text = yyansi_ctext;
81  if(ansi_c_parser.stack.size()==1)
82  {
83  tokens.back().data=ansi_c_parser.stack.front();
84  tokens.back().line_no=ansi_c_parser.get_line_no();
85  tokens.back().filename=ansi_c_parser.get_file();
86  }
87 
88  // std::cout << "TOKEN: " << kind << " " << tokens.back().text << '\n';
89 
90  tokens.back().kind=kind;
91 
92  // std::cout << "II: " << token_vector.back()->kind << '\n';
93  // std::cout << "I2: " << token_vector.size() << '\n';
94 }
95 
97 {
98  return current_pos;
99 }
100 
102 {
104 }
105 
107 {
109 
110  if(token_vector.size()==current_pos)
111  read_token();
112 
113  *token_vector[current_pos]=token;
114 }
115 
117 {
119 
120  tokens.push_back(token);
121 
122  token_vector.insert(token_vector.begin()+current_pos,
123  --tokens.end());
124 }
int LookAhead(unsigned offset)
ansi_c_parsert ansi_c_parser
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:95
irep_idt get_file() const
Definition: parser.h:90
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
#define PRECONDITION(CONDITION)
Definition: invariant.h:463