ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ»Π°ΡΡ string ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π²ΡΠ΅ ΠΏΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ-ΡΠ»Π΅Π½ΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ. ΠΡΠ»ΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΡΡΠΎΠΊΡ ΠΈ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡ Π΅Π΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΈΠ»ΠΈ ΠΎΠ΄Π½Ρ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ-ΡΠ»Π΅Π½ΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, ΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠΈΠ½ΡΠ΅Π·ΠΈΡΡΠ΅Ρ ΡΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΊΠ°ΠΊ ΡΠ΄Π°Π»Π΅Π½Π½ΡΡ. ΠΡΠ»ΠΈ Ρ ΠΊΠ»Π°ΡΡΠ° Π±ΡΠ΄Π΅Ρ ΡΠ»Π΅Π½ ΡΠΈΠΏΠ° ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΡΠ΄Π°Π»Π΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ-ΡΠ»Π΅Π½ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, ΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ (ΡΡΠ½ΠΊΡΠΈΠΈ) ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π°Π»Π΅Π½Π°.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ»Π΅Π½Π°ΠΌΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡΠΠ·-Π·Π° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ»Π΅Π½ΠΎΠ² ΡΠΈΠΏΠ° ΠΊΠ»Π°ΡΡΠ° ΡΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΡΡΡΠ°ΠΈΠ²Π°ΡΡ Π² Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠ»Π°ΡΡΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠ»Π°ΡΡ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ ΠΈΠ· ΠΈ Π² ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΈΠΏΠ° ΠΊΠ»Π°ΡΡΠ°. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π½ ΠΊΠ»Π°ΡΡΠ° string. ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ΅ ΠΈ ΡΠ΄Π΅Π»Π°Π΅ΠΌ Π΅Π³ΠΎ ΡΠ»Π΅Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ° Token. ΠΠ»Π°ΡΡ Token Π±ΡΠ΄Π΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ»Π΅Π½Π°ΠΌΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ.
ΠΠ»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ Π²ΠΈΠ΄Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ ΡΠ°Π½ΠΈΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π΄ΠΈΡΠΊΡΠΈΠΌΠΈΠ½Π°Π½Ρ (discriminant). ΠΠΈΡΠΊΡΠΈΠΌΠΈΠ½Π°Π½Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅. ΠΠ»Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΈ Π΅Π³ΠΎ Π΄ΠΈΡΠΊΡΠΈΠΌΠΈΠ½Π°Π½ΡΠ° ΡΠ΄Π΅Π»Π°Π΅ΠΌ Π΄ΠΈΡΠΊΡΠΈΠΌΠΈΠ½Π°Π½Ρ ΡΠ°ΠΊΠΆΠ΅ ΡΠ»Π΅Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ° Token. ΠΠ»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΠ»Π΅Π½Π° ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡ ΡΠ»Π΅Π½ ΡΠΈΠΏΠ° ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 19.3).
ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠΌΠΈ ΠΊΠ»Π°ΡΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π±ΡΠ΄ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ, ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠ»Π΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΡΡΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ, ΡΠΏΠΎΡΠΎΠ±Π½ΡΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠΈΠΏΠΎΠ² ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΡΠ»Π΅Π½Ρ Π΄ΡΡΠ³ΠΎΠ³ΠΎ:
class Token {
public:
// ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ Ρ ΠΊΠ»Π°ΡΡΠ°
// Π΅ΡΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ ΡΠ»Π΅Π½ΠΎΠΌ ΡΠΈΠΏΠ° string
// ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΠΏΡΠΈ
// ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΎΡΡΠ°Π΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡ
Token(): tok(INT), ival{0} { }
Token(const Token &t): tok(t.tok) { copyUnion(t); }
Token &operator=(const Token&);
// Π΅ΡΠ»ΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΡΠΎΠΊΡ, Π΅Π΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠ΄Π°Π»ΡΡΡ;
// ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 19.1.2
~Token() { if (tok == STR) sval.~string(); }
// ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ°Π·Π½ΡΡ ΡΠ»Π΅Π½ΠΎΠ² ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ
Token &operator=(const std::string&);
Token &operator=(char);
Token &operator=(int);
Token &operator=(double);
private:
enum {INT, CHAR, DBL, STR} tok; // Π΄ΠΈΡΠΊΡΠΈΠΌΠΈΠ½Π°Π½Ρ
union { // Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅
char cval;
int ival;
double dval;
std::string sval;
}; // Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ° Token Π΅ΡΡΡ Π±Π΅Π·ΡΠΌΡΠ½Π½ΡΠΉ ΡΠ»Π΅Π½ ΡΠΈΠΏΠ° ΡΡΠΎΠ³ΠΎ
// Π±Π΅Π·ΡΠΌΡΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ
// ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π΄ΠΈΡΠΊΡΠΈΠΌΠΈΠ½Π°Π½Ρ ΠΈ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠ»Π΅Π½ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, ΠΊΠ°ΠΊ Π½Π°Π΄ΠΎ
void copyUnion(const Token&);
};
ΠΠ»Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅, Π±Π΅Π·ΡΠΌΡΠ½Π½ΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Ρ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 19.3), ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ΅ ΠΊΠ°ΠΊ ΡΠΈΠΏ ΡΠ»Π΅Π½Π° tok. Π§Π»Π΅Π½ tok ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΊΡΡΠ²Π°ΡΡΠ΅ΠΉ ΡΠΈΠ³ΡΡΠ½ΠΎΠΉ ΡΠΊΠΎΠ±ΠΊΠΈ ΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΡΠΎΡΠΊΠΎΠΉ Ρ Π·Π°ΠΏΡΡΠΎΠΉ, Π·Π°Π²Π΅ΡΡΠ°ΡΡΠ΅ΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ tok, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅ΡΡΠΈΠΉ ΡΠΈΠΏ ΡΡΠΎΠ³ΠΎ Π±Π΅Π·ΡΠΌΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 2.6.1).
Π§Π»Π΅Π½ tok Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ Π΄ΠΈΡΠΊΡΠΈΠΌΠΈΠ½Π°Π½Ρ. ΠΠΎΠ³Π΄Π° ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° int, ΡΠ»Π΅Π½ tok Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ INT; Π΅ΡΠ»ΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° string, ΡΠΎ ΡΠ»Π΅Π½ tok ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ STR ΠΈ Ρ.Π΄.
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ Π΄ΠΈΡΠΊΡΠΈΠΌΠΈΠ½Π°Π½Ρ ΠΈ ΡΠ»Π΅Π½ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΊΠ°ΠΊ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 0 ΡΠΈΠΏΠ° int.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ»Π΅Π½, ΠΊΠ»Π°ΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠΎΠΌ, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ, ΡΡΠΎΠ±Ρ (ΡΡΠ»ΠΎΠ²Π½ΠΎ) ΡΠ΄Π°Π»ΡΡΡ ΡΠ»Π΅Π½ ΡΠΈΠΏΠ° string. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΎΠ±ΡΡΠ½ΡΡ ΡΠ»Π΅Π½ΠΎΠ² ΡΠΈΠΏΠ° ΠΊΠ»Π°ΡΡΠ°, ΡΠ»Π΅Π½Ρ ΡΠΈΠΏΠ° ΠΊΠ»Π°ΡΡΠ°, ΡΠ²Π»ΡΡΡΠΈΠ΅ΡΡ ΡΠ°ΡΡΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, Π½Π΅ ΡΠ΄Π°Π»ΡΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ. Π£ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠ° Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° ΡΠ·Π½Π°ΡΡ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Ρ ΡΠ°Π½ΠΈΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π·Π½Π°ΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· ΡΠ»Π΅Π½ΠΎΠ² ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ΄Π°Π»ΠΈΡΡ.
ΠΠΎΡΡΠΎΠΌΡ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»ΠΈ ΡΠ΄Π°Π»ΡΠ΅ΠΌΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΡΡΠΎΠΊΡ. ΠΡΠ»ΠΈ ΡΡΠΎ ΡΠ°ΠΊ, ΡΠΎ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ ΡΠ²Π½ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ ΠΊΠ»Π°ΡΡΠ° string (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 19.1.2) Π΄Π»Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠ»ΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΈΠ· Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΡΠΈΠΏΠΎΠ², ΡΠΎ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ.
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄ΠΈΡΠΊΡΠΈΠΌΠΈΠ½Π°Π½ΡΠ° ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈΠΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ tok ΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ»Π΅Π½ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ. ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΡ, ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠ»Π΅Π½Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΠ»ΠΎΠ²Π½ΠΎ ΡΠ΄Π°Π»ΡΡΡ ΡΡΡΠΎΠΊΡ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ:
Token &Token::operator=(int i) {
if (tok == STR) sval.~string(); // Π΅ΡΠ»ΠΈ ΡΡΠΎ ΡΡΡΠΎΠΊΠ°, ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ Π΅Π΅
ival = i; // ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ»Π΅Π½
tok = INT; // ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π΄ΠΈΡΠΊΡΠΈΠΌΠΈΠ½Π°Π½Ρ
return *this;
}
ΠΡΠ»ΠΈ ΡΠ΅ΠΊΡΡΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠΎΠΊΠ°, Π΅Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ ΠΏΡΠ΅ΠΆΠ΄Π΅, ΡΠ΅ΠΌ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ ΠΊΠ»Π°ΡΡΠ° string.
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ»Π΅Π½ ΡΠΈΠΏΠ° string ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΡΡΡ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ ΡΠ»Π΅Π½Ρ, ΡΠΈΠΏ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠΈΠΏΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ int, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ ival. ΠΠ°ΡΠ΅ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΈΡΠΊΡΠΈΠΌΠΈΠ½Π°Π½Ρ ΠΈ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΡ ΠΎΠ΄.
ΠΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠΈΠΏΠΎΠ² double ΠΈ char Π²Π΅Π΄ΡΡ ΡΠ΅Π±Ρ, ΠΊΠ°ΠΊ ΠΈ Π²Π΅ΡΡΠΈΡ Π΄Π»Ρ ΡΠΈΠΏΠ° int, ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΡΡΠ°Π΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡ. ΠΠ΅ΡΡΠΈΡ Π΄Π»Ρ ΡΠΈΠΏΠ° string ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ , ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΎΠΌ ΠΎΡ ΡΠΈΠΏΠ° string ΠΈ ΠΊ Π½Π΅ΠΌΡ:
Token &Token::operator=(const std::string &s) {
if (tok == STR) // Π΅ΡΠ»ΠΈ ΡΡΡΠΎΠΊΠ° ΡΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ, ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ Π½ΠΎΠ²ΡΡ
sval = s;
else
new(&sval) string(s); // Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΡΠΎΠΊΡ
tok = STR; // ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π΄ΠΈΡΠΊΡΠΈΠΌΠΈΠ½Π°Π½Ρ
return *this;
}
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΡΠΎΠΊΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ° string, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠ΅. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ° string Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° Π΅Π³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΡΠΎΠΊΡ Π² ΠΏΠ°ΠΌΡΡΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅. ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΡΠΎΠΊΠΈ Π² ΠΎΠ±Π»Π°ΡΡΠΈ, Π³Π΄Π΅ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ sval, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΠΈΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ new (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 19.1.2). Π‘ΡΡΠΎΠΊΠ° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΠΊΠΎΠΏΠΈΠ΅ΠΉ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, Π·Π°ΡΠ΅ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΈΡΠΊΡΠΈΠΌΠΈΠ½Π°Π½Ρ ΠΈ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΡ ΠΎΠ΄.
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π½Π°ΠΌΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, ΡΡΠ΅Π±ΡΡΡΠ΅Π΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌΠΠΎΠ΄ΠΎΠ±Π½ΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌ Π΄Π»Ρ ΡΠΈΠΏΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°ΠΌ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ, ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠΎΠΏΠΈΠΉ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π΄ΠΈΡΠΊΡΠΈΠΌΠΈΠ½Π°Π½Ρ, ΡΡΠΎΠ±Ρ Π·Π½Π°ΡΡ, ΠΊΠ°ΠΊ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ-ΡΠ»Π΅Π½ copyUnion().
ΠΠΎΠ³Π΄Π° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ copyUnion() ΠΈΠ· ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΊΠΎΠΏΠΈΠΉ, ΡΠ»Π΅Π½ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΎΠ·Π½Π°ΡΠ°Ρ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅Π½ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΡΠΎΠΊΠ° Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ, Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½Π΅ ΡΡΡΠΎΠΊΡ. ΠΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΠΈΡΡΠ²Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΡΠΎΠΊΡ. ΠΡΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ ΡΡΠΎΡ ΡΠ»ΡΡΠ°ΠΉ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ΅ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΅ΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ copyUnion() ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΡΠΎΠΊΡ, ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΡΡΠΎΠΊΡ:
void Token::copyUnion(const Token &t) {
switch (t.tok) {
case Token::INT: ival = t.ival; break;
case Token::CHAR: cval = t.cval; break;
case Token::DBL: dval = t.dval; break;
// Π΄Π»Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΡΠΎΠΊΠΈ ΡΠΎΠ·Π΄Π°ΡΡ Π΅Π΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΠΈΠΉ
// ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ new; ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 19.1.2
case Token::STR: new(&sval) string(t.sval); break;
}
}
ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄ΠΈΡΠΊΡΠΈΠΌΠΈΠ½Π°Π½ΡΠ° ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ switch (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 5.3.2). ΠΠ½Π°ΡΠ΅Π½ΠΈΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΡΠΈΠΏΠΎΠ² ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌΡ ΡΠ»Π΅Π½Ρ; Π΅ΡΠ»ΠΈ ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌΡΠΉ ΡΠ»Π΅Π½ ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ string, ΠΎΠ½ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ.
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΡΠ»Π΅Π½Π° ΡΠΈΠΏΠ° string: Π»Π΅Π²ΡΠΉ ΠΈ ΠΏΡΠ°Π²ΡΠΉ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Ρ ΡΠ²Π»ΡΡΡΡΡ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ; Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ² Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠΎΠΊΠΎΠΉ; ΠΎΠ΄ΠΈΠ½, Π½ΠΎ Π½Π΅ ΠΎΠ±Π° ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π° ΡΠ²Π»ΡΡΡΡΡ ΡΡΡΠΎΠΊΠΎΠΉ:
Token &Token::operator=(const Token &t) {
// Π΅ΡΠ»ΠΈ ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΡΠΎΠΊΡ, a t Π½Π΅Ρ, ΠΏΡΠ΅ΠΆΠ½ΡΡ ΡΡΡΠΎΠΊΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ
// ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ