cprover
Loading...
Searching...
No Matches
cpp_token_buffer.cpp
Go to the documentation of this file.
1/*******************************************************************\
2
3Module: C++ Parser: Token Buffer
4
5Author: Daniel Kroening, kroening@cs.cmu.edu
6
7\*******************************************************************/
8
11
12#include "cpp_token_buffer.h"
13
15
16int cpp_token_buffert::LookAhead(unsigned offset)
17{
18 assert(current_pos<=token_vector.size());
19
20 offset+=current_pos;
21
22 while(offset>=token_vector.size())
23 read_token();
24
25 return token_vector[offset]->kind;
26}
27
29{
30 assert(current_pos<=token_vector.size());
31
32 if(token_vector.size()==current_pos)
33 read_token();
34
36
38
39 return token.kind;
40}
41
43{
44 assert(current_pos<=token_vector.size());
45
46 if(token_vector.size()==current_pos)
47 read_token();
48
49 int kind=token_vector[current_pos]->kind;
50
52
53 return kind;
54}
55
56int cpp_token_buffert::LookAhead(unsigned offset, cpp_tokent &token)
57{
58 assert(current_pos<=token_vector.size());
59
60 offset+=current_pos;
61
62 while(offset>=token_vector.size())
63 read_token();
64
65 token=*token_vector[offset];
66
67 return token.kind;
68}
69
71extern char *yyansi_ctext;
72
74{
75 tokens.push_back(cpp_tokent());
76 token_vector.push_back(--tokens.end());
77
78 int kind;
79
80 ansi_c_parser.stack.clear();
81 kind=yyansi_clex();
82 tokens.back().text=yyansi_ctext;
83 if(ansi_c_parser.stack.size()==1)
84 {
85 tokens.back().data=ansi_c_parser.stack.front();
86 tokens.back().line_no=ansi_c_parser.get_line_no();
87 tokens.back().filename=ansi_c_parser.get_file();
88 }
89
90 // std::cout << "TOKEN: " << kind << " " << tokens.back().text << '\n';
91
92 tokens.back().kind=kind;
93
94 // std::cout << "II: " << token_vector.back()->kind << '\n';
95 // std::cout << "I2: " << token_vector.size() << '\n';
96}
97
99{
100 return current_pos;
101}
102
104{
106}
107
109{
110 assert(current_pos<=token_vector.size());
111
112 if(token_vector.size()==current_pos)
113 read_token();
114
116}
117
119{
120 assert(current_pos<=token_vector.size());
121
122 tokens.push_back(token);
123
125 --tokens.end());
126}
char * yyansi_ctext
ansi_c_parsert ansi_c_parser
int LookAhead(unsigned offset)
void Replace(const cpp_tokent &token)
std::vector< tokenst::iterator > token_vector
void Insert(const cpp_tokent &token)
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