diff options
Diffstat (limited to 'users/wpcarro/scratch/simple-select/scanner.py')
-rw-r--r-- | users/wpcarro/scratch/simple-select/scanner.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/users/wpcarro/scratch/simple-select/scanner.py b/users/wpcarro/scratch/simple-select/scanner.py new file mode 100644 index 000000000000..96704ec1ab3c --- /dev/null +++ b/users/wpcarro/scratch/simple-select/scanner.py @@ -0,0 +1,27 @@ +# According to Crafting Interpreters, the only two primitives that a +# scanner/lexer needs are peek and advance; other functions (e.g. match) are +# nice-to-haves. +class Scanner(object): + def __init__(self, source): + self.i = 0 + self.source = source + + def exhausted(self): + return self.i >= len(self.source) + + def peek(self, n=0): + return self.source[self.i + n] if self.i + n < len(self.source) else '\0' + + def advance(self): + result = self.peek() + self.i += 1 + return result + + def match(self, x): + if self.exhausted(): + return False + if self.peek() == x: + self.advance() + return True + else: + return False |