===== lexer.h ==== #ifndef LEXER_H #define LEXER_H #include #include using namespace std; enum TokenKind { ident, number, text, separator, eos }; class Lexer { private: ifstream f; char ch; void nextChar (); public: TokenKind kind; string token; void nextToken (); void error (string msg); public: Lexer (string fileName); ~ Lexer (); }; #endif ===== lexer.cpp ==== #include "lexer.h" #include using namespace std; const char zero = 0; Lexer::Lexer (string fileName) { f.open (fileName); if (!f.good ()) error ("Cannot open file: " + fileName); ch = zero; nextChar (); nextToken (); } Lexer::~Lexer () { if (f.good ()) f.close (); } void Lexer::error (string msg) { cerr << "Error: " << msg << ", token=" << token << endl; exit (1); } void Lexer::nextChar () { f >> ch; if (!f.good ()) ch = zero; } void Lexer::nextToken () { token = ""; while (ch != zero && ch <= ' ') nextChar (); if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z') { kind = ident; while (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z') { token = token + ch; nextChar (); } } else if (ch >= '0' && ch <= '9') { kind = number; while (ch >= '0' && ch <= '9') { token = token + ch; nextChar (); } } else if (ch != zero) { kind = separator; token = string (1, ch); nextChar (); } else { kind = eos; } } ===== Hlavní program ==== #include "lexer.h" #include using namespace std; int main () { Lexer inp ("abc.txt"); while (inp.kind != eos) { cout << inp.token << endl; inp.nextToken (); } cout << "O.K."; } ===== Soubor abc.txt se vstupními daty ==== { [ 1, 2, 3, 4 ], [ 10, 20, 30, 40 ], [ 100, 200, 300, 400 ] }