CBMC
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
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
14int 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
34
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
50
51 return kind;
52}
53
54int 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
69extern 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
100
105
107{
109
110 if(token_vector.size()==current_pos)
111 read_token();
112
114}
115
117{
119
120 tokens.push_back(token);
121
123 --tokens.end());
124}
ait supplies three of the four components needed: an abstract interpreter (in this case handling func...
Definition ai.h:562
int LookAhead(unsigned offset)
ansi_c_parsert ansi_c_parser
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:96
irep_idt get_file() const
Definition parser.h:91
std::vector< exprt > stack
Definition parser.h:31
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