Added upstream from http://ftp.icm.edu.pl/pub/loglan/
[loglan.git] / loglan96 / loglan93 / objects.h
1 //**************************************
2 //* Class Location :                   *
3 //*  Class used for storing location   *
4 //*  of an object                      *
5 //**************************************
6
7 void error(char *);     // outputs an error message then exits.
8
9 class Location
10 {
11     int LineStart,      // Line number where the entity starts   
12         LineEnd,        // Line number where the entity ends.    
13         ColumnStart,    // Column number of the beginning of the entity.   
14         ColumnEnd;      // Column number of the end of the entity.   
15
16     int OK( void );     // Checks some properties of the object.
17
18   public:
19
20     // Several Constructors for initialisation of Location Object.
21     // The entity for the two first constructors is set to end at the same
22     // point than its beginnning.
23
24     // First constructor sets the Location to the beginning of the Text.
25     Location( void );
26
27     // Second constructor sets the Location to line Line and column Column.
28     // If Column is ommited, it is assumed that you are talking about the
29     // column 1.
30
31     Location( int Line , int Column = 1 );
32
33     // Last constructor for the ones who knows about the beginning and the
34     // end of the entity referenced.
35     Location( int First_Line, int First_Column,
36               int Last_Line, int Last_Column);
37
38     Location( const Location& );
39
40     // Set the point in the text where the entity ends.
41     void SetEnd( int Line, int Column );
42
43     // Move the beginning of the Location to the place indicated.
44     void Move( int Line , int Column );
45
46     // Advance the start position to n columns.
47     void Tab( int distance );
48
49     // Return the start position to next line.
50     void Cr( void );
51
52     void Select( int length );
53
54     void Advance( void );
55
56     void CrSelect( void );
57
58     // Overloading of the operator + for computing new Location
59     // The Location Object resulting begins at the first Location
60     // ( The most little position in the text) and ends at the
61     // last location (The furthest position).
62     friend Location operator + ( const Location& , const Location& );
63
64     // friend operation that allows to write the Location of the entity on
65     // the output stream.
66     friend ostream& operator << ( ostream& cout, Location there );
67 } ;
68
69 //**
70 //** Several structure used inside the lex and yacc structure
71 //**
72
73 //** LocInt : concatenation of a integer and a location Object.
74 typedef struct
75 {
76   int      Int;
77   Location *Loc;
78 } LocInt;
79
80 //** LocBool : concatenation of a boolean and a location Object.
81 typedef struct
82 {
83   int       Bool;
84   Location *Loc;
85 } LocBool;
86
87 //** LocInt : concatenation of a integer and a location Object.
88 typedef struct
89 {
90   double    Real;
91   Location *Loc;
92 } LocDouble;
93
94 //** LocStr : concatenation of a String and a location Object.
95 typedef struct
96 {
97   String   *Str;
98   Location *Loc;
99 } LocStr;
100
101 //** LocChar : concatenation of a character and a location Object.
102 typedef struct
103 {
104   char      Char;
105   Location *Loc;
106 } LocChar;
107
108 //*******************************************
109 //* Class ErrorEntry                        *
110 //*    This Class describes an error emited *
111 //* during the analysis of the text.        *
112 //*******************************************
113
114 enum ErrorKind {Warning,          // This entry is a warning.
115                 Error,            // This entry is a real error.
116                 Fatal,            // This entry is a spurious error.
117                 Internal,         // This error is because of the compiler.
118                 Operating_system, // This error is because of the operating system.
119                 Unknown};         // We don't know why an error has been generated.
120
121 class ErrorEntry
122 {
123   Location   place;            // Where it has happened.
124   int        number;           // The number of error encountered.
125   ErrorKind  kind;             // The type of error (see upper).
126   char      *comment;          // A precision about the error.
127
128   public:
129     // Two constructors to initialize an ErrorEntry object.
130
131     // First constructor, give the location of the error and its identification
132     ErrorEntry( Location, int, ErrorKind );
133
134     // Second constructor, just add a commend to the error.
135     ErrorEntry( Location, int, ErrorKind, char * );
136
137     // the friend operator << that allows to output the content of an
138     // ErrorEntry object into an output stream.
139     friend ostream operator << ( ostream& cout, ErrorEntry TheError);
140 } ;
141
142 //*******************************************
143 //* Class ErrorStorage                      *
144 //*    This class describes the object that *
145 //* holds all of the errors and warning     *
146 //* produced by the analysis phase.         *
147 //*******************************************
148
149 class ErrorStorage
150 {
151
152 } ;