Skip to content

Commit 180f3aa

Browse files
committed
Moved describing functionality into an appropriate interface in the parser model
1 parent ba7d9ef commit 180f3aa

File tree

3 files changed

+30
-10
lines changed

3 files changed

+30
-10
lines changed

arpeggio/__init__.py

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ class NoMatch(Exception):
7171
"""
7272
def __init__(
7373
self,
74-
rules: typing.Union['ParsingExpression', 'ParserModelDebuggable'],
74+
rules: typing.Union['ParsingExpression', 'ParserModelDescribable'],
7575
position: int,
7676
parser: 'Parser',
7777
):
@@ -183,7 +183,7 @@ def resolve(
183183
return resolved_node
184184

185185

186-
class ParserModelDebuggable(abc.ABC):
186+
class ParserModelDescribable(abc.ABC):
187187
"""
188188
A basic interface class for all parser model helper classes.
189189
@@ -196,8 +196,16 @@ class ParserModelDebuggable(abc.ABC):
196196
def name(self):
197197
pass
198198

199+
@property
200+
def desc(self):
201+
self.name
202+
203+
@property
204+
def id(self):
205+
return f'{self.name}: {id(self)}'
206+
199207

200-
class ParsingStatement(ParserModelItem):
208+
class ParsingStatement(ParserModelItem, ParserModelDescribable):
201209
"""
202210
A basic class for all parser model statement classes.
203211
@@ -212,7 +220,7 @@ def parse(self, parser: 'Parser') -> typing.Optional['ParseTreeNode']:
212220
pass
213221

214222

215-
class ParsingExpression(ParsingStatement, ParserModelDebuggable):
223+
class ParsingExpression(ParsingStatement):
216224
"""
217225
An abstract class for all parsing expressions.
218226
@@ -255,6 +263,7 @@ def __init__(self, *elements, **kwargs):
255263
# positions.
256264
self._result_cache = {} # position -> parse tree at the position
257265

266+
@typing.override
258267
@property
259268
def desc(self):
260269
return "{}{}".format(self.name, "-" if self.suppress else "")
@@ -267,6 +276,7 @@ def name(self):
267276
else:
268277
return self.__class__.__name__
269278

279+
@typing.override
270280
@property
271281
def id(self):
272282
if self.root:
@@ -850,6 +860,7 @@ class Match(ParsingExpression):
850860
def __init__(self, rule_name, root=False, **kwargs):
851861
super().__init__(rule_name=rule_name, root=root, **kwargs)
852862

863+
@typing.override
853864
@property
854865
def name(self):
855866
if self.root:
@@ -1126,8 +1137,9 @@ def parse(self, parser: 'Parser') -> typing.Optional['ParseTreeNode']:
11261137
def __str__(self):
11271138
return '@' + self.state_name
11281139

1140+
@typing.override
11291141
@property
1130-
def desc(self):
1142+
def name(self):
11311143
return "@{}".format(
11321144
self.state_name,
11331145
)
@@ -1146,8 +1158,9 @@ def parse(self, parser: 'Parser') -> typing.Optional['ParseTreeNode']:
11461158
def __str__(self):
11471159
return '+@' + self.state_name
11481160

1161+
@typing.override
11491162
@property
1150-
def desc(self):
1163+
def name(self):
11511164
return "+@{}".format(
11521165
self.state_name,
11531166
)
@@ -1176,8 +1189,9 @@ def parse(self, parser: 'Parser') -> typing.Optional['ParseTreeNode']:
11761189
def __str__(self):
11771190
return '-@' + self.state_name
11781191

1192+
@typing.override
11791193
@property
1180-
def desc(self):
1194+
def name(self):
11811195
return "-@{}".format(
11821196
self.state_name,
11831197
)
@@ -1216,6 +1230,7 @@ class EndOfFile(Match):
12161230
def __init__(self):
12171231
super().__init__("EOF")
12181232

1233+
@typing.override
12191234
@property
12201235
def name(self):
12211236
return "EOF"
@@ -1268,6 +1283,7 @@ def __init__(self, rule, position, error):
12681283
self.error = error
12691284
self.comments = None
12701285

1286+
@typing.override
12711287
@property
12721288
def name(self):
12731289
return f"{self.rule_name} [{self.position}]"
@@ -1342,6 +1358,7 @@ def __init__(self, rule, position, value, error=False, suppress=False,
13421358
self.suppress = suppress
13431359
self.extra_info = extra_info
13441360

1361+
@typing.override
13451362
@property
13461363
def desc(self):
13471364
if self.value:
@@ -1404,6 +1421,7 @@ def value(self):
14041421
"""Terminal protocol."""
14051422
return str(self)
14061423

1424+
@typing.override
14071425
@property
14081426
def desc(self):
14091427
return self.name

arpeggio/export.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ def neighbours(self):
114114

115115
class PMDOTExportAdapter(DOTExportAdapter):
116116
"""
117-
Adapter for ParsingExpression graph types (parser model).
117+
Adapter for ParsingStatement graph types (parser model).
118118
"""
119119
@property
120120
def id(self):

arpeggio/peg.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
ParserStateLayer,
3434
ParserRepetitionStateLayer,
3535
Parser,
36-
ParserModelDebuggable,
36+
ParserModelDescribable,
3737
ParserPython,
3838
ParseTreeNode,
3939
PTNodeVisitor,
@@ -236,7 +236,7 @@ class LayerScope(enum.Enum):
236236
CURRENT = -1
237237

238238

239-
class MatchedAction(ParserModelDebuggable):
239+
class MatchedAction(ParserModelDescribable):
240240
"""
241241
An abstract class for all action classes used in MatchActions parsing rules.
242242
"""
@@ -282,6 +282,7 @@ def run(
282282
def __str__(self):
283283
return f'{str(self._rule)}{{{' '.join(map(str, self._args))}}}'
284284

285+
@typing.override
285286
@property
286287
def name(self):
287288
if self._command_hint:
@@ -680,6 +681,7 @@ def __str__(self):
680681
rule_node = self.nodes[0]
681682
return str(rule_node)
682683

684+
@typing.override
683685
@property
684686
def desc(self):
685687
return "{}{{{}}}{}".format(

0 commit comments

Comments
 (0)