| | |
| | | |
| | | |
| | | import string |
| | | from collections import OrderedDict |
| | | from typing import Dict, List, Union |
| | |
| | | |
| | | Args: |
| | | text: text to be parsed |
| | | |
| | | |
| | | """ |
| | | self.text = text |
| | | self.len_text = len(text) |
| | |
| | | if self.char == ":": |
| | | self.parse_char(":") |
| | | self.parse_ws() |
| | | self.parse_char("\"") |
| | | self.parse_char('"') |
| | | value_string = self.parse_string_value() |
| | | self.parse_char("\"") |
| | | self.parse_char('"') |
| | | return value_string |
| | | elif self.char == "{": |
| | | d = OrderedDict() |
| | |
| | | |
| | | def parse_char(self, exp) -> bool: |
| | | """ |
| | | Parses character |
| | | Parses character |
| | | |
| | | Args: |
| | | exp: character to read in |
| | | |
| | | |
| | | Returns true if successful |
| | | """ |
| | | assert self.char == exp |
| | |
| | | |
| | | Args: |
| | | exp: characters to read in |
| | | |
| | | |
| | | Returns true if successful |
| | | """ |
| | | ok = False |
| | |
| | | # assert self.char not in string.whitespace and self.char != EOS |
| | | assert self.char != EOS |
| | | l = [] |
| | | while self.char != "\"" or self.text[self.index + 1] != " ": |
| | | while self.char != '"' or self.text[self.index + 1] != " ": |
| | | l.append(self.char) |
| | | if not self.read(): |
| | | raise ValueError() |
| | |
| | | |
| | | def read(self): |
| | | """ |
| | | Reads in next char. |
| | | |
| | | Reads in next char. |
| | | |
| | | Returns true if not EOS |
| | | """ |
| | | if self.index < self.len_text - 1: # should be unique |