Zkouška 19.1.2023 String Expressions Evaluator

Základní kurs objektově orientovaného programování v C++. Třídy a objekty, zapouzdření, metody, plymorfismus. Abstraktní datové typy, přetěžování. Kontejnery, iterátory, algoritmy. Šablony, generické programování, kompilační polymorfismus. Výjimky. Bezpečné a přenositelné programování, vazby na OS.
cart1er

Zkouška 19.1.2023 String Expressions Evaluator

Příspěvek od cart1er »

2 testy na základní funkcionalitu (30b), zbytek na errory (20b).

---
Implement evaluator of string concatenation expressions.

Summary
The executable shall be passed two parameters:

A path to string function definitions
A path to string expressions

Kód: Vybrat vše

prog FUNCS_FILE EXPRS_FILE
The goal is to process all function definitions and evaluate all expressions using obtained functions.

Function Definitions File Composition
Each line contains a single function definition. A single line shall be as follows:

Kód: Vybrat vše

FUNCTION_NAME ARGS = BODY
First comes a single word FUNCTION_NAME, which serves as a function identifier. ARGS is a list of whitespace separated words. These define identifiers of the function arguments. BODY is a (possibly empty) list of whitespace separated function argument identifiers (defined in ARGS part). Each word (either function name or argument) is a sequence of letters (std::isalpha).

Examples:

Kód: Vybrat vše

foo x = x
goo x y = y x
hoo a b c = a a a
String Expressions File Composition

Each line contains a single string expression. A single line shall be as follows:

Kód: Vybrat vše

FUNCTION_NAME(ARG1,ARG2,...,ARGN)
FUNCTION_NAME shall be equal to one of the functions in the function definitions file. Using () notation, the function is called with comma separater arguments. Number of passed arguments shall be equal to the number of arguments specified in the function definition. ARG argument can be twofold: either it is string (a sequence of characters enveloped with ") or another function call.

Example:

Kód: Vybrat vše

foo("ahoj")
goo("a","b")
hoo(foo("ahoj"),goo("l","m"),"x")
Task
The program shall process function definitions file and print value of each string expression on separate line. The value is computed by passing arguments to the functions and concatenating strings as specified by the body of the function definitions.

The solution using the examples above as file contents:

Kód: Vybrat vše

prog funcs.txt exprs.txt

Kód: Vybrat vše

ahoj
b a 
ahoj ahoj ahoj
Bad Inputs
When program encounters a malformed line (bad function name, no equals sign, malformed expression), it shall print parse error to standard output.
Other errors
- when BODY contains word not present in ARGS - print def error to standard output
- when an expression contains an undefined function name - print nodef error to standard output
- when a function is called with incorrect number of parameters - print param error to standard output

When the program encounters erroneous line, it prints error message and continues processing other lines.
Odpovědět

Zpět na „NPRG041 Programování v C++“