#include <special_tokens.hh>
Inheritance diagram for lestes::lang::cplus::lex::special_tokens:

Public Member Functions | |
| ptr< ucn_token > | read (void) |
| Reads next token. | |
Static Public Member Functions | |
| static ptr< special_tokens > | create (void) |
| Returns new instance. | |
Protected Member Functions | |
| special_tokens (void) | |
| Creates the object. | |
| virtual void | gc_mark (void) |
| Marks the object. | |
Private Types | |
| enum | { ERRORS_LIMIT = 8 } |
| enum | state_type { START, END } |
| States of the automaton. More... | |
Private Member Functions | |
| special_tokens (const special_tokens ©) | |
| Hides copy constructor. | |
| special_tokens & | operator= (const special_tokens &rhs) |
| Hides assignment operator. | |
Private Attributes | |
| state_type | state |
| Current state of the parser. | |
| srp< ucn_token > | saved |
| Saved token. | |
| ulint | errors |
| Number of incoming errors. | |
Assigns type to tokens according to their value. Checks invalid values of characters. Cuts input flooding errors
Definition at line 53 of file special_tokens.hh.
anonymous enum [private] |
Definition at line 65 of file special_tokens.hh.
00065 { 00066 //! Number of errors to cut the input. 00067 ERRORS_LIMIT = 8 00068 };
enum lestes::lang::cplus::lex::special_tokens::state_type [private] |
States of the automaton.
Definition at line 74 of file special_tokens.hh.
00074 { 00075 //! Ordinary tokens. 00076 START, 00077 //! Already encountered end of file. 00078 END 00079 } state_type;
| lestes::lang::cplus::lex::special_tokens::special_tokens | ( | void | ) | [protected] |
| lestes::lang::cplus::lex::special_tokens::special_tokens | ( | const special_tokens & | copy | ) | [private] |
Hides copy constructor.
| ptr< ucn_token > lestes::lang::cplus::lex::special_tokens::read | ( | void | ) | [virtual] |
Reads next token.
Returns next token, assigns token type. Saves the EOF token to return it again. Tries to stop the error flood from encoder by sending EOF.
Implements lestes::lang::cplus::lex::ucn_filter.
Definition at line 63 of file special_tokens.cc.
References lestes::lang::cplus::lex::ucn_token::create(), lestes::msg::message::create(), lestes::lang::cplus::lex::ucn_token::create_error(), END, errors, ERRORS_LIMIT, lestes::msg::message::FLG_ERROR, lestes::lang::cplus::lex::ucn_filter::input_read(), lassert2, saved, state, lestes::lang::cplus::lex::ucn_token::TOK_BASIC, lestes::lang::cplus::lex::ucn_token::TOK_EOF, lestes::lang::cplus::lex::ucn_token::TOK_ERROR, lestes::lang::cplus::lex::ucn_token::TOK_NOT_EOF, lestes::lang::cplus::lex::ucn_token::TOK_TRANSLATED, and u.
00064 { 00065 if (state == END) 00066 return saved; 00067 00068 ptr<ucn_token> t = input_read(); 00069 ucn_token_type utt = t->type_get(); 00070 ucn u = t->value_get(); 00071 00072 switch (utt) { 00073 case ucn_token::TOK_NOT_EOF: 00074 if (character::is_basic(u)) { 00075 t = t->clone_type(ucn_token::TOK_BASIC); 00076 } else if (character::is_translated(u)) { 00077 t = t->clone_type(ucn_token::TOK_TRANSLATED); 00078 } else { 00079 // TODO pt report error: character value out of range 00080 t = ucn_token::create_error(::lestes::msg::message::create(0xdead,"TODO char out of range",::lestes::msg::message::FLG_ERROR)); 00081 } 00082 break; 00083 case ucn_token::TOK_ERROR: 00084 ++errors; 00085 if (errors < ERRORS_LIMIT) 00086 break; 00087 00088 // prepare fake EOF 00089 saved = ucn_token::create(ucn_token::TOK_EOF,0,t->location_get()); 00090 // TODO pt report error: wrong encoding in source, stopping 00091 t = ucn_token::create_error( 00092 ::lestes::msg::message::create(0xbeef,"TODO flood",::lestes::msg::message::FLG_ERROR)); 00093 state = END; 00094 break; 00095 case ucn_token::TOK_EOF: 00096 saved = t; 00097 state = END; 00098 break; 00099 default: 00100 lassert2(false,"You should never get here"); 00101 } 00102 00103 return t; 00104 }
| ptr< special_tokens > lestes::lang::cplus::lex::special_tokens::create | ( | void | ) | [static] |
Returns new instance.
Returns new instance.
Definition at line 119 of file special_tokens.cc.
References special_tokens().
00120 { 00121 return new special_tokens(); 00122 }
| void lestes::lang::cplus::lex::special_tokens::gc_mark | ( | void | ) | [protected, virtual] |
Marks the object.
Marks the object.
Reimplemented from lestes::lang::cplus::lex::ucn_filter.
Definition at line 109 of file special_tokens.cc.
References lestes::lang::cplus::lex::ucn_filter::gc_mark().
00110 { 00111 ucn_filter::gc_mark(); 00112 }
| special_tokens& lestes::lang::cplus::lex::special_tokens::operator= | ( | const special_tokens & | rhs | ) | [private] |
Hides assignment operator.
srp<ucn_token> lestes::lang::cplus::lex::special_tokens::saved [private] |
ulint lestes::lang::cplus::lex::special_tokens::errors [private] |
1.5.1-20070107