4

对不起标题,我不确定如何用更一般的意义来表达这个问题。我正在研究一个brainfuck解析器。该语言有 8 种标记,我目前用以下类表示:

# Types of lexical tokens
class Token: pass
class IncPtrToken(Token): pass
class DecPtrToken(Token): pass
class IncByteToken(Token): pass
class DecByteToken(Token): pass
class OutputByteToken(Token): pass
class InputByteToken(Token): pass
class LoopStartToken(Token): pass
class LoopEndToken(Token): pass

在另一种语言中,我可能会使用枚举来表示不同的类型,但这在 Python 中似乎是一个合理的替代方案。

我读过在 Python 中还有其他表示枚举的方法,但我认为这种风格是合适的,因为其中一些实体可能会携带额外的数据。例如,当在解析器中表示节点类型时,像循环这样的节点将包含一个成员,其中节点位于循环内。

4

2 回答 2

1

Python 在 3.4 中获得了官方的 Enum 类。

如果您在 2.4 和 3.3 之间使用 Python,请检查enum34 backport

也可以将其他行为和状态添加到自定义 Enum 类。

于 2013-08-27T22:47:34.360 回答
1

类型 :

import this

(也称为 PEP 20)简要解释了什么是 pythonic。

“如果实现很难解释,那就是个坏主意。如果实现很容易解释,那可能是个好主意。”

我不知道你打算如何做你的笨蛋翻译。我想您不打算将特定功能(与给定 ...Token 所做的事情相关)放在 ...Token 类中。

一旦 Py 3.4 发布,我会使用函数,或者,如果它们是空的,则使用一个列表,用枚举替换。

简而言之:难以解释?继续思考!

于 2013-08-27T22:56:26.400 回答