Read lines from the file (handling line continuations and comments)
and parse the lines using the
Reader
. Raises
Invalid_Configuration
with a descriptive message if a parse error occurs.
The Reader
may rely on the particular sequence of parsing operations
use by Read
: for each line, it first calls Parse_Key
, then
Parse_Operator
, and finally New_Key
. The value of a key is the
rest of the line beyond the operator, with leading and trailing white
space trimmed.
This routine is smart enough to handle recursive calls, where the
Reader
's New_Key
operation calls Read_From_File
again. If
a recursive inclusion of an already included file is detected,
Invalid_Configuration
is raised.
Warning: this recursion detection can be subverted if an original
Reader
's New_Key
operation calls Read_From_File
passing another
Reader
!