cprover
Loading...
Searching...
No Matches
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
{
16
PRECONDITION
(
current_pos
<=
token_vector
.size());
17
18
offset+=
current_pos
;
19
20
while
(offset>=
token_vector
.size())
21
read_token
();
22
23
return
token_vector
[offset]->kind;
24
}
25
26
int
cpp_token_buffert::get_token
(
cpp_tokent
&token)
27
{
28
PRECONDITION
(
current_pos
<=
token_vector
.size());
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
40
int
cpp_token_buffert::get_token
()
41
{
42
PRECONDITION
(
current_pos
<=
token_vector
.size());
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
{
56
PRECONDITION
(
current_pos
<=
token_vector
.size());
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
68
int
yyansi_clex
();
69
extern
char
*
yyansi_ctext
;
70
71
void
cpp_token_buffert::read_token
()
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
96
cpp_token_buffert::post
cpp_token_buffert::Save
()
97
{
98
return
current_pos
;
99
}
100
101
void
cpp_token_buffert::Restore
(
post
pos
)
102
{
103
current_pos
=
pos
;
104
}
105
106
void
cpp_token_buffert::Replace
(
const
cpp_tokent
&token)
107
{
108
PRECONDITION
(
current_pos
<=
token_vector
.size());
109
110
if
(
token_vector
.size()==
current_pos
)
111
read_token
();
112
113
*
token_vector
[
current_pos
]=token;
114
}
115
116
void
cpp_token_buffert::Insert
(
const
cpp_tokent
&token)
117
{
118
PRECONDITION
(
current_pos
<=
token_vector
.size());
119
120
tokens
.push_back(token);
121
122
token_vector
.insert(
token_vector
.begin()+
current_pos
,
123
--
tokens
.end());
124
}
cpp_token_buffert::LookAhead
int LookAhead(unsigned offset)
Definition
cpp_token_buffer.cpp:14
cpp_token_buffert::ansi_c_parser
ansi_c_parsert ansi_c_parser
Definition
cpp_token_buffer.h:67
cpp_token_buffert::post
unsigned int post
Definition
cpp_token_buffer.h:41
cpp_token_buffert::Save
post Save()
Definition
cpp_token_buffer.cpp:96
cpp_token_buffert::read_token
void read_token()
Definition
cpp_token_buffer.cpp:71
cpp_token_buffert::Replace
void Replace(const cpp_tokent &token)
Definition
cpp_token_buffer.cpp:106
cpp_token_buffert::token_vector
std::vector< tokenst::iterator > token_vector
Definition
cpp_token_buffer.h:73
cpp_token_buffert::get_token
int get_token()
Definition
cpp_token_buffer.cpp:40
cpp_token_buffert::Restore
void Restore(post pos)
Definition
cpp_token_buffer.cpp:101
cpp_token_buffert::tokens
tokenst tokens
Definition
cpp_token_buffer.h:71
cpp_token_buffert::current_pos
post current_pos
Definition
cpp_token_buffer.h:75
cpp_token_buffert::Insert
void Insert(const cpp_tokent &token)
Definition
cpp_token_buffer.cpp:116
cpp_tokent
Definition
cpp_token.h:20
cpp_tokent::kind
int kind
Definition
cpp_token.h:22
yyansi_ctext
char * yyansi_ctext
yyansi_clex
int yyansi_clex()
cpp_token_buffer.h
C++ Parser: Token Buffer.
pos
literalt pos(literalt a)
Definition
literal.h:194
PRECONDITION
#define PRECONDITION(CONDITION)
Definition
invariant.h:463
cpp
cpp_token_buffer.cpp
Generated by
1.13.1