Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
fja
eval
Commits
01435461
Commit
01435461
authored
Mar 05, 2022
by
Vladimír Štill
Browse files
lib: Allow ordering of elementary types
parent
161a397d
Pipeline
#113854
passed with stage
in 1 minute and 22 seconds
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
lib/common.py
View file @
01435461
from
functools
import
total_ordering
@
total_ordering
class
Terminal
:
def
__init__
(
self
,
name
:
str
):
self
.
name
=
name
def
__eq__
(
self
,
obj
):
def
__eq__
(
self
,
obj
)
->
bool
:
if
isinstance
(
obj
,
Terminal
):
return
obj
.
name
==
self
.
name
return
self
.
name
==
obj
.
name
return
False
def
__lt__
(
self
,
obj
)
->
bool
:
if
isinstance
(
obj
,
Terminal
):
return
self
.
name
<
obj
.
name
return
True
def
__hash__
(
self
):
return
hash
(
self
.
name
)
...
...
@@ -16,34 +23,43 @@ class Terminal:
return
f
"Terminal(
{
self
.
name
}
)"
@
total_ordering
class
Nonterminal
:
def
__init__
(
self
,
name
:
str
):
self
.
name
=
name
def
__eq__
(
self
,
obj
):
def
__eq__
(
self
,
obj
)
->
bool
:
if
isinstance
(
obj
,
Nonterminal
):
return
obj
.
name
==
self
.
name
return
self
.
name
==
obj
.
name
return
False
def
__lt__
(
self
,
obj
)
->
bool
:
if
isinstance
(
obj
,
Nonterminal
):
return
self
.
name
<
obj
.
name
return
True
def
__hash__
(
self
):
return
hash
(
self
.
name
)
def
__lt__
(
self
,
other
)
->
bool
:
return
self
.
name
<
other
.
name
def
__repr__
(
self
)
->
str
:
return
f
"Nonterminal(
{
self
.
name
}
)"
@
total_ordering
class
Character
:
def
__init__
(
self
,
name
:
str
):
self
.
name
=
name
def
__eq__
(
self
,
obj
):
def
__eq__
(
self
,
obj
)
->
bool
:
if
isinstance
(
obj
,
Character
):
return
obj
.
name
==
self
.
name
return
self
.
name
==
obj
.
name
return
False
def
__lt__
(
self
,
obj
)
->
bool
:
if
isinstance
(
obj
,
Character
):
return
self
.
name
<
obj
.
name
return
True
def
__hash__
(
self
):
return
hash
(
self
.
name
)
...
...
@@ -51,15 +67,21 @@ class Character:
return
f
"Character(
{
self
.
name
}
)"
@
total_ordering
class
State
:
def
__init__
(
self
,
name
:
str
):
self
.
name
=
name
def
__eq__
(
self
,
obj
):
def
__eq__
(
self
,
obj
)
->
bool
:
if
isinstance
(
obj
,
State
):
return
obj
.
name
==
self
.
name
return
self
.
name
==
obj
.
name
return
False
def
__lt__
(
self
,
obj
)
->
bool
:
if
isinstance
(
obj
,
State
):
return
self
.
name
<
obj
.
name
return
True
def
__hash__
(
self
):
return
hash
(
self
.
name
)
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment