summaryrefslogtreecommitdiff
path: root/pyscv/Frontend/reader.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyscv/Frontend/reader.py')
-rw-r--r--pyscv/Frontend/reader.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/pyscv/Frontend/reader.py b/pyscv/Frontend/reader.py
new file mode 100644
index 0000000..a2a280b
--- /dev/null
+++ b/pyscv/Frontend/reader.py
@@ -0,0 +1,51 @@
+# TODO Logging is interesting for debugging purposes, decide what to do with it
+from .logger import newlogger
+logger = newlogger(__name__)
+#import logging
+#logger.setLevel(logging.WARN)
+
+class Reader:
+ def __init__(self, filename):
+ self.filename = filename
+ self._file = None
+ self.lineno = 0
+ self.charno = 0
+ self.char = None
+
+ def open(self):
+ self._file = open(self.filename, "r")
+ return
+ def close(self):
+ self._file.close()
+ return
+
+ def __enter__(self):
+ self.open()
+ return self
+
+ def __exit__(self, type, value, tb):
+ self.close()
+
+ def advance(self):
+ self.charno += 1
+ if self.char == "\n":
+ self.lineno += 1
+ self.charno = 0
+ self.char = self._file.read(1)
+
+ logger.debug("Read: %s" % self.char.__repr__())
+ return
+
+ def peek(self):
+ pos = self._file.tell()
+ ch = self._file.read(1)
+ self._file.seek(pos)
+ return ch
+
+
+if __name__ == "__main__":
+ with Reader(__file__ ) as src:
+ print(src.peek())
+ while src.peek() != "":
+ src.advance()
+ print(src.char)