lestes::lang::cplus::lex::line_numbers Class Reference

Token numbering filter. More...

#include <line_numbers.hh>

Inheritance diagram for lestes::lang::cplus::lex::line_numbers:

lestes::lang::cplus::lex::ucn_filter lestes::std::object lestes::std::mem::keystone List of all members.

Public Types

typedef ulint count_type
 Common type for counting tokens.

Public Member Functions

ptr< ucn_tokenread (void)
 Reads next token from input.

Static Public Member Functions

static ptr< line_numberscreate (void)
 Returns new instance, initialize with first row and column.

Protected Member Functions

 line_numbers (void)
 Creates the object, initializes with first row and column.

Private Member Functions

 line_numbers (const line_numbers &)
 Hides copy constructor.
line_numbersoperator= (const line_numbers &)
 Hides assignment operator.

Private Attributes

count_type line
 Line of the coming token.
count_type column
 Column of the coming token.

Detailed Description

Token numbering filter.

Performs assignment of relative line numbers and columns to tokens.

Definition at line 49 of file line_numbers.hh.


Member Typedef Documentation

typedef ulint lestes::lang::cplus::lex::line_numbers::count_type

Common type for counting tokens.

Definition at line 52 of file line_numbers.hh.


Constructor & Destructor Documentation

lestes::lang::cplus::lex::line_numbers::line_numbers ( void   )  [protected]

Creates the object, initializes with first row and column.

Creates the object, initializes with first line and column.

Postcondition:
line == 1

column == 1

Definition at line 49 of file line_numbers.cc.

Referenced by create().

00049                               :
00050         line(1),
00051         column(1)
00052 {
00053 }

lestes::lang::cplus::lex::line_numbers::line_numbers ( const line_numbers  )  [private]

Hides copy constructor.


Member Function Documentation

ptr< ucn_token > lestes::lang::cplus::lex::line_numbers::read ( void   )  [virtual]

Reads next token from input.

Reads next token, assigns line and column numbers. The line number is relative to the physical start of the file. It does not reflect the line directives yet.

Implements lestes::lang::cplus::lex::ucn_filter.

Definition at line 60 of file line_numbers.cc.

References column, lestes::lang::cplus::lex::simple_location::create(), lestes::lang::cplus::lex::ucn_filter::input_read(), lassert, line, lestes::lang::cplus::lex::ucn_token::TOK_BASIC, lestes::lang::cplus::lex::ucn_token::TOK_EOF, lestes::lang::cplus::lex::ucn_token::TOK_ERROR, and lestes::lang::cplus::lex::ucn_token::TOK_TRANSLATED.

00061 {
00062         ptr<simple_location> loc = simple_location::create(line,column);
00063         ptr<ucn_token> t = input_read();
00064         ucn_token_type utt = t->type_get();
00065         t = t->clone_location(loc);
00066 
00067         switch (utt) {
00068                 case ucn_token::TOK_BASIC:
00069                         // line end
00070                         if (t->value_get() == character::ascii_new_line) {
00071                                 // reset column
00072                                 column = 1;
00073                                 // update line
00074                                 line++;
00075                                 break;
00076                         }
00077                         // fall through
00078                 case ucn_token::TOK_TRANSLATED:
00079                         // update column
00080                         column++;
00081                         break;
00082                 case ucn_token::TOK_ERROR:
00083                 case ucn_token::TOK_EOF:
00084                         // no need to update line or column
00085                         break;
00086                 default:
00087                         // TODO pt ICE
00088                         lassert(false);
00089                         break;
00090         }
00091         return t;
00092 }

ptr< line_numbers > lestes::lang::cplus::lex::line_numbers::create ( void   )  [static]

Returns new instance, initialize with first row and column.

Returns new instance.

Returns:
New instance of this class.

Definition at line 98 of file line_numbers.cc.

References line_numbers().

00099 {
00100         return new line_numbers();
00101 }

line_numbers& lestes::lang::cplus::lex::line_numbers::operator= ( const line_numbers  )  [private]

Hides assignment operator.


Member Data Documentation

count_type lestes::lang::cplus::lex::line_numbers::line [private]

Line of the coming token.

Definition at line 62 of file line_numbers.hh.

Referenced by read().

count_type lestes::lang::cplus::lex::line_numbers::column [private]

Column of the coming token.

Definition at line 64 of file line_numbers.hh.

Referenced by read().


The documentation for this class was generated from the following files:
Generated on Mon Feb 12 18:24:17 2007 for lestes by doxygen 1.5.1-20070107