Parsing System¶
This document explains the configuration parsing system used in the A-Maze-ing project.
The parser is responsible for: - Reading maze configuration files - Validating required parameters - Converting values to proper Python types - Detecting invalid or duplicated data - Ensuring the maze configuration is valid before generation
đ Main File¶
parsing/
âââ config_parser.py
đ§ Overview¶
The parser uses a simple KEY=VALUE configuration format.
Example:
WIDTH=20
HEIGHT=20
ENTRY=0,0
EXIT=19,19
OUTPUT_FILE=output_maze.txt
PERFECT=True
SEED=42
The configuration is:
- read from a .txt file
- converted into a Python dictionary
- validated
- transformed into usable Python types
âī¸ Main Responsibilities¶
The parsing system performs several validation and transformation steps:
- File loading
- Syntax validation
- Required key validation
- Duplicate key detection
- Type conversion
- Semantic validation
đĨ Configuration File Path¶
The parser first checks if a configuration file was provided through command-line arguments.
def get_config_path() -> str:
Behavior¶
- If a
.txtfile path is provided: - it is used as the configuration source
- If no argument is provided:
- an exception is raised
đ Mandatory Keys Validation¶
The parser validates that all required configuration keys exist.
Required keys:
WIDTH
HEIGHT
ENTRY
EXIT
OUTPUT_FILE
PERFECT
If one or more keys are missing:
ConfigError:
Missing required key(s)
is raised.
đ Configuration Parsing¶
The main parsing function is:
def parse_config(file_path: str) -> dict[str, Any]:
This function: - opens the configuration file - reads it line by line - validates syntax - stores values in a dictionary
⨠Supported Features¶
Empty Lines¶
Empty lines are ignored.
Example:
WIDTH=20
HEIGHT=20
Comments¶
Lines starting with # are ignored.
Example:
# Maze configuration
WIDTH=20
Duplicate Key Detection¶
If the same key appears twice:
WIDTH=20
WIDTH=30
the parser raises:
Duplicate key 'WIDTH'
Invalid Format Detection¶
If a line does not contain =:
WIDTH 20
the parser raises:
Invalid format on line X
đ Type Conversion System¶
After parsing the raw strings, the values are converted into proper Python types.
Main conversion function:
def convert_config(config: dict[str, Any]) -> dict[str, Any]:
đĸ Integer Conversion¶
The following keys are converted to integers:
WIDTH
HEIGHT
SEED
Example:
WIDTH=20
becomes:
20
đ Coordinate Conversion¶
The following keys are converted into tuples:
ENTRY
EXIT
Example:
ENTRY=0,0
becomes:
(0, 0)
â Boolean Conversion¶
The PERFECT key is converted into a boolean value.
Example:
PERFECT=True
becomes:
True
Supported values:
True
False
Invalid values raise:
PERFECT must be True or False
đĄī¸ Semantic Validation¶
The parser also validates logical maze constraints.
Positive Dimensions¶
Maze dimensions must be positive.
Invalid example:
WIDTH=-5
Entry and Exit Validation¶
The parser ensures: - entry and exit are different - coordinates are inside maze bounds
Invalid example:
ENTRY=50,50
for a small maze raises an exception.
đ¨ Error Handling¶
The parsing system uses a custom exception:
class ConfigError(Exception):
This provides: - cleaner error reporting - easier debugging - centralized configuration validation errors
đ§Š Parsing Pipeline¶
config.txt
â
âŧ
parse_config()
â
âŧ
Dictionary Creation
â
âŧ
Mandatory Key Validation
â
âŧ
convert_config()
â
âŧ
Type Conversion
â
âŧ
Semantic Validation
â
âŧ
Validated Configuration
đĻ Final Output Example¶
After parsing and conversion:
{
"WIDTH": 20,
"HEIGHT": 20,
"ENTRY": (0, 0),
"EXIT": (19, 19),
"OUTPUT_FILE": "output_maze.txt",
"PERFECT": True,
"SEED": 42
}
đ¯ Goals of the Parsing System¶
The parsing system was designed to: - simplify maze configuration - provide strong validation - prevent invalid maze generation - improve debugging - keep the project modular and maintainable
It acts as the first validation layer before any maze generation or rendering begins.