# 5. Report contents / Зміст звіту The report is submitted together with the source code. It must contain the following sections. 1. **Title block** — course, laboratory work number and title, student's name and group, date. 2. **Objective** — a short statement of the goal of the work (see [1purpose.md](1purpose.md)). 3. **Brief theory** — what a finite state machine is (states, alphabet, transitions, start and accepting states), in your own words (see [Lecture 14 — Automata theory](../../Lectures/CDM-L14.md)). 4. **State design** — the **transition table** or **state diagram** of your scanner, the character classes used, and which states are emitting. Explain how the machine grows across the four tasks. 5. **Implementation** — the source code of the scanner, with brief comments. State the programming language used. 6. **Testing** — the results for the example input `adfvq3414fn.f143.31f-113.112vwe` at all four stages (`341414331113112`; `[3414, 143, 31, 113, 112]`; `[3414, 143.31, 113.112]`; `[3414, 143.31, -113.112]`) **and** your own cases: a string with no digits, a number at the very start or end, and a lone `.` or `-`. 7. **Complexity** — argue that the scanner runs in $O(n)$ time and uses $O(1)$ state. 8. **Conclusions** — what was implemented, difficulties encountered (especially the roles of `.` and `-`), and what you learned about state machines. **Submission requirements.** The source must compile/run and reproduce the example outputs of [4task.md](4task.md).