From 233afd3715da0bfc95f570bdcb0d5a7b6407f9f9 Mon Sep 17 00:00:00 2001 From: Martin Di Paola Date: Fri, 23 Nov 2018 14:30:49 +0000 Subject: [PATCH] Minor refactor. --- byexample/parser.py | 4 +-- byexample/parser_state_machine.py | 51 ++++++++++++++++++++++--------- 2 files changed, 39 insertions(+), 16 deletions(-) diff --git a/byexample/parser.py b/byexample/parser.py index 764081c7..a32ccdbb 100644 --- a/byexample/parser.py +++ b/byexample/parser.py @@ -3,7 +3,7 @@ from .common import log, tohuman, constant from .options import OptionParser, UnrecognizedOption, ExtendOptionParserMixin from .expected import _LinearExpected, _RegexExpected -from .parser_state_machine import SM_NormWS, SM +from .parser_state_machine import SM_NormWS, SM_NotNormWS def tag_name_as_regex_name(name): return name.replace('-', '_') @@ -1146,7 +1146,7 @@ def expected_as_regexs_TMP(self, expected, tags_enabled, normalize_whitespace): tokenizer = self.expected_tokenizer(expected, tags_enabled) - sm = SM(self) + sm = SM_NotNormWS(self) while not sm.ended(): charno, ttype, token = next(tokenizer, (None, None, None)) sm.feed(charno, ttype, token) diff --git a/byexample/parser_state_machine.py b/byexample/parser_state_machine.py index 82e07a67..3f7b86f1 100644 --- a/byexample/parser_state_machine.py +++ b/byexample/parser_state_machine.py @@ -4,7 +4,7 @@ tWS = ('wspaces', 'newlines') tLIT = ('wspaces', 'newlines', 'literals') -class SM_NormWS: +class SM(object): def __init__(self, parser): self.stash = [] self.results = [] @@ -13,8 +13,6 @@ def __init__(self, parser): self.tags_by_idx = {} self.names_seen = set() - self.emit(0, r'\A', 0) - def ended(self): return self.state in (EXHAUSTED, ERROR) @@ -27,16 +25,6 @@ def drop(self, last=False): def emit(self, charno, regex, rcount): self.results.append((charno, regex, rcount)) - def emit_ws(self, just_one=False): - charno, _ = self.pull() - if just_one: - rx = r'\s' - else: - rx = r'\s+(?!\s)' - rc = 1 - - self.emit(charno, rx, rc) - def emit_literals(self): charno, l = self.pull() rx = re.escape(l) @@ -82,6 +70,29 @@ def emit_eof(self, ws): rc = 0 self.emit(charno, rx, rc) +class SM_NormWS(SM): + def __init__(self, parser): + SM.__init__(self, parser) + self.emit(0, r'\A', 0) + + def emit_ws(self, just_one=False): + charno, _ = self.pull() + if just_one: + rx = r'\s' + else: + rx = r'\s+(?!\s)' + rc = 1 + + self.emit(charno, rx, rc) + + def emit_tag(self, mode): + assert mode in ('l', 'r', 'b', '0') + return SM.emit_tag(self, mode) + + def emit_eof(self, ws): + assert ws == r'\s' + return SM.emit_eof(self, ws) + def feed(self, charno, ttype, token): push = self.stash.append drop = self.drop @@ -185,7 +196,19 @@ def feed(self, charno, ttype, token): else: assert False -class SM(SM_NormWS): +class SM_NotNormWS(SM): + def __init__(self, parser): + SM.__init__(self, parser) + self.emit(0, r'\A', 0) + + def emit_tag(self, mode): + assert mode in ('e', '0') + return SM.emit_tag(self, mode) + + def emit_eof(self, ws): + assert ws == r'\n' + return SM.emit_eof(self, ws) + def feed(self, charno, ttype, token): push = self.stash.append drop = self.drop