introduction to parsing [playlistfile =blondie\atomic\ -atomic ogg title =blondie atomic length = file =blondie\atomic\ - ' gonna love you too ogg title =blondie ' gonna love you too length =- numberofentries= version= figure an extract from pls file the bnf we have created can handle pls filesand is actually generic enough to handle similar key-value formats too the bnf is shown in figure pls ::(line '\ ')line ::ini_header key_value comment blank ini_header ::'[[^]]']key_value ::key \ '=\svaluekey ::\wvalue ::comment ::blank ::^figure bnf for the pls file format attributes bnf the bnf defines pls as one or more of line followed by newline each line can be an ini_headera key_valuea commentor blank the ini_header is defined to be an open bracketfollowed by one or more characters (excluding close bracket)followed by close bracket--we will skip these the key_value is subtly different from the attribute in the attribute_file example shown in the previous section in that the value is optionalalsohere we allow whitespace before and after the this means that line such as "title =\nis valid in this bnfas well as the ones that we would expect to be valid such as "length= \nthe key is sequence of one or more alphanumeric charactersand the value is any sequence of characters comments are python-style and we will skip themsimilarlyblank lines (blankare allowed but will be skipped the purpose of our parser is to populate dictionary with key-value items matching those in the filebut with lowercase keys the playlists py program uses the parser to obtain dictionary of playlist data which it then outputs in the requested format we won' cover the playlists py program itself since it