Vowpal Wabbit
Public Member Functions | Public Attributes | List of all members
TC_parser< audit > Class Template Reference

Public Member Functions

 ~TC_parser ()
 
void parserWarning (const char *message, char *begin, char *pos, const char *message2)
 
float featureValue ()
 
substring read_name ()
 
void maybeFeature ()
 
void nameSpaceInfoValue ()
 
void nameSpaceInfo ()
 
void listFeatures ()
 
void nameSpace ()
 
void listNameSpace ()
 
 TC_parser (char *reading_head, char *endLine, vw &all, example *ae)
 

Public Attributes

char * beginLine
 
char * reading_head
 
char * endLine
 
float cur_channel_v
 
bool new_index
 
size_t anon
 
uint64_t channel_hash
 
char * base
 
unsigned char index
 
float v
 
bool redefine_some
 
std::array< unsigned char, NUM_NAMESPACES > * redefine
 
parserp
 
exampleae
 
std::array< uint64_t, NUM_NAMESPACES > * affix_features
 
std::array< bool, NUM_NAMESPACES > * spelling_features
 
v_array< char > spelling
 
uint32_t hash_seed
 
uint64_t parse_mask
 
std::array< std::vector< feature_dict * >, NUM_NAMESPACES > * namespace_dictionaries
 

Detailed Description

template<bool audit>
class TC_parser< audit >

Definition at line 50 of file parse_example.cc.

Constructor & Destructor Documentation

◆ ~TC_parser()

template<bool audit>
TC_parser< audit >::~TC_parser ( )
inline

Definition at line 75 of file parse_example.cc.

75 {}

◆ TC_parser()

template<bool audit>
TC_parser< audit >::TC_parser ( char *  reading_head,
char *  endLine,
vw all,
example ae 
)
inline

Definition at line 401 of file parse_example.cc.

References TC_parser< audit >::ae, vw::affix_features, TC_parser< audit >::endLine, vw::hash_seed, TC_parser< audit >::listNameSpace(), vw::namespace_dictionaries, vw::p, vw::parse_mask, TC_parser< audit >::reading_head, vw::redefine, vw::redefine_some, and vw::spelling_features.

402  {
403  spelling = v_init<char>();
404  if (endLine != reading_head)
405  {
406  this->beginLine = reading_head;
407  this->reading_head = reading_head;
408  this->endLine = endLine;
409  this->p = all.p;
410  this->redefine_some = all.redefine_some;
411  this->redefine = &all.redefine;
412  this->ae = ae;
413  this->affix_features = &all.affix_features;
416  this->base = nullptr;
417  this->hash_seed = all.hash_seed;
418  this->parse_mask = all.parse_mask;
419  listNameSpace();
420  if (base != nullptr)
421  free(base);
422  }
423  }
std::array< bool, NUM_NAMESPACES > spelling_features
Definition: global_data.h:477
std::array< std::vector< feature_dict * >, NUM_NAMESPACES > namespace_dictionaries
Definition: global_data.h:482
void listNameSpace()
char * endLine
bool redefine_some
Definition: global_data.h:467
std::array< std::vector< feature_dict * >, NUM_NAMESPACES > * namespace_dictionaries
bool redefine_some
std::array< uint64_t, NUM_NAMESPACES > affix_features
Definition: global_data.h:476
std::array< unsigned char, NUM_NAMESPACES > * redefine
char * base
uint64_t parse_mask
std::array< uint64_t, NUM_NAMESPACES > * affix_features
parser * p
Definition: global_data.h:377
parser * p
example * ae
uint32_t hash_seed
std::array< unsigned char, NUM_NAMESPACES > redefine
Definition: global_data.h:468
uint64_t parse_mask
Definition: global_data.h:453
char * reading_head
uint32_t hash_seed
Definition: global_data.h:401
v_array< char > spelling
std::array< bool, NUM_NAMESPACES > * spelling_features
char * beginLine

Member Function Documentation

◆ featureValue()

template<bool audit>
float TC_parser< audit >::featureValue ( )
inline

Definition at line 93 of file parse_example.cc.

References parseFloat(), TC_parser< audit >::parserWarning(), TC_parser< audit >::reading_head, and TC_parser< audit >::v.

Referenced by TC_parser< audit >::maybeFeature().

94  {
95  if (*reading_head == ' ' || *reading_head == '\t' || *reading_head == '|' || reading_head == endLine ||
96  *reading_head == '\r')
97  return 1.;
98  else if (*reading_head == ':')
99  {
100  // featureValue --> ':' 'Float'
101  ++reading_head;
102  char* end_read = nullptr;
103  v = parseFloat(reading_head, &end_read, endLine);
104  if (end_read == reading_head)
105  {
106  parserWarning("malformed example! Float expected after : \"", beginLine, reading_head, "\"");
107  }
108  if (std::isnan(v))
109  {
110  v = 0.f;
111  parserWarning("warning: invalid feature value:\"", reading_head, end_read, "\" read as NaN. Replacing with 0.");
112  }
113  reading_head = end_read;
114  return v;
115  }
116  else
117  {
118  // syntax error
119  parserWarning("malformed example! '|', ':', space, or EOL expected after : \"", beginLine, reading_head, "\"");
120  return 0.f;
121  }
122  }
char * endLine
char * reading_head
float parseFloat(char *p, char **end, char *endLine=nullptr)
char * beginLine
void parserWarning(const char *message, char *begin, char *pos, const char *message2)

◆ listFeatures()

template<bool audit>
void TC_parser< audit >::listFeatures ( )
inline

Definition at line 333 of file parse_example.cc.

References TC_parser< audit >::maybeFeature(), TC_parser< audit >::parserWarning(), and TC_parser< audit >::reading_head.

Referenced by TC_parser< audit >::nameSpace().

334  {
335  while ((*reading_head == ' ' || *reading_head == '\t') && (reading_head < endLine))
336  {
337  // listFeatures --> ' ' MaybeFeature ListFeatures
338  ++reading_head;
339  maybeFeature();
340  }
341  if (!(*reading_head == '|' || reading_head == endLine || *reading_head == '\r'))
342  {
343  // syntax error
344  parserWarning("malformed example! '|',space, or EOL expected after : \"", beginLine, reading_head, "\"");
345  }
346  }
char * endLine
void maybeFeature()
char * reading_head
char * beginLine
void parserWarning(const char *message, char *begin, char *pos, const char *message2)

◆ listNameSpace()

template<bool audit>
void TC_parser< audit >::listNameSpace ( )
inline

Definition at line 387 of file parse_example.cc.

References TC_parser< audit >::nameSpace(), TC_parser< audit >::parserWarning(), and TC_parser< audit >::reading_head.

Referenced by TC_parser< audit >::TC_parser().

388  {
389  while ((*reading_head == '|') && (reading_head < endLine)) // ListNameSpace --> '|' NameSpace ListNameSpace
390  {
391  ++reading_head;
392  nameSpace();
393  }
394  if (reading_head != endLine && *reading_head != '\r')
395  {
396  // syntax error
397  parserWarning("malformed example! '|' or EOL expected after : \"", beginLine, reading_head, "\"");
398  }
399  }
char * endLine
char * reading_head
char * beginLine
void parserWarning(const char *message, char *begin, char *pos, const char *message2)
void nameSpace()

◆ maybeFeature()

template<bool audit>
void TC_parser< audit >::maybeFeature ( )
inline

Definition at line 136 of file parse_example.cc.

References affix_constant, affix_namespace, substring::begin, v_array< T >::begin(), c, v_array< T >::clear(), v_array< T >::delete_v(), dictionary_namespace, substring::end, v_array< T >::end(), example_predict::feature_space, TC_parser< audit >::featureValue(), parser::hasher, hashstring(), id(), TC_parser< audit >::index, example_predict::indices, features::indicies, TC_parser< audit >::parse_mask, v_array< T >::push_back(), features::push_back(), push_many(), quadratic_constant, TC_parser< audit >::read_name(), v_array< T >::size(), features::size(), features::space_names, spelling_namespace, features::sum_feat_sq, uniform_hash(), and features::values.

Referenced by TC_parser< audit >::listFeatures().

137  {
138  if (*reading_head == ' ' || *reading_head == '\t' || *reading_head == '|' || reading_head == endLine ||
139  *reading_head == '\r')
140  {
141  // maybeFeature --> ø
142  }
143  else
144  {
145  // maybeFeature --> 'String' FeatureValue
146  substring feature_name = read_name();
148  uint64_t word_hash;
149  if (feature_name.end != feature_name.begin)
150  word_hash = (p->hasher(feature_name, channel_hash) & parse_mask);
151  else
152  word_hash = channel_hash + anon++;
153  if (v == 0)
154  return; // dont add 0 valued features to list of features
155  features& fs = ae->feature_space[index];
156  fs.push_back(v, word_hash);
157  if (audit)
158  {
159  v_array<char> feature_v = v_init<char>();
160  push_many(feature_v, feature_name.begin, feature_name.end - feature_name.begin);
161  feature_v.push_back('\0');
163  feature_v.delete_v();
164  }
165  if ((*affix_features)[index] > 0 && (feature_name.end != feature_name.begin))
166  {
168  if (affix_fs.size() == 0)
170  uint64_t affix = (*affix_features)[index];
171  while (affix > 0)
172  {
173  bool is_prefix = affix & 0x1;
174  uint64_t len = (affix >> 1) & 0x7;
175  substring affix_name = {feature_name.begin, feature_name.end};
176  if (affix_name.end > affix_name.begin + len)
177  {
178  if (is_prefix)
179  affix_name.end = affix_name.begin + len;
180  else
181  affix_name.begin = affix_name.end - len;
182  }
183  word_hash =
184  p->hasher(affix_name, (uint64_t)channel_hash) * (affix_constant + (affix & 0xF) * quadratic_constant);
185  affix_fs.push_back(v, word_hash);
186  if (audit)
187  {
188  v_array<char> affix_v = v_init<char>();
189  if (index != ' ')
190  affix_v.push_back(index);
191  affix_v.push_back(is_prefix ? '+' : '-');
192  affix_v.push_back('0' + (char)len);
193  affix_v.push_back('=');
194  push_many(affix_v, affix_name.begin, affix_name.end - affix_name.begin);
195  affix_v.push_back('\0');
196  affix_fs.space_names.push_back(audit_strings_ptr(new audit_strings("affix", affix_v.begin())));
197  }
198  affix >>= 4;
199  }
200  }
201  if ((*spelling_features)[index])
202  {
204  if (spell_fs.size() == 0)
206  // v_array<char> spelling;
207  spelling.clear();
208  for (char* c = feature_name.begin; c != feature_name.end; ++c)
209  {
210  char d = 0;
211  if ((*c >= '0') && (*c <= '9'))
212  d = '0';
213  else if ((*c >= 'a') && (*c <= 'z'))
214  d = 'a';
215  else if ((*c >= 'A') && (*c <= 'Z'))
216  d = 'A';
217  else if (*c == '.')
218  d = '.';
219  else
220  d = '#';
221  // if ((spelling.size() == 0) || (spelling.last() != d))
222  spelling.push_back(d);
223  }
224  substring spelling_ss = {spelling.begin(), spelling.end()};
225  uint64_t word_hash = hashstring(spelling_ss, (uint64_t)channel_hash);
226  spell_fs.push_back(v, word_hash);
227  if (audit)
228  {
229  v_array<char> spelling_v = v_init<char>();
230  if (index != ' ')
231  {
232  spelling_v.push_back(index);
233  spelling_v.push_back('_');
234  }
235  push_many(spelling_v, spelling_ss.begin, spelling_ss.end - spelling_ss.begin);
236  spelling_v.push_back('\0');
237  spell_fs.space_names.push_back(audit_strings_ptr(new audit_strings("spelling", spelling_v.begin())));
238  }
239  }
240  if ((*namespace_dictionaries)[index].size() > 0)
241  {
242  for (auto map : (*namespace_dictionaries)[index])
243  {
244  uint64_t hash = uniform_hash(feature_name.begin, feature_name.end - feature_name.begin, quadratic_constant);
245  features* feats = map->get(feature_name, hash);
246  if ((feats != nullptr) && (feats->values.size() > 0))
247  {
249  if (dict_fs.size() == 0)
251  push_many(dict_fs.values, feats->values.begin(), feats->values.size());
252  push_many(dict_fs.indicies, feats->indicies.begin(), feats->indicies.size());
253  dict_fs.sum_feat_sq += feats->sum_feat_sq;
254  if (audit)
255  for (size_t i = 0; i < feats->indicies.size(); ++i)
256  {
257  uint64_t id = feats->indicies[i];
258  std::stringstream ss;
259  ss << index << '_';
260  for (char* fc = feature_name.begin; fc != feature_name.end; ++fc) ss << *fc;
261  ss << '=' << id;
262  dict_fs.space_names.push_back(audit_strings_ptr(new audit_strings("dictionary", ss.str())));
263  }
264  }
265  }
266  }
267  }
268  }
size_t anon
v_array< namespace_index > indices
substring read_name()
unsigned char index
uint64_t channel_hash
void push_back(feature_value v, feature_index i)
char * endLine
std::shared_ptr< audit_strings > audit_strings_ptr
Definition: feature_group.h:23
char * end
Definition: hashstring.h:10
constexpr unsigned char affix_namespace
Definition: constant.h:27
char * begin
Definition: hashstring.h:9
constexpr int quadratic_constant
Definition: constant.h:7
v_array< feature_index > indicies
the core definition of a set of features.
VW_STD14_CONSTEXPR uint64_t uniform_hash(const void *key, size_t len, uint64_t seed)
Definition: hash.h:67
std::array< std::vector< feature_dict * >, NUM_NAMESPACES > * namespace_dictionaries
v_array< feature_value > values
hash_func_t hasher
Definition: parser.h:73
float cur_channel_v
constexpr unsigned char spelling_namespace
Definition: constant.h:28
char * base
T *& begin()
Definition: v_array.h:42
uint64_t parse_mask
size_t size() const
Definition: v_array.h:68
std::array< uint64_t, NUM_NAMESPACES > * affix_features
std::array< features, NUM_NAMESPACES > feature_space
size_t size() const
parser * p
void push_many(v_array< T > &v, const T *_begin, size_t num)
Definition: v_array.h:207
void push_back(const T &new_ele)
Definition: v_array.h:107
example * ae
float id(float in)
Definition: scorer.cc:51
void clear()
Definition: v_array.h:88
constexpr unsigned char dictionary_namespace
Definition: constant.h:30
T *& end()
Definition: v_array.h:43
v_array< audit_strings_ptr > space_names
constexpr int affix_constant
Definition: constant.h:10
float featureValue()
float sum_feat_sq
VW_STD14_CONSTEXPR uint64_t hashstring(substring s, uint64_t h)
Definition: hashstring.h:18
char * reading_head
v_array< char > spelling
void delete_v()
Definition: v_array.h:98
std::array< bool, NUM_NAMESPACES > * spelling_features
constexpr uint64_t c
Definition: rand48.cc:12
std::pair< std::string, std::string > audit_strings
Definition: feature_group.h:22

◆ nameSpace()

template<bool audit>
void TC_parser< audit >::nameSpace ( )
inline

Definition at line 348 of file parse_example.cc.

References example_predict::feature_space, example_predict::indices, TC_parser< audit >::listFeatures(), TC_parser< audit >::nameSpaceInfo(), TC_parser< audit >::parserWarning(), v_array< T >::push_back(), and uniform_hash().

Referenced by TC_parser< audit >::listNameSpace().

349  {
350  cur_channel_v = 1.0;
351  index = 0;
352  new_index = false;
353  anon = 0;
354  if (*reading_head == ' ' || *reading_head == '\t' || reading_head == endLine || *reading_head == '|' ||
355  *reading_head == '\r')
356  {
357  // NameSpace --> ListFeatures
358  index = (unsigned char)' ';
359  if (ae->feature_space[index].size() == 0)
360  new_index = true;
361  if (audit)
362  {
363  if (base != nullptr)
364  free(base);
365  base = calloc_or_throw<char>(2);
366  base[0] = ' ';
367  base[1] = '\0';
368  }
369  channel_hash = this->hash_seed == 0 ? 0 : uniform_hash("", 0, this->hash_seed);
370  listFeatures();
371  }
372  else if (*reading_head != ':')
373  {
374  // NameSpace --> NameSpaceInfo ListFeatures
375  nameSpaceInfo();
376  listFeatures();
377  }
378  else
379  {
380  // syntax error
381  parserWarning("malformed example! '|',String,space, or EOL expected after : \"", beginLine, reading_head, "\"");
382  }
383  if (new_index && ae->feature_space[index].size() > 0)
385  }
size_t anon
v_array< namespace_index > indices
unsigned char index
uint64_t channel_hash
char * endLine
VW_STD14_CONSTEXPR uint64_t uniform_hash(const void *key, size_t len, uint64_t seed)
Definition: hash.h:67
float cur_channel_v
char * base
void listFeatures()
std::array< features, NUM_NAMESPACES > feature_space
void push_back(const T &new_ele)
Definition: v_array.h:107
example * ae
bool new_index
void nameSpaceInfo()
uint32_t hash_seed
char * reading_head
char * beginLine
void parserWarning(const char *message, char *begin, char *pos, const char *message2)

◆ nameSpaceInfo()

template<bool audit>
void TC_parser< audit >::nameSpaceInfo ( )
inline

Definition at line 302 of file parse_example.cc.

References substring::begin, v_array< T >::begin(), substring::end, example_predict::feature_space, parser::hasher, TC_parser< audit >::index, TC_parser< audit >::nameSpaceInfoValue(), TC_parser< audit >::parserWarning(), v_array< T >::push_back(), push_many(), and TC_parser< audit >::read_name().

Referenced by TC_parser< audit >::nameSpace().

303  {
304  if (reading_head == endLine || *reading_head == '|' || *reading_head == ' ' || *reading_head == '\t' ||
305  *reading_head == ':' || *reading_head == '\r')
306  {
307  // syntax error
308  parserWarning("malformed example! String expected after : \"", beginLine, reading_head, "\"");
309  }
310  else
311  {
312  // NameSpaceInfo --> 'String' NameSpaceInfoValue
313  index = (unsigned char)(*reading_head);
314  if (redefine_some)
315  index = (*redefine)[index]; // redefine index
316  if (ae->feature_space[index].size() == 0)
317  new_index = true;
318  substring name = read_name();
319  if (audit)
320  {
321  v_array<char> base_v_array = v_init<char>();
322  push_many(base_v_array, name.begin, name.end - name.begin);
323  base_v_array.push_back('\0');
324  if (base != nullptr)
325  free(base);
326  base = base_v_array.begin();
327  }
328  channel_hash = p->hasher(name, this->hash_seed);
330  }
331  }
void nameSpaceInfoValue()
substring read_name()
unsigned char index
uint64_t channel_hash
char * endLine
char * end
Definition: hashstring.h:10
char * begin
Definition: hashstring.h:9
bool redefine_some
hash_func_t hasher
Definition: parser.h:73
char * base
T *& begin()
Definition: v_array.h:42
std::array< features, NUM_NAMESPACES > feature_space
parser * p
void push_many(v_array< T > &v, const T *_begin, size_t num)
Definition: v_array.h:207
void push_back(const T &new_ele)
Definition: v_array.h:107
example * ae
bool new_index
uint32_t hash_seed
char * reading_head
char * beginLine
void parserWarning(const char *message, char *begin, char *pos, const char *message2)

◆ nameSpaceInfoValue()

template<bool audit>
void TC_parser< audit >::nameSpaceInfoValue ( )
inline

Definition at line 270 of file parse_example.cc.

References parseFloat(), TC_parser< audit >::parserWarning(), and TC_parser< audit >::reading_head.

Referenced by TC_parser< audit >::nameSpaceInfo().

271  {
272  if (*reading_head == ' ' || *reading_head == '\t' || reading_head == endLine || *reading_head == '|' ||
273  *reading_head == '\r')
274  {
275  // nameSpaceInfoValue --> ø
276  }
277  else if (*reading_head == ':')
278  {
279  // nameSpaceInfoValue --> ':' 'Float'
280  ++reading_head;
281  char* end_read = nullptr;
282  cur_channel_v = parseFloat(reading_head, &end_read);
283  if (end_read == reading_head)
284  {
285  parserWarning("malformed example! Float expected after : \"", beginLine, reading_head, "\"");
286  }
287  if (std::isnan(cur_channel_v))
288  {
289  cur_channel_v = 1.f;
291  "warning: invalid namespace value:\"", reading_head, end_read, "\" read as NaN. Replacing with 1.");
292  }
293  reading_head = end_read;
294  }
295  else
296  {
297  // syntax error
298  parserWarning("malformed example! '|',':', space, or EOL expected after : \"", beginLine, reading_head, "\"");
299  }
300  }
char * endLine
float cur_channel_v
char * reading_head
float parseFloat(char *p, char **end, char *endLine=nullptr)
char * beginLine
void parserWarning(const char *message, char *begin, char *pos, const char *message2)

◆ parserWarning()

template<bool audit>
void TC_parser< audit >::parserWarning ( const char *  message,
char *  begin,
char *  pos,
const char *  message2 
)
inline

Definition at line 77 of file parse_example.cc.

References parser::end_parsed_examples, parser::strict_parse, and THROW_EX.

Referenced by TC_parser< audit >::featureValue(), TC_parser< audit >::listFeatures(), TC_parser< audit >::listNameSpace(), TC_parser< audit >::nameSpace(), TC_parser< audit >::nameSpaceInfo(), and TC_parser< audit >::nameSpaceInfoValue().

78  {
79  std::stringstream ss;
80  ss << message << std::string(begin, pos - begin).c_str() << message2 << "in Example #"
81  << this->p->end_parsed_examples << ": \"" << std::string(this->beginLine, this->endLine).c_str() << "\""
82  << std::endl;
83  if (p->strict_parse)
84  {
86  }
87  else
88  {
89  std::cerr << ss.str();
90  }
91  }
char * endLine
#define THROW_EX(ex, args)
Definition: vw_exception.h:188
bool strict_parse
Definition: parser.h:107
parser * p
uint64_t end_parsed_examples
Definition: parser.h:82
char * beginLine

◆ read_name()

template<bool audit>
substring TC_parser< audit >::read_name ( )
inline

Definition at line 124 of file parse_example.cc.

References substring::begin, substring::end, and TC_parser< audit >::reading_head.

Referenced by TC_parser< audit >::maybeFeature(), and TC_parser< audit >::nameSpaceInfo().

125  {
126  substring ret;
127  ret.begin = reading_head;
128  while (!(*reading_head == ' ' || *reading_head == ':' || *reading_head == '\t' || *reading_head == '|' ||
129  reading_head == endLine || *reading_head == '\r'))
130  ++reading_head;
131  ret.end = reading_head;
132 
133  return ret;
134  }
char * endLine
char * end
Definition: hashstring.h:10
char * begin
Definition: hashstring.h:9
char * reading_head

Member Data Documentation

◆ ae

template<bool audit>
example* TC_parser< audit >::ae

Definition at line 66 of file parse_example.cc.

Referenced by TC_parser< audit >::TC_parser().

◆ affix_features

template<bool audit>
std::array<uint64_t, NUM_NAMESPACES>* TC_parser< audit >::affix_features

Definition at line 67 of file parse_example.cc.

◆ anon

template<bool audit>
size_t TC_parser< audit >::anon

Definition at line 58 of file parse_example.cc.

◆ base

template<bool audit>
char* TC_parser< audit >::base

Definition at line 60 of file parse_example.cc.

◆ beginLine

template<bool audit>
char* TC_parser< audit >::beginLine

Definition at line 53 of file parse_example.cc.

◆ channel_hash

template<bool audit>
uint64_t TC_parser< audit >::channel_hash

Definition at line 59 of file parse_example.cc.

◆ cur_channel_v

template<bool audit>
float TC_parser< audit >::cur_channel_v

Definition at line 56 of file parse_example.cc.

◆ endLine

template<bool audit>
char* TC_parser< audit >::endLine

Definition at line 55 of file parse_example.cc.

Referenced by TC_parser< audit >::TC_parser().

◆ hash_seed

template<bool audit>
uint32_t TC_parser< audit >::hash_seed

Definition at line 70 of file parse_example.cc.

◆ index

template<bool audit>
unsigned char TC_parser< audit >::index

◆ namespace_dictionaries

template<bool audit>
std::array<std::vector<feature_dict*>, NUM_NAMESPACES>* TC_parser< audit >::namespace_dictionaries

Definition at line 73 of file parse_example.cc.

◆ new_index

template<bool audit>
bool TC_parser< audit >::new_index

Definition at line 57 of file parse_example.cc.

◆ p

template<bool audit>
parser* TC_parser< audit >::p

Definition at line 65 of file parse_example.cc.

◆ parse_mask

template<bool audit>
uint64_t TC_parser< audit >::parse_mask

Definition at line 71 of file parse_example.cc.

Referenced by TC_parser< audit >::maybeFeature().

◆ reading_head

template<bool audit>
char* TC_parser< audit >::reading_head

◆ redefine

template<bool audit>
std::array<unsigned char, NUM_NAMESPACES>* TC_parser< audit >::redefine

Definition at line 64 of file parse_example.cc.

◆ redefine_some

template<bool audit>
bool TC_parser< audit >::redefine_some

Definition at line 63 of file parse_example.cc.

◆ spelling

template<bool audit>
v_array<char> TC_parser< audit >::spelling

Definition at line 69 of file parse_example.cc.

◆ spelling_features

template<bool audit>
std::array<bool, NUM_NAMESPACES>* TC_parser< audit >::spelling_features

Definition at line 68 of file parse_example.cc.

◆ v

template<bool audit>
float TC_parser< audit >::v

Definition at line 62 of file parse_example.cc.

Referenced by TC_parser< audit >::featureValue().


The documentation for this class was generated from the following file: