我目前正在使用C#为自定义语言构建自己的解释器。我目前正在遵循本指南(https://ruslanspivak.com/lsbasi-part1/),我认为这将有助于我制作简单的口译员。但是,该指南包含Python的代码,我不会在Python中知道一件事。
我在指南中遇到了这段代码的问题:
INTEGER, PLUS, EOF = 'INTEGER', 'PLUS', 'EOF'
class Token(object):
def __init__(self, type, value):
# token type: INTEGER, PLUS, or EOF
self.type = type
# token value: 0, 1, 2. 3, 4, 5, 6, 7, 8, 9, '+', or None
self.value = value
def __str__(self):
"""String representation of the class instance.
Examples:
Token(INTEGER, 3)
Token(PLUS '+')
"""
return 'Token({type}, {value})'.format(
type=self.type,
value=repr(self.value)
)
def __repr__(self):
return self.__str__()
我认为INTEGER
,PLUS
和EOF
是全局常量。但是在我的代码中,我无法创建与此类似的东西,因此我只需在函数中创建常量,如const string INTEGER = "INTEGER"
。这是对的吗?
第二个问题:我无法弄清楚Python中的类和函数是如何工作的。从上面的代码中,我在C#中创建了它:
public class Token {
public string tokenStr(string type, string value)
{
return "Token(" + type + "," + value + ")";
}
}
我不理解括号中object
在Python类中的含义,以及Python函数括号中的self
。我也不知道将__init__
函数放在C#中的哪个位置。
有人可以教我Python代码的含义吗?
答案 0 :(得分:0)
是的,这些都是全球性的变种。你的方法很好。
括号中的“对象”是类“对象”的继承。在这种情况下,你可以忽略它
括号中的self只是python语法,self在C#中等同于'this',你必须在方法的签名中指定它。同样,你可以忽略它
init 只是该类的构造函数。